ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E文精选 > 综合应用 > 细品RibbonX(52):在正在使用的多个Office版本中部署Excel解决方案

细品RibbonX(52):在正在使用的多个Office版本中部署Excel解决方案

作者:绿色风 分类: 时间:2022-08-17 浏览:167
楼主
apolloh
除非每个人都在使用Office 2007,因而知道在仍使用老的Office版本中如何部署加载项文件是非常有帮助的。
旧的命令栏定制仍然工作吗?
考虑安装Office 2007的Office开发者面临的最大的问题之一是“我的定制在全新的功能区中仍然工作吗?”回答是肯定的。定制仍然工作,只是已经在不显眼的地方。即这些定制将会自动出现在Office 2007应用程序的“加载项”选项卡中。
下面,介绍几种在不同环境中部署Excel解决方案的方法。
方法1:创建单独的版本
在带有多个Office版本的环境中部署解决方案的第一种方法是最明显的:为应用程序的每种文件格式创建一个版本。
方法2:从新的加载项中调用以前的版本
在带有多个Office版本的环境中工作的另一种方法是:创建传统的加载宏或全局模板来包含2007文件的RibbonX界面。在2007文件中使用Application.Run方法,可以调用存储在传统文件中的过程。采用这种方法,传统的文件实际上包含了所有的功能代码,而2007文件只是担当启动器。

