我尝试使用以下代码将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 VBComponent
Dim comp As Object
,然后
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
)将在Book2中创建新模块并建立对其的引用。该引用可用于传输代码,但不能一次传输(AFAIK)。为此,您可能需要通过编程导出/导入,如Chip Pearson关于脚本录制VBE的文章所述。您可以在需要时使用较晚的绑定来完成该文章。