VBA将模块从一个工作簿复制到另一个工作簿?

VBA将模块从一个工作簿复制到另一个工作簿?

问题描述:

我想从一个工作簿复制一个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请参阅最新的问题。 –

你需要通过在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项目的编程访问不受信任。 –