你需要通過在VBA編輯器工具/參考添加引用Microsoft Visual Basic for Applications Extensibility 5.3
。
或者,您可以使用遲綁定。
通過
Dim comp As Object
更換
Dim comp As VBComponent
然後
Set comp = ThisWorkbook.VBProject.VBComponents("File")
將正常工作。有點奇怪的是,您不需要包含引用來調用.VBProject
,因爲這是工作簿對象的標準屬性。
不幸的是,你希望
Workbooks("book2.xlsm").VBProject.VBComponents.Add comp
將無法正常工作。 .Add
創建一個空白組件。參數需要是一個常數,它描述了您想要創建的組件的類型,對於標準代碼模塊應該是1
。 (有一些可以使用的常量,而不是1
,但是我懷疑這些常量在沒有參考的情況下不起作用)。
您可以驗證,即使沒有參考線:
Set target = Workbooks("book2.xlsm").VBProject.VBComponents.Add(1)
(其中target
被聲明爲Object
或Variant
)將同時在創造第二冊一個新的模塊,並建立對它的引用成功。此引用可用於傳輸代碼,但不能同時傳輸(AFAIK)所有內容。爲此,您可能需要以編程方式導出/導入,如Chip Pearson的article on scripting the VBE中所述。你可以通過那篇文章,在需要的時候使用後期綁定。
首先,你爲什麼需要_programmatically_複製模塊?其次,使用調試器來查找我們在哪條線上得到錯誤。 – FDavidov
@FDavidov請參閱最新的問題。 –