如何将VBScript宏导入Excel工作簿?

3
我有几个Excel工作簿,它们都共享相同的宏模块。我想要实现的是,在编辑一个工作簿中的一个模块时,不必在其他工作簿中编辑相同的模块。
自然而然,我的第一步是在保存时将模块导出为.bas文件。但问题是我无法在加载时导入它们。
我尝试过这个方法:
Private Sub Workbook_Open()
    Set objwb = ThisWorkbook
    Set oVBC = objwb.VBProject.VBComponents
    Set CM = oVBC.Import("C:\Temp\TestModule.bas")
    TestFunc
End Sub

在同一目录下有一个名为TestModule.bas的文件,内容如下:

Function TestFunc()
    MsgBox "TestFunc called"
End Function

打开工作簿时,会出现编译错误:未定义子程序或函数。如果我手动导入模块,则一切正常。
谢谢您的任何建议。

你考虑过将你的代码拆分成插件吗? - Tim Williams
不,我认为导入模块会更容易些。 - Martin Dimitrov
VBScript还是VBA?或者两者混合使用?它们并不相同... - Jean-François Corbett
抱歉我的无知,但我不确定。 我正在Excel中制作宏。 是VBScript还是VBA? - Martin Dimitrov
1个回答

1

和你一样,我也无法从workbook_open中导入代码。你可以将导入代码放在一个单独的模块中,并像这样从workbook_open中调用它:

Private Sub Workbook_Open()
    Application.OnTime Now, "ImportCode"
End Sub

这对我似乎有效(直接调用没有...)


谢谢你的回答,但在我的情况下似乎不起作用。你的代码有什么不同吗?我想知道如何检查oVBC.Import的返回值... - Martin Dimitrov
我甚至尝试在工作簿加载后15秒调用导入函数,如Application.OnTime Now + TimeValue("00:00:15"), "ThisWorkbook.ImportCode"。它被调用了,但是导入仍然无法正常工作。无论如何,再次感谢并点赞您的建议。 - Martin Dimitrov
将您的ImportCode放在一个常规模块中。此外,请参见此处的讨论:https://dev59.com/KHRB5IYBdhLWcg3wJkhC - Tim Williams
是的,我做了。另一件事是,“如果CM为Nothing,则会触发'type mismatch'错误。不过还是谢谢你的努力。 - Martin Dimitrov
我最终采用了你指向的资源中的方法,再次感谢。 - Martin Dimitrov
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接