2013-12-16 123 views
1

我想寫一個宏,將創建一個彈出窗口,將允許我瀏覽工作簿的頁面之間。到目前爲止,我已經能夠填充一個運行一個簡單的宏的controlpopup,但我希望它能夠接受變量(即sheetname)以避免編寫一堆不同的宏。這是我到目前爲止。運行宏使用controlpopup vba

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中更新一個全局變量,即sheetname,但我不確定如何做到這一點。 讓我知道你是否可以幫忙。謝謝!

回答

0

這應該工作(至少,它適用於一個形狀上的工作表)

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

......但是如果你在做什麼NT是導航到一個特定的工作表,然後右鍵單擊工作表選項卡左側的「VCR」控件是最簡單的內置方式...

如果您的參數在變量中,您可以這樣做:

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

蒂姆,錄像機控制是無用的,如果工作表被隱藏:) –

+0

謝謝你,工作很好! – user3075100

+0

如果您有更多時間來回答後續問題,那就太好了。上面的代碼對於定義的字符串很有效(在你的例子「blah22」中);但是如果你想添加一個字符串變量,你會怎麼做。我試圖編寫此代碼,但宏沒有被調用: .OnAction =「'」&ThisWorkbook.Name&「'!'TestMacro」&stringvariable&「'」 – user3075100

0

testmacro應該推出這樣就會產生ComboBoxCommandButton

的邏輯是一個窗體,當用戶窗體初始化時,它會將所有的工作表名稱從當前工作簿存儲在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