VBA将模块从一个工作簿复制到另一个工作簿?
我想从一个工作簿复制一个VBA模块到另一个使用下面的代码。VBA将模块从一个工作簿复制到另一个工作簿?
Dim comp As VBComponent
Set comp = ThisWorkbook.VBProject.VBComponents("File")
Workbooks("book2.xlsm").VBProject.VBComponents.Add comp
出于某种原因,这给了我在下一行没有定义一个错误的用户定义类型:
Dim comp As VBComponent
请能有人告诉我在哪里,我错了?
感谢
你需要通过在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中所述。你可以通过那篇文章,在需要的时候使用后期绑定。
我无法做到这一点,因为我使用的工程计算机锁定访问引用。有其他方法吗? –
@ Bing.Wong查看编辑是否有帮助。它至少应该让你离开地面。 –
感谢您的建议,但是我得到一个错误,说vba项目的编程访问不受信任。 –
首先,你为什么需要_programmatically_复制模块?其次,使用调试器来查找我们在哪条线上得到错误。 – FDavidov
@FDavidov请参阅最新的问题。 –