细品RibbonX(52):如何共享Ribbon定制之在正在使用的多个Office版本中部署Excel解决方案

细品RibbonX(52):如何共享Ribbon定制之在正在使用的多个Office版本中部署Excel解决方案

资料整理来自于论坛
完整版下载地址:http://download.csdn.net/download/nodeman/10264659

 

 Loading ...

 

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

  • 创建基本的2007功能区定制加载项。
  • 对2003加载宏做必需的修改。
  • 链接到2007文件确保2003文件首先被打开。

事件的顺序是重要的,以便不会在继续时引起崩溃。最后一点是,确保用户在没有2003版时决不要装载该文件的2007版,2003版包含着2007版运行需要的所有宏代码。
首先,创建基本的2007加载项部分。打开Excel,创建新工作簿,将在默认的AddIns文件夹中以ForumLauncher_2007.xlam来保存。关闭Excel,在CustomUI Editor中打开该文件,输入下面的XML代码来创建功能区定制:

<customUIxmlns="http://schemas.microsoft.com/office/2006/01/customui">
      <ribbonstartFromScratch="false">
            <tabs>
                  <tabidMso="TabDeveloper">
                        <groupid="rxgrpForums"
                               label="Forums">
                               <buttonid="rxbtnRibbonX"
                                     label="Patrick Schmid's RibbonX Forum"
                                     onAction="rxsharedLinks_click"
                                    imageMso="HyperlinkInsert"
                                     tag="RibbonX"/>
                               <buttonid="rxbtnVBAX"
                                     label="VBA Express"
                                     onAction="rxsharedLinks_click"
                                    imageMso="HyperlinkInsert"
                                     tag="VBAX"/>
                        </group>
                  </tab>
            </tabs>
      </ribbon>
</customUI>

上述代码在“加载项”选项卡的末尾的自定义组中添加了两个按钮。注意,按钮使用了共享的回调rxsharedLinks_click,使用了tag属性。
验证代码并保存,复制回调签名,关闭CustomUI Editor。打开Excel并安装该加载项。转到VBE,导航到ForumLauncher工程,插入一个新模块,粘贴回调签名,并作如下修改:

Sub rxsharedLinks_click(control As IRibbonControl)
    Application.Run "LaunchFrom2007", control.Tag
End Sub

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

Private Sub Workbook_Open()
    Dim wbAddin As AddIn
    Dim bInstalled As Boolean
    Dim s2007Filename As String
 
    s2007Filename = Application.WorksheetFunction.Substitute(ThisWorkbook.Name, "2003", "2007") & "m"
 
    If Val(Application.Version) < 12 Then
        Call CreateMenu
    Else
        '检查是否安装了加载项
        For Each wbAddin In Application.AddIns
            If wbAddin.Name = s2007Filename Then
                '加载项已安装,打开它
                Workbooks.Open ThisWorkbook.Path & Application.PathSeparator & s2007Filename
                bInstalled = True
                Exit For
            End If
        Next wbAddin
 
        '如果需要安装加载项
        If Not bInstalled Then Application.AddIns.Add _
           ThisWorkbook.Path & Application.PathSeparator & s2007Filename
    End If
End Sub

Workbook_Open事件现在完成如下操作:

  • 通过将2003加载项文件名中的2003替换为2007,然后添加m到结果字符串中,从而捕获2007加载项的名字并赋值给变量。
  • 检查应用程序的版本,如果版本小于12,则创建菜单。
  • 如果版本不小于12,检查2007加载项是否已经安装。
  • 如果2007版加载项已安装,则装载文件并记录2007版本已安装。
  • 评估bInstalled属性。如果为假,那么安装加载项。

因为我们已经在2003文件被启动时安装并打开了2007文件,所以结束时明确地卸载2007文件。为此,需要修改Workbook_BeforeClose过程来检查版本并且卸载2007加载项:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Val(Application.Version) > 11 Then
        Workbooks(Application.WorksheetFunction.Substitute(ThisWorkbook.Name, "2003", "2007") & "m").Close
    Else
        Call DeleteMenu
    End If
End Sub

同理,如果文件版本小于12,那么已经装载了2003菜单修改,因此需要触发DeleteMenu过程。如果应用程序的版本不小于12,那么需要代码关闭2007加载项文件。
最后,对2003加载项需要提供输入点以便2007版本的文件能够调用过程。当在Excel 2003或更早的版本中单击菜单按钮时触发下列两个过程:

Private Sub Launch_VBAX()
    '启动VBAX网站
    ActiveWorkbook.FollowHyperlink (sVBAXURL)
End Sub
 
Private Sub Launch_RibbonX()
    '启动RibbonX论坛
    ActiveWorkbook.FollowHyperlink (sRibbonXURL)
End Sub

接着,在标准模块中添加下面的过程:

Public Sub LaunchFrom2007(sSiteToLaunch)
    '2007加载项中担当装载器
    Select Case UCase(sSiteToLaunch)
        Case Is = "VBAX"
            Call Launch_VBAX
        Case Is = "RIBBONX"
            Call Launch_RibbonX
    End Select
End Sub

Case语句评估单击的控件,并从2003文件中启动合适的宏。
现在,我们已经完成了需要的转换,保存2003 xla加载宏并卸载。回到2007加载项,强迫用户首先打开2003版。
再次安装2007版的加载项。打开VBE,导航到ForumLauncher_v2007.xlam工程,在ThisWorkbook模块中插入下列代码:

Private Const sReqdAddin = "Forum_Launcher_v2003.xla"
 
Private Sub Workbook_Open()
    Dim wbTest As Workbook
 
    On Error Resume Next
    Set wbTest = Workbooks(sReqdAddin)
    If Err.Number = 0 Then
        '加载项打开
        On Error GoTo 0
        Exit Sub
    End If
 
    '加载项必须被打开
    On Error GoTo 0
    MsgBox "You must load " & sReqdAddin & " to use " & ThisWorkbook.Name
    ThisWorkbook.Close savechanges:=False
End Sub

好了!转换完成。保存文件并再次卸载该加载项。
现在来测试。打开加载项管理器,安装2003版本的加载项,可以在开发工具选项卡的右侧看到完整的功能组,如下图所示。

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

转到VBE,你将看到2003版和2007版的加载项文件都没有被装载。此时,装载2007 xlam加载项的唯一方法是首先装载2003的xla文件。这样,避免用户不小心选择了错误的加载项。

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值