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 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关于脚本录制VBE的文章所述。您可以在需要时使用较晚的绑定来完成该文章。

相关内容

最新更新