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

时间:2016-12-03 12:27:10

标签: excel vba

我正在尝试使用以下代码将vba模块从一个工作簿复制到另一个工作簿。

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

由于某种原因,这给了我一个错误的用户定义类型,未在以下行中定义:

Dim comp As VBComponent

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

由于

1 个答案:

答案 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被声明为ObjectVariant)将成功创建book2中的新模块并建立对它的引用。此引用可用于传输代码,但不能一次传输(AFAIK)所有内容。为此,您可能需要以编程方式导出/导入,如Chip Pearson的article on scripting the VBE中所述。您可以在需要时使用后期绑定来处理该文章。