我正在尝试编写一个宏,它将创建一个弹出窗口,允许我在工作簿的页面之间导航。到目前为止,我已经能够填充运行一个简单宏的controlpopup,但我希望它能够接受变量(也就是表名),以避免编写一堆不同的宏。这是我到目前为止所拥有的。
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
这会运行宏'TestMacro',但不知道如何编写它以便接受字符串变量。我的另一个是在每个.OnAction中更新一个全局变量,即片名,但我不确定如何做到这一点。 如果你能提供帮助,请告诉我。谢谢!
答案 0 :(得分:0)
您的testmacro
应该启动一个具有ComboBox
和CommandButton
逻辑是,当userform初始化时,它将存储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
<强>截图强>
答案 1 :(得分:0)
这应该有效(至少,它适用于工作表上的形状)
.OnAction = "'" & ThisWorkbook.Name & "'!'TestMacro ""blah22""'"
...但如果您想要导航到特定工作表,则右键单击工作表标签左侧的“VCR”控件是最简单的内置方式...
如果参数在变量中,您可以这样做:
.OnAction = "'" & ThisWorkbook.Name & "'!'TestMacro """ & stringvariable & """'"