打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
细品RibbonX(52):如何共享Ribbon定制之在正在使用的多个Office版本中部署Excel解决方案
除非每个人都在使用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代码来创建功能区定制:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"><ribbon startFromScratch="false"><tabs><tab idMso="TabDeveloper"><group id="rxgrpForums"					label="Forums"><button id="rxbtnRibbonX"						label="Patrick Schmid's RibbonX Forum"						onAction="rxsharedLinks_click"				            imageMso="HyperlinkInsert"						tag="RibbonX"/><button id="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.TagEnd Sub

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

Private Sub Workbook_Open()Dim wbAddin As AddInDim bInstalled As BooleanDim s2007Filename As String s2007Filename = Application.WorksheetFunction.Substitute(ThisWorkbook.Name, "2003", "2007") & "m" If Val(Application.Version) < 12 ThenCall CreateMenuElse'检查是否安装了加载项        For Each wbAddin In Application.AddInsIf wbAddin.Name = s2007Filename Then'加载项已安装,打开它                Workbooks.Open ThisWorkbook.Path & Application.PathSeparator & s2007FilenamebInstalled = TrueExit ForEnd IfNext wbAddin '如果需要安装加载项        If Not bInstalled Then Application.AddIns.Add _ThisWorkbook.Path & Application.PathSeparator & s2007FilenameEnd IfEnd 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 ThenWorkbooks(Application.WorksheetFunction.Substitute(ThisWorkbook.Name, "2003", "2007") & "m").CloseElseCall DeleteMenuEnd IfEnd 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_VBAXCase Is = "RIBBONX"Call Launch_RibbonXEnd SelectEnd 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 NextSet wbTest = Workbooks(sReqdAddin)If Err.Number = 0 Then'加载项打开        On Error GoTo 0Exit SubEnd If '加载项必须被打开    On Error GoTo 0MsgBox "You must load " & sReqdAddin & " to use " & ThisWorkbook.NameThisWorkbook.Close savechanges:=FalseEnd Sub

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


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

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

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
COM加载项编写过程(Excel、以工具栏响应)
VBA实战技巧32:安装Excel加载宏
office文件点击保存就闪退
自学资料(Excel VBA)[收集整理10]
寻找Excel2007中消失的简繁转换功能--太平洋电脑网Pconline-[Excel]
Office 64位和32位的区别在哪?Office 32位和64位哪个好
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服