分享

VAB中的XML

 十月波波 2023-10-19 发布于辽宁

XML语言编写的工具使用的是Custom UI Editor For Microsoft Office

先来介绍一下Custom UI Editor的使用

  1. 点击左上角的打开按钮,选择需要编辑功能区的Excel文件。

  2. 点击“插入”按钮,插入 Office 2010 Custom UI Part,产生xml文件,这就可以在右侧编写代码。

    注意:

    ① Office 2010 Custom UI Part适用2010-2016版本的Excel,只是按钮描述没有更新。

② 打开Excel文件时注意要关闭源文件,以免出错。

编写完代码点击Validate按钮,验证代码语法有无出错

最后一个按钮是回调事件,在插入自定义控件,需要使用回调事件响应编写的宏,点击后会自动生成一个有开始语句、结束语句、参数的基本结构,就和插入工作簿事件一样。我们就在里面编写代码。



下面用一些实例讲解怎么写XML文件。

一、添加标签

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> '根语句,固定的
 <ribbon>  '功能区块
   <tabs>  '标签集合
  <tab id="tab1" label="My Tab1" insertBeforeMso="TabInsert"> '添加一个标签,在插入选项卡之前
  </tab> '第一个标签结束
  <tab id="tab2" label="My Tab2">
  </tab> '第二个标签结束
   </tabs>
 </ribbon>
</customUI>  '结束语句

①代码基本结构,第一句和最后一句是根语句,固定的。

②<ribbon>和</ribbon>是功能区块,代码都要写一对。

③<tabs>和</tabs>是标签集合

④插入了两个标签,所以有两个</tab>的结束语句。

⑤注意大小写!

⑥tab语句中id指标签的名称(唯一的),label设置标签显示出来的名称,insertBeforeMso后接插入位置。

二、添加分组

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> '根语句
 <ribbon>  '功能区
   <tabs>  '标签集合
  <tab id="tab1" label="My Tab1">  '添加标签
 <group id="g1" label="My group1"> '添加第一个组别
 </group>  '第一个组别的结束语句
 <group id="g2" label="My group2"> '添加第二个组别
 </group>  '第二个组别的结束语句
  </tab>   '标签结束语句
   </tabs>    '标签集合结束语句
 </ribbon>    '功能区结束语句
</customUI>   '根语句结束语句

组别group是指在标签下的分组,所以需要写在标签添加语句的下面。记得有始有终,写对应的结束语句。

三、添加按钮

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
 <ribbon>
   <tabs>
  <tab id="tab1" label="My Tab1">
 <group id="g1" label="My group1">
 <button id="b1" label="Copy" onAction="AA" size="large" imageMso="Copy"/> '添加按钮
 <separator id="S1" />   '分割线
 <button id="b2" label="Paste" onAction="AA" imageMso="Paste"/>
 <button id="b3" label="pig" onAction="AA" imageMso="Piggy"/>
 </group>
  </tab>
   </tabs>
 </ribbon>
</customUI>

① onAction 按钮运行的宏

② size 按钮的大小,large是大图标,不设置默认是小尺寸

③ imageMso 显示的图标(Excel内置图标)

④ separator 设置分割线

⑤ 可以看到上面三个按钮运行的都是同一个宏AA,但效果可以设置不一样,在宏里对按钮的id进行判断,来实现不同功能。这里用到了回调程序。

也需要在EXCEL里写对应的宏:

'Callback for b1 onAction
Sub AA(control As IRibbonControl)
  If control.ID = "b1" Then
 MsgBox "B1"
  ElseIf control.ID = "b2" Then
 MsgBox "B2"
  Else
 MsgBox "B3"
  End If
End Sub

四、添加复选框

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
 <ribbon>
   <tabs>
  <tab id="tab1" label="My Tab1">
 <group id="g1" label="My group1">
   '添加复选框
   <checkBox id="c1" label="Show 0" onAction="CC"/> 
   '切换按钮
   <toggleButton imageMso="TranslationToolTip" id="t1" size="large" label="Is Number" onAction="TT"/>
 </group>
  </tab>
   </tabs>
 </ribbon>
</customUI>

调用回调事件,复制回调事件中显示的基本代码结构到Excel VBA编辑器,在基本代码机构中编写宏:

①CC

Sub CC(control As IRibbonControl, pressed As Boolean)
 If pressed = True Then
   MsgBox "显示0值"
 Else
   MsgBox "不显示0值"
 End If
End Sub

②TT

'Callback for t1 onAction
Sub TT(control As IRibbonControl, pressed As Boolean)
   If pressed = True Then
   MsgBox "显示数字"
 Else
   MsgBox "不显示数字"
 End If
End Sub

复选框和切换按钮的可设置的参数和按钮差不多,参数位置可以随意调动,

五、添加组合和下拉框

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
 <ribbon>
   <tabs>
  <tab id="tab1" label="My Tab1">
 <group id="g1" label="My group1">
  <comboBox id="C1" label="Sheet Select1" onChange="FFF">  '添加组合框
   <item id="item1" label="Sheet1" imageMso="_1" /> '添加项目
   <item id="item2" label="Sheet2" imageMso="_2" /> 
   <item id="item3" label="Sheet3" imageMso="_3" /> 
  </comboBox>

  <dropDown id="Dr1"  label="Sheet Select2" onAction="GGG">  '添加下拉框
   <item id="Dept1" label="Sheet1" /> 
   <item id="Dept2" label="Sheet2" /> 
   <item id="Dept3" label="Sheet3" /> 
  </dropDown>
 </group>
  </tab>
   </tabs>
 </ribbon>
</customUI>

回调事件的宏:

① 复选框的回调代码

'Callback for C1 onChange
Sub FFF(control As IRibbonControl, text As String)
  Sheets(text).Select
End Sub

② 下拉框的回调代码

'Callback for Dr1 onAction
Sub GGG(control As IRibbonControl, id As String, index As Integer)
  Sheets(index + 1).Select
End Sub

2. 代码

下拉框的回调代码index,表示下拉框选取的位置。

index的计数是从0开始,想表示第一个工作表就要index + 1。

六、添加内置功能

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
 <ribbon>
   <tabs>
  <tab id="tab1" label="My Tab1"> '添加新的选项卡
 <group id="g1" label="My group1"> '添加新的组别
   <control idMso="NameManager" /> '添加内置功能,名称管理器
 </group>
 <group idMso="GroupSize" /> '添加内置组别,大小
  </tab>
   </tabs>
 </ribbon>
</customUI>

idMso表示内置选项卡、组别或功能的id,是已经存在的,而非新的。

七、指定选项卡添加新组

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
 <ribbon>
   <tabs>
  <tab idMso="TabInsert" label="My Tab1"> '在插入的内置选项卡
 <group id="g1" label="My group1"> '添加组别
   <control idMso="NameManager" /> '添加内置变量,名称管理器
 </group>
  </tab>
   </tabs>
 </ribbon>
</customUI>

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章