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

我正试图复制一个VBA模块从一个工作簿到另一个使用下面的代码。

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

出于某种原因,这给了我一个错误的用户定义types没有定义在下面一行:

 Dim comp As VBComponent 

请有人告诉我我要去哪里错了吗?

谢谢

您需要通过VBA编辑器中的工具/参考添加对Microsoft Visual Basic for Applications Extensibility 5.3引用。

或者,您可以使用后期绑定。

更换

 Dim comp As VBComponent 

通过

 Dim comp As Object 

接着

 Set comp = ThisWorkbook.VBProject.VBComponents("File") 

将按预期工作。 有点奇怪,你不需要包含引用来调用.VBProject因为这是一个工作簿对象的标准属性。

不幸,

 Workbooks("book2.xlsm").VBProject.VBComponents.Add comp 

不会像你期望的那样工作。 .Add创build一个空白的组件。 该参数需要是一个常量,它描述了您想要创build的组件的types,对于标准的代码模块,这个参数应该是1 。 (有一些可以用来代替1命名常量,但是我怀疑这些常量在没有引用的情况下将不起作用)。

你可以validation,即使没有参考线:

 Set target = Workbooks("book2.xlsm").VBProject.VBComponents.Add(1) 

(其中target被声明为ObjectVariant )将成功地在book2中创build一个新模块并build立一个对它的引用。 这个引用可以用来传送代码,但不能(AFAIK)一次传送所有的东西。 为此,您可能需要以编程方式导出/导入,如Chip Pearson 关于编写VBE脚本的文章中所述 。 你可以通过那篇文章,在需要时使用迟绑定。