2011-09-27 57 views
3

我有几个Excel工作簿。它们都共享相同的宏模块。我想要实现的是在一个工作簿中编辑一个模块而不必编辑其他工作簿中的相同模块。如何将VBScript宏导入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 

当打开工作簿,将出现一个编译错误:Sub or Function not defined。如果我手动导入模块,一切正常。

感谢您的任何建议。

+0

有你考虑将你的代码分解成一个插件? –

+0

不,我认为导入模块会容易得多。 –

+0

VBScript或VBA?或者两者兼而有之??他们不一样... –

回答

1

像你一样,我无法从workbook_open中导入工作。你可以把你的导入代码中的一个子一个独立的模块,并从您的workbook_open这样称呼它:

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

这似乎为我工作(直接呼叫没有...)

+0

感谢您的答案,但它似乎并没有在我的情况。你的代码有什么不同?我想知道如何检查'oVBC.Import'的返回值... –

+0

导入应该重新引用导入的模块。你应该可以使用'If CM Is Nothing Then ...'来测试它是否为空。不知道为什么它在失败时不会引发错误。 –

+0

我甚至试图在工作簿加载后的15秒后调用导入函数Application.OnTime Now + TimeValue(“00:00:15”),“ThisWorkbook.ImportCode”'。它被称为,但然后再次导入不起作用。无论如何,再次感谢和+1的建议。 –

相关问题