跨MS Office应用程序共享VBA模块

时间:2014-11-19 09:15:39

标签: vba excel-vba ms-office word-vba excel

我在Excel 2010加载项中编写了大量VBA模块。其中一些特定于Excel,但许多更一般。例如,一个人拿一个零件号并重新格式化;另一个包含一个Case Select功能,用于在网络驱动器中查找文件。

我想使用Word和Outlook中的常用功能。我可以从Excel复制并粘贴到Word加载项,但这使我很难保持我的代码更新 - 当我在一个应用程序中进行编辑时,我必须记住复制到所有其他应用程序。

我的问题是,有没有办法在一个地方编写公共代码(例如在Excel加载项或其他一些常用位置),以便所有MS Office应用程序都可以访问它,如果它的话只是另一个模块?

4 个答案:

答案 0 :(得分:2)

以前的方法是使用Visual Basic 6获取代码并将其编译为COM(或ActiveX)DLL。然后,您可以使用VBA编辑器添加该DLL,并使用VBA编辑器"工具...引用"对话框,来自任何支持VBA的Office(或其他)产品,与您使用的方式相同,例如Microsoft Scripting Runtime,它对DictionaryFileSystemObject和{{等内容非常方便。 1}}。

问题是,VB6在1998年的某个时候发布,多年来一直没有得到微软的支持或支持。似乎有不少下载网站提供该软件包 - 我无法就使用它们可能遇到的合法性或安全问题提供任何建议......

可耻地,微软几年前放弃了VBA球 - 似乎他们大多希望它只是走开。

答案 1 :(得分:1)

您需要为此创建一个COM加载项(.dll),这需要Visual Studio或其他一些能够创建COM公开插件的工具。自旧版Office Developer版以来,Office中没有任何此类工具。

答案 2 :(得分:1)

VB6是最好的方法。编译程序仍然支持VB6。 IDE已经过测试,发现MS可以使用Windows 10(仅限32位)但不受支持。

如果要转换为vbscript,可以使用wsc文件而不是dll。

来自脚本组件概述

  

Windows®脚本组件是一项令人兴奋的新技术,它允许您使用易于使用的脚本语言(如Microsoft®VisualBasic®ScriptingEdition(VBScript)和Microsoft®JScript®)创建功能强大,可重用的COM组件。

创建一个,创建一个类型库,在Word和Excel中设置对typelibrary的引用。

答案 3 :(得分:0)

也许可以帮助别人。

我的解决方案已在项目属性中设置了条件编译器参数:

  • 在excel项目中:SOFT_EXCEL = 1 : SOFT_OUTLOOK = 0

  • 在Outlook项目中:SOFT_EXCEL = 0 : SOFT_OUTLOOK = 1

然后,在模块中:

Public Sub as_email()
    #If SOFT_EXCEL Then
        Debug.Print "this executes and compiles in excel"
    #End If
    #If SOFT_OUTLOOK Then
        Debug.Print "this executes and compiles in outlook"
    #End If
End Sub