使用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
截图