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