使用controlpopup vba运行macros

我正在尝试编写一个macros,它将创build一个popup窗口,使我可以在工作簿的页面之间导航。 到目前为止,我已经能够填充一个运行一个简单的macros的controlpopup,但是我希望它能够接受variables(aka sheetname),以避免编写一堆不同的macros。 这是我迄今为止。

Sub Custom_PopUpMenu_1(Mname As String) Dim MenuItem As CommandBarPopup ' Add the popup menu. With Application.CommandBars.Add(Name:=Mname, Position:=msoBarPopup, _ MenuBar:=False, Temporary:=True) With .Controls.Add(Type:=msoControlPopup) .Caption = "Menu Control" With .Controls.Add(Type:=msoControlButton) .Caption = "Button 1 in menu" .FaceId = 71 .OnAction = "'" & ThisWorkbook.Name & "'!" & "TestMacro" End With End With End With End Sub 

这运行macros'TestMacro',但不知道如何写它,以便它将接受一个stringvariables。 我的另一个是在每个.OnAction更新一个全局variables是sheetname,但我不确定如何做到这一点。 让我知道你是否可以帮忙。 谢谢!

这应该工作(至less,它适用于工作表上的形状)

 .OnAction = "'" & ThisWorkbook.Name & "'!'TestMacro ""blah22""'" 

…但如果你想要的是导航到一个特定的工作表,然后右键单击工作表选项卡左边的“VCR”控件是最简单的内置方式…

如果你的参数在一个variables中,你可以这样做:

 .OnAction = "'" & ThisWorkbook.Name & "'!'TestMacro """ & stringvariable & """'" 

您的testmacro应该启动一个用户testmacro ,它将有一个ComboBox和一个CommandButton

逻辑是,当用户窗体初始化时,它会将当前工作簿中的所有工作表名称存储在ComboBox并且可以使用CommandButton来导航到该工作表。

这是一个例子

 Private Sub UserForm_Initialize() Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets ComboBox1.AddItem ws.Name Next ws End Sub Private Sub CommandButton1_Click() Dim wsName As String If ComboBox1.ListIndex <> -1 Then wsName = ComboBox1.List(ComboBox1.ListIndex) If ActiveWorkbook.Sheets(wsName).Visible <> xlSheetVisible Then ActiveWorkbook.Sheets(wsName).Visible = True End If ActiveWorkbook.Sheets(wsName).Activate End If End Sub 

截图

在这里输入图像说明