前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自定义功能区示例:创建用于工作表导航的动态组合框

自定义功能区示例:创建用于工作表导航的动态组合框

作者头像
fanjy
发布2023-11-02 14:05:14
2650
发布2023-11-02 14:05:14
举报
文章被收录于专栏:完美Excel完美Excel

标签:VBA,自定义功能区

在《自定义功能区示例:创建用于工作表导航的下拉列表》中,我们在Excel功能区中添加一个自定义的选项卡,然后再该选项卡中添加带有下拉列表的一个自定义组,用于从下拉列表中选择工作表,从而快速导航到该工作表,这对于工作簿中有大量工作表且要快速找到相应的工作表的用户来说,非常有用。

我们对此示例进行修改,使用组合框来实现,如下图1所示,并且当用户在该工作簿中新建或删除工作表时,组合框中的列表项会自动更新。

图1

假设该工作簿名称为CustomDynamicCombobox.xlsm,使用Custom UI Editor for Microsoft Office打开该工作簿,在其中输入代码:

代码语言:javascript
复制
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="RibbonOnLoad">
 <ribbon >
  <tabs >
    <tab
       id="Tab1"
       insertBeforeMso="TabHome"
       label="My Menu">
       <group
         id="grpDropDowns"
         label="Worksheet Navigation">
         <comboBox
           id="Combobox1"
           label="goto: "
           getItemCount="Combobox1_getItemCount"
           getItemID="Combobox1_getItemID"
           getItemLabel="Combobox1_getItemLabel"
           onChange="Combobox1_onChange"/>
       </group >
     </tab >
   </tabs >
 </ribbon >
</customUI >

验证无误后,保存并关闭Custom UI Editor for Microsoft Office。

在Excel中打开CustomDynamicCombobox.xlsm,打开VBE,插入一个标准模块,输入下面的代码:

代码语言:javascript
复制
Dim Rib As IRibbonUI
Dim mwkbNavigation As Workbook

Sub RibbonOnLoad(ribbon As IRibbonUI)
 Set Rib = ribbon
End Sub
Public Sub Combobox1_getItemCount(control As IRibbonControl, ByRef returnedVal)
 Dim lCount As Long
 Dim wksSheet As Worksheet
 Set mwkbNavigation = ThisWorkbook
 For Each wksSheet In mwkbNavigation.Worksheets
   If wksSheet.Visible = xlSheetVisible Then
     lCount = lCount + 1
   End If
 Next wksSheet
 returnedVal = lCount
End Sub
Public Sub Combobox1_getItemLabel(control As IRibbonControl, index As Integer, ByRef returnedVal)
 If mwkbNavigation.Worksheets(index + 1).Visible = xlSheetVisible Then
   returnedVal = mwkbNavigation.Worksheets(index + 1).Name
 End If
End Sub
Public Sub Combobox1_onChange(control As IRibbonControl, Text As String)
 Worksheets(Text).Activate
 RefreshAddInsRibbon
End Sub
Public Sub RefreshAddInsRibbon()
 If Rib Is Nothing Then Exit Sub
 Rib.InvalidateControl ("Combobox1")
 DoEvents
End Sub
Public Sub Combobox1_getItemID(control As IRibbonControl, index As Integer, ByRef id)
'
' Code for getItemID callback. Ribbon control comboBox
'
End Sub

然后,打开ThisWorkbook代码模块,输入下面的代码:

代码语言:javascript
复制
Private Sub Workbook_NewSheet(ByVal Sh As Object)
 RefreshAddInsRibbon
End Sub
Private Sub Workbook_SheetBeforeDelete(ByVal Sh As Object)
 RefreshAddInsRibbon
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
 RefreshAddInsRibbon
End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)
 RefreshAddInsRibbon
End Sub

保存并关闭该工作簿,然后重新打开该工作簿,即可以看到更新后的自定义功能区界面。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2023-11-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档