分享

VBA实用小程序11:通过右键快捷菜单导航工作簿和工作表

 L罗乐 2018-03-29


下面的VBA程序在单元格快捷菜单中添加一个名为“工作簿导航”的命令,通过该命令快速地在当前所有打开的工作簿及其工作表之间导航,如图1所示。

1

 

VBE中添加一个标准模块,输入下面的代码:

Sub CustomMenu()

    On ErrorGoTo ExitSub:

    Dim cmb AsCommandBarControl

    On ErrorResume Next

   Application.CommandBars('Cell').Controls('工作簿导航').Delete

    Set cmb =Application.CommandBars('Cell').Controls.Add _

                   (Type:=msoControlPopup, Temporary:=True)

    cmb.Caption= '工作簿导航'

   cmb.OnAction = 'AddControlsInCustomMenu'

ExitSub:

    Exit Sub

End Sub

 

Sub AddControlsInCustomMenu()

    Dim wb AsWorkbook

    Dim ws AsWorksheet

    Dim cmb AsCommandBarControl

    DimcmbCtl1  As CommandBarControl, cmbCtl2 AsCommandBarControl

   

    For Eachcmb In Application.CommandBars('Cell'). _

                                   Controls('工作簿导航').Controls

        OnError Resume Next

       cmb.Delete

    Next

   

    For Eachwb In Application.Workbooks

        Set cmbCtl1= Application.CommandBars('Cell'). _

          Controls('工作簿导航').Controls.Add(Type:=msoControlPopup)

        WithcmbCtl1

           .Caption = wb.Name

           .OnAction = 'ActivateWB'

        EndWith

        ForEach ws In wb.Sheets

            If ws.Visible = xlSheetVisible Then

               Set cmbCtl2 = cmbCtl1.Controls.Add( _

                                 Type:=msoControlButton)

               With cmbCtl2

                   .Caption = ws.Name

                   .OnAction = 'ActivateWS'

               End With

           End If

        Nextws

    Next wb

End Sub

 

Sub ActivateWB()

    On ErrorResume Next

   Windows(Application.CommandBars.ActionControl.Caption).Activate

End Sub

 

Sub ActivateWS()

    On ErrorResume Next

    Sheets(Application.CommandBars.ActionControl.Caption).Activate

End Sub

 

ThisWorkbook模块中,输入下面的代码:

Private Sub Workbook_Open()

    On ErrorResume Next

   Application.CommandBars('Cell').Controls('工作簿导航').Delete

    CallCustomMenu

End Sub

 

Private Sub Workbook_BeforeClose(Cancel As Boolean)

    On ErrorResume Next

   Application.CommandBars('Cell').Controls('工作簿导航').Delete

End Sub

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多