2016-12-03 214 views
0

我想從一個工作簿複製一個VBA模塊到另一個使用下面的代碼。VBA將模塊從一個工作簿複製到另一個工作簿?

Dim comp As VBComponent 
Set comp = ThisWorkbook.VBProject.VBComponents("File") 
Workbooks("book2.xlsm").VBProject.VBComponents.Add comp 

出於某種原因,這給了我在下一行沒有定義一個錯誤的用戶定義類型:

Dim comp As VBComponent 

請能有人告訴我在哪裏,我錯了?

感謝

+0

首先,你爲什麼需要_programmatically_複製模塊?其次,使用調試器來查找我們在哪條線上得到錯誤。 – FDavidov

+0

@FDavidov請參閱最新的問題。 –

回答

1

你需要通過在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被聲明爲ObjectVariant)將同時在創造第二冊一個新的模塊,並建立對它的引用成功。此引用可用於傳輸代碼,但不能同時傳輸(AFAIK)所有內容。爲此,您可能需要以編程方式導出/導入,如Chip Pearson的article on scripting the VBE中所述。你可以通過那篇文章,在需要的時候使用後期綁定。

+0

我無法做到這一點,因爲我使用的工程計算機鎖定訪問引用。有其他方法嗎? –

+0

@ Bing.Wong查看編輯是否有幫助。它至少應該讓你離開地面。 –

+0

感謝您的建議,但是我得到一個錯誤,說vba項目的編程訪問不受信任。 –

相關問題