使用功能区上的自定义按钮打包Outlook VBA宏

时间:2018-06-19 09:31:40

标签: vba outlook office365 outlook-addin outlook-vba

我在Outlook上有一个VBA宏,允许我将电子邮件作为附件转发到不同的电子邮件地址。我已经自定义了我的Outlook功能区并创建了一个链接到此宏的按钮。我如何打包这个项目(宏和功能区按钮),以便我可以将其提供给其他用户在他们的机器上安装?

谢谢,

3 个答案:

答案 0 :(得分:2)

我认为您可以通过编程实现。我有一个共享Excel宏/功能区的过程,您可以尝试为Outlook对其进行修改。我很好奇它是否能正常工作,因为我最终还是想分享我的Outlook宏。用户要做的就是运行一个批处理文件。有几个组件:

  1. 在共享目录中创建一个文件夹,您可以在其中存储个人宏和功能区。

  2. 从本地文件夹复制宏。对于Excel,我从C:\ Users \ username \ AppData \ Roaming \ Microsoft \ Excel \ XLSTART中复制了存储宏的个人excel文件。对于Outlook,我假设您将在C:\ Users \ username \ AppData \ Roaming \ Microsoft \ Outlook中使用VbaProject.OPM文件。

  3. 从本地文件夹中复制UI文件(功能区):C:\ Users \ username \ AppData \ Local \ Microsoft \ Office。 Excel功能区称为Excel.officeUI,我假设Outlook功能区是名为olkexplorer.officeUI的文件。

  4. 创建您的批处理文件,该文件将宏和UI复制到共享目录之外,然后复制到用户的本地驱动器上。然后,它将调用一个VBS文件,该文件将对UI文件进行一些修改,用您的用户名替换您的用户名。我是批处理文件的新手,不确定如何在代码中插入注释,但是您应该修改第一个路径(使用上面存储Outlook OPM文件的路径)以及宏文件的名称和UI文件(VbaProject.OPM和olkexplorer.officeUI)。

     Echo off
     cls
     Echo Please ensure that Excel(Outlook) is closed before continuing.
     pause     
     cls
    
     cd YourSharedDirectory
     copy PERSONAL.XLSB c:\users\%USERNAME%\AppData\Roaming\Microsoft\Excel\XLSTART\*.* /y
     cls
    
     cd YourSharedDirectory
     copy Excel.officeUI C:\Users\%USERNAME%\AppData\Local\Microsoft\Office\*.* /y
     cls
    
     @echo off
     wscript "findReplaceUserNameinUI.vbs"
    
  5. 创建一个VBS文件(在批处理文件的末尾运行),以在UI文件中找到您的用户名,并将其替换为下载宏的人员的用户名,因为该文件无法正常运行否则他们的计算机。

    Const ForReading = 1
    Const ForWriting = 2
    
    'get username
    username= CreateObject("WScript.Network").UserName
    
    'change this to the local location for outlook UI
    uiPath = "C:\Users\" & username & "\AppData\Local\Microsoft\Office\Excel.officeUI"
    
    'open the UI file in notepad, find & replace with new username
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    Set objFile = objFSO.OpenTextFile(uiPath, ForReading)
    strText = objFile.ReadAll
    objFile.Close
    strNewText = Replace(strText, "your user name", username)
    Set objFile = objFSO.OpenTextFile(uiPath, ForWriting)
    objFile.WriteLine strNewText 
    objFile.close
    
    msgbox "Completed!"
    

答案 1 :(得分:0)

Outlook宏不能像Excel那样进行分发。您应该使用Office工具在.NET Framework中构建一个加载项。

以下是介绍:https://docs.microsoft.com/en-us/outlook/add-ins/quick-start?tabs=visual-studio

如果您仍要导出宏,则有一些解决方法:

解决方案1 ​​

您可以将模块导出为.bas,.cls,frx和.frm文件。其他用户将不得不通过导入来撤消该过程。

使用这种方法,任何用户都不会丢失任何代码。

但是

在导入ThisOutlookSession模块时,它将被重命名为ThisOutlookSession1。您必须从此处复制代码并将其粘贴到ThisOutlookSession中,否则它将无法运行。

解决方案2

如果用户的Outlook中没有任何宏项目,则可以复制(假定Outlook中只有此宏)在%AppData%\ Microsoft \ Outlook中可以找到的VBAProject.OTM,然后覆盖用户的一个。

最后一种方法是我必须共享宏时使用的方法。但是,如果我知道它将是一个******,那么我将立即使用VB.NET。还有其他解决方案,但我从未尝试过。

答案 2 :(得分:0)

VBA宏不适用于在其他/多台计算机上分发解决方案。此外,VBA宏不允许以编程方式自定义Fluent UI(即功能区UI)。由于这些原因,您需要开发基于COM的加载项。那是因为它们是发明的!请参阅Walkthrough: Create your first VSTO Add-in for Outlook以快速入门。

您可以在以下系列文章中阅读有关Fluent UI(又称为Ribbon UI)的更多信息:

VSTO提供了两种创建自定义功能区UI的主要方法:

如果仍然要共享VBA宏,请参见To distribute Microsoft Outlook VBA code to other users,以获取可能的解决方案。

相关问题