迁移2003文件处理2003环境以及担当2007文件的后台的过程最好按照下列三个步骤:
  • 创建基本的2007功能区定制加载项。
  • 对2003加载宏做必需的修改。
  • 链接到2007文件确保2003文件首先被打开。事件的顺序是重要的,以便不会在继续时引起崩溃。最后一点是,确保用户在没有2003版时决不要装载该文件的2007版,2003版包含着2007版运行需要的所有宏代码。
    首先,创建基本的2007加载项部分。打开Excel,创建新工作簿,将在默认的AddIns文件夹中以ForumLauncher_2007.xlam来保存。关闭Excel,在CustomUI Editor中打开该文件,输入下面的XML代码来创建功能区定制:


    1. <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
    2.         <ribbon startFromScratch="false">
    3.                 <tabs>
    4.                         <tab idMso="TabDeveloper">
    5.                                 <group id="rxgrpForums"
    6.                                         label="Forums">
    7.                                         <button id="rxbtnRibbonX"
    8.                                                 label="Patrick Schmid's RibbonX Forum"
    9.                                                 onAction="rxsharedLinks_click"
    10.                                             imageMso="HyperlinkInsert"
    11.                                                 tag="RibbonX"/>
    12.                                         <button id="rxbtnVBAX"
    13.                                                 label="VBA Express"
    14.                                                 onAction="rxsharedLinks_click"
    15.                                             imageMso="HyperlinkInsert"
    16.                                                 tag="VBAX"/>
    17.                                 </group>
    18.                         </tab>
    19.                 </tabs>
    20.         </ribbon>
    21. </customUI>
    上述代码在“加载项”选项卡的末尾的自定义组中添加了两个按钮。注意,按钮使用了共享的回调rxsharedLinks_click,使用了tag属性。
    验证代码并保存,复制回调签名,关闭CustomUI Editor。打开Excel并安装该加载项。转到VBE,导航到ForumLauncher工程,插入一个新模块,粘贴回调签名,并作如下修改:


    1. Sub rxsharedLinks_click(control As IRibbonControl)
    2.     Application.Run "LaunchFrom2007", control.Tag
    3. End Sub
    这个过程使用Application.Run方法从另一个打开的文件中启动宏,指定了要启动的宏的名字LaunchFrom2007,还有一个参数:控件的标签。
    保存后卸载该加载项。
    下一步,对2003加载宏作必需的修改,即ForumLauncher_v2003.xla。
    首先,修改开始代码确保菜单不会被创建在“加载项”选项卡中,然而在Excel 2003中仍然是菜单。使用下列步骤测试版本并装载正确的菜单。打开VBE,导航到ForumLauncher_v2003.xla工程,展开ThisWorkbook模块,修改Workbook_Open过程如下:


    1. Private Sub Workbook_Open()
    2.     Dim wbAddin As AddIn
    3.     Dim bInstalled As Boolean
    4.     Dim s2007Filename As String

    5.     s2007Filename = Application.WorksheetFunction.Substitute(ThisWorkbook.Name, "2003", "2007") & "m"

    6.     If Val(Application.Version) < 12 Then
    7.         Call CreateMenu
    8.     Else
    9.         '检查是否安装了加载项
    10.         For Each wbAddin In Application.AddIns
    11.             If wbAddin.Name = s2007Filename Then
    12.                 '加载项已安装,打开它
    13.                 Workbooks.Open ThisWorkbook.Path & Application.PathSeparator & s2007Filename
    14.                 bInstalled = True
    15.                 Exit For
    16.             End If
    17.         Next wbAddin

    18.         '如果需要安装加载项
    19.         If Not bInstalled Then Application.AddIns.Add _
    20.            ThisWorkbook.Path & Application.PathSeparator & s2007Filename
    21.     End If
    22. End Sub
    Workbook_Open事件现在完成如下操作:
  • 通过将2003加载项文件名中的2003替换为2007,然后添加m到结果字符串中,从而捕获2007加载项的名字并赋值给变量。
  • 检查应用程序的版本,如果版本小于12,则创建菜单。
  • 如果版本不小于12,检查2007加载项是否已经安装。
  • 如果2007版加载项已安装,则装载文件并记录2007版本已安装。
  • 评估bInstalled属性。如果为假,那么安装加载项。因为我们已经在2003文件被启动时安装并打开了2007文件,所以结束时明确地卸载2007文件。为此,需要修改Workbook_BeforeClose过程来检查版本并且卸载2007加载项:


    1. Private Sub Workbook_BeforeClose(Cancel As Boolean)
    2.     If Val(Application.Version) > 11 Then
    3.         Workbooks(Application.WorksheetFunction.Substitute(ThisWorkbook.Name, "2003", "2007") & "m").Close
    4.     Else
    5.         Call DeleteMenu
    6.     End If
    7. End Sub
    同理,如果文件版本小于12,那么已经装载了2003菜单修改,因此需要触发DeleteMenu过程。如果应用程序的版本不小于12,那么需要代码关闭2007加载项文件。
    最后,对2003加载项需要提供输入点以便2007版本的文件能够调用过程。当在Excel 2003或更早的版本中单击菜单按钮时触发下列两个过程:


    1. Private Sub Launch_VBAX()
    2.     '启动VBAX网站
    3.     ActiveWorkbook.FollowHyperlink (sVBAXURL)
    4. End Sub

    5. Private Sub Launch_RibbonX()
    6.     '启动RibbonX社区
    7.     ActiveWorkbook.FollowHyperlink (sRibbonXURL)
    8. End Sub
    接着,在标准模块中添加下面的过程:


    1. Public Sub LaunchFrom2007(sSiteToLaunch)
    2.     '从2007加载项中担当装载器
    3.     Select Case UCase(sSiteToLaunch)
    4.         Case Is = "VBAX"
    5.             Call Launch_VBAX
    6.         Case Is = "RIBBONX"
    7.             Call Launch_RibbonX
    8.     End Select
    9. End Sub
    Case语句评估单击的控件,并从2003文件中启动合适的宏。
    现在,我们已经完成了需要的转换,保存2003 xla加载宏并卸载。回到2007加载项,强迫用户首先打开2003版。
    再次安装2007版的加载项。打开VBE,导航到ForumLauncher_v2007.xlam工程,在ThisWorkbook模块中插入下列代码:


    1. Private Const sReqdAddin = "Forum_Launcher_v2003.xla"

    2. Private Sub Workbook_Open()
    3.     Dim wbTest As Workbook

    4.     On Error Resume Next
    5.     Set wbTest = Workbooks(sReqdAddin)
    6.     If Err.Number = 0 Then
    7.         '加载项打开
    8.         On Error GoTo 0
    9.         Exit Sub
    10.     End If

    11.     '加载项必须被打开
    12.     On Error GoTo 0
    13.     MsgBox "You must load " & sReqdAddin & " to use " & ThisWorkbook.Name
    14.     ThisWorkbook.Close savechanges:=False
    15. End Sub
    好了!转换完成。保存文件并再次卸载该加载项。
    现在来测试。打开加载项管理器,安装2003版本的加载项,可以在开发工具选项卡的右侧看到完整的功能组,如下图所示。

     
    返回到加载项管理器,卸载2003版,安装2007版,单击“确定”返回用户界面,此时会显示如下图所示的错误消息。

     
    转到VBE,你将看到2003版和2007版的加载项文件都没有被装载。此时,装载2007 xlam加载项的唯一方法是首先装载2003的xla文件。这样,避免用户不小心选择了错误的加载项。
  • 2楼
    い卋玑┾宝珼
    站长好棒

    免责声明

    有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
    ------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

    评论列表
    sitemap