我正在尝试使用以下代码将vba模块从一个工作簿复制到另一个工作簿。
Dim comp As VBComponent
Set comp = ThisWorkbook.VBProject.VBComponents("File")
Workbooks("book2.xlsm").VBProject.VBComponents.Add comp
由于某种原因,这给了我一个错误的用户定义类型,未在以下行中定义:
Dim comp As VBComponent
请有人告诉我我哪里出错了吗?
由于
答案 0 :(得分:1)
您需要通过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的article on scripting the VBE中所述。您可以在需要时使用后期绑定来处理该文章。