2015-02-06 36 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

相關問題