2011-09-27 76 views
3

我有幾個Excel工作簿。它們都共享相同的宏模塊。我想要實現的是在一個工作簿中編輯一個模塊而不必編輯其他工作簿中的相同模塊。如何將VBScript宏導入Excel工作簿?

當然,我的第一步是導出保存在.bas文件中的模塊。但問題是我無法在加載時導入它們。

我試過這樣:

Private Sub Workbook_Open() 
    Set objwb = ThisWorkbook 
    Set oVBC = objwb.VBProject.VBComponents 
    Set CM = oVBC.Import("C:\Temp\TestModule.bas") 
    TestFunc 
End Sub 

有與內容相同的目錄一TestModule.bas:

Function TestFunc() 
    MsgBox "TestFunc called" 
End Function 

當打開工作簿,將出現一個編譯錯誤:Sub or Function not defined。如果我手動導入模塊,一切正常。

感謝您的任何建議。

+0

有你考慮將你的代碼分解成一個插件? –

+0

不,我認爲導入模塊會容易得多。 –

+0

VBScript或VBA?或者兩者兼而有之??他們不一樣... –

回答

1

像你一樣,我無法從workbook_open中導入工作。你可以把你的導入代碼中的一個子一個獨立的模塊,並從您的workbook_open這樣稱呼它:

Private Sub Workbook_Open() 
    Application.OnTime Now, "ImportCode" 
End Sub 

這似乎爲我工作(直接呼叫沒有...)

+0

感謝您的答案,但它似乎並沒有在我的情況。你的代碼有什麼不同?我想知道如何檢查'oVBC.Import'的返回值... –

+0

導入應該重新引用導入的模塊。你應該可以使用'If CM Is Nothing Then ...'來測試它是否爲空。不知道爲什麼它在失敗時不會引發錯誤。 –

+0

我甚至試圖在工作簿加載後的15秒後調用導入函數Application.OnTime Now + TimeValue(「00:00:15」),「ThisWorkbook.ImportCode」'。它被稱爲,但然後再次導入不起作用。無論如何,再次感謝和+1的建議。 –

相關問題