使用controlpopup vba运行宏

时间:2013-12-16 23:12:23

标签: excel vba excel-vba

我正在尝试编写一个宏,它将创建一个弹出窗口,允许我在工作簿的页面之间导航。到目前为止,我已经能够填充运行一个简单宏的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中更新一个全局变量,即片名,但我不确定如何做到这一点。 如果你能提供帮助,请告诉我。谢谢!

2 个答案:

答案 0 :(得分:0)

您的testmacro应该启动一个具有ComboBoxCommandButton

的用户表单

逻辑是,当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

<强>截图

enter image description here

答案 1 :(得分:0)

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

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

...但如果您想要导航到特定工作表,则右键单击工作表标签左侧的“VCR”控件是最简单的内置方式...

如果参数在变量中,您可以这样做:

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