我在Outlook上有一个VBA宏,允许我将电子邮件作为附件转发到不同的电子邮件地址。我已经自定义了我的Outlook功能区并创建了一个链接到此宏的按钮。我如何打包这个项目(宏和功能区按钮),以便我可以将其提供给其他用户在他们的机器上安装?
谢谢,
答案 0 :(得分:2)
我认为您可以通过编程实现。我有一个共享Excel宏/功能区的过程,您可以尝试为Outlook对其进行修改。我很好奇它是否能正常工作,因为我最终还是想分享我的Outlook宏。用户要做的就是运行一个批处理文件。有几个组件:
在共享目录中创建一个文件夹,您可以在其中存储个人宏和功能区。
从本地文件夹复制宏。对于Excel,我从C:\ Users \ username \ AppData \ Roaming \ Microsoft \ Excel \ XLSTART中复制了存储宏的个人excel文件。对于Outlook,我假设您将在C:\ Users \ username \ AppData \ Roaming \ Microsoft \ Outlook中使用VbaProject.OPM文件。
从本地文件夹中复制UI文件(功能区):C:\ Users \ username \ AppData \ Local \ Microsoft \ Office。 Excel功能区称为Excel.officeUI,我假设Outlook功能区是名为olkexplorer.officeUI的文件。
创建您的批处理文件,该文件将宏和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"
创建一个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
如果您仍要导出宏,则有一些解决方法:
您可以将模块导出为.bas,.cls,frx和.frm文件。其他用户将不得不通过导入来撤消该过程。
使用这种方法,任何用户都不会丢失任何代码。
但是
在导入ThisOutlookSession模块时,它将被重命名为ThisOutlookSession1。您必须从此处复制代码并将其粘贴到ThisOutlookSession中,否则它将无法运行。
如果用户的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,以获取可能的解决方案。