细品RibbonX(52):如何共享Ribbon定制之在正在使用的多个Office版本中部署Excel解决方案
2018-03-02 11:54
656 查看
细品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 SubWorkbook_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 SubCase语句评估单击的控件,并从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文件。这样,避免用户不小心选择了错误的加载项。
相关文章推荐
- 细品RibbonX(50):如何共享Ribbon定制之Excel部署技术
- 如何安装 Microsoft Office 兼容包,以便能够使用早期版本的 Excel、PowerPoint 和 Word 来打开和保存来自 2007 Office 程序的文件
- 细品RibbonX(51):如何共享Ribbon定制之跨文件共享Ribbon项目
- c# office不同版本下中使用Excel
- 如何批量部署Office 2013 (七)——使用组策略管理Office
- 如何:使用 SharePoint Foundation 解决方案部署 UDF
- Office EXCEL VBA数组如何使用
- WebSphere Portal 6.x 主题和皮肤定制:实战(一)如何创建、部署、使用自定义主题
- 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格?
- 详解如何使用Docker快速部署ELK环境(最新5.5.1版本)
- 如何使用Powershell验证是否支持Exchange与Office 365混合部署
- 以实例说明如何使用C#从数据库中提取数据,按要求自动生成定制的Excel表格?[转]
- 如何使用phpstudy定制php版本
- 如何得知自己正在使用的linux是什么版本
- 如何使用 Excel 服务的Excel表内容作为Microsoft Office PerformancePoint 2007的数据源
- SharePoint 2010 UI 定制化系列之定制Ribbon UI操作: 如何使用SharePoint Designer 2010定制Ribbon UI操作
- 如何得知自己正在使用的linux是什么版本呢,下面的几种方法将给你带来答案!
- 使用Excel.dll部署时,System.UnauthorizedAccessException 的解决方案
- 如何在早期版本的 Office 中打开并保存 Word 2007、Excel 2007 和 PowerPoint 2007 文件
- 如何得知自己正在使用的linux是什么版本