2015-02-06 308 views
0

我已经搜索了这个问题,一直没能找到解决方案。如果文件保存为.xls而不是.xlsm,则此代码有效。我正在使用Office 2013(32位)。无法获取OLEObject类的对象属性 - Excel Interop

我写了一个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只是实例化我的类对象,而托管代码则完成剩下的工作。

回答

0

的解决方案是从您%APPDATA%和%TEMP%删除所有.exd文件,因为......发生

此问题,因为一些脚本化的控件在Office 2013过时出于安全原因。这是设计,这些错误是预期的。这些可编写脚本的控件是通过使用仅适用于这些控件的特定于版本的kill位来禁用的,并且只有在文档中使用这些控件时才会发生这种情况。我们建议您不要尝试将可编写脚本的控件直接嵌入到文档中,因为此行为可能会降低系统安全性

感谢yay_excel帮助我。下面是帮助我的页面:

http://www.excelforum.com/excel-programming-vba-macros/1060133-run-time-error-1004-on-certain-machines.html

这反过来又指向该MSDN知识库文章: MSDN