我用谷歌搜索了这个问题,但未能找到解决方案。如果文件保存为 .xls 而不是 .xlsm,则此代码有效。我使用的是 Office 2013(32 位)。
我编写了一个 COM 公开的 C# 类库。 Excel工作簿实例化一个对象并传入对当前工作簿的引用。然后,该对象调用 Excel 对象并更新第一张工作表上 Label1 的标题。
我已打开所有信任中心设置(它适用于 .xls 文件),并且 .xlsm 文件无论如何都不受保护。
我尝试了几种不同的方法来更新标题,我确保我正在使用OLEObjects
- 但它仍然抛出一个Unable to get the Object property of the OLEObject class
.
//Method 1
OLEObject label = this._currentBook.ActiveSheet.OLEObjects(1);
label.Object.Caption = "New text";
//
//Method 2
int index = -1;
foreach (OLEObject obj in this._currentBook.ActiveSheet.OLEObjects)
{
if (obj.Name.ToUpper() == "LABEL1")
{
index = obj.Index;
}
}
if (index >= 0)
this._currentBook.ActiveSheet.OLEObjects(1).Object.Caption = "Some text";
//
//Method 3
this._currentBook.ActiveSheet.OleObjects("Label1").Object.Caption = "Different text";
该代码必须发生在类库中,因为这是我需要遵守的业务规则。 excel vba 只是实例化我的类对象,托管代码完成其余的工作。
解决方案是从 %APPDATA% 和 %TEMP% 中删除所有 .exd 文件,因为...
出现此问题的原因是出于安全原因,某些可编写脚本的控件在 Office 2013 中已过时。这是设计使然,这些错误是预料之中的。这些可编写脚本的控件可通过使用仅适用于这些控件的特定于版本的终止位来禁用,并且仅当在文档中使用它们时才会发生这种情况。我们建议您不要尝试将可编写脚本的控件直接嵌入到文档中,因为这种行为可能会降低系统安全性
感谢 yay_excel 对我的帮助。这是帮助我的页面:
http://www.excelforum.com/excel-programming-vba-macros/1060133-run-time-error-1004-on-certain-machines.html http://www.excelforum.com/excel-programming-vba-macros/1060133-run-time-error-1004-on-certain-machines.html
这又指向这篇 MSDN 知识库文章:MSDN http://support.microsoft.com/kb/2793374
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)