2013-12-16 2 views
1

Я пытаюсь написать макрос, который создаст всплывающее окно, которое позволит мне перемещаться между страницами книги. До сих пор мне удалось заполнить контрольную панель, которая запускает простой макрос, но я бы хотел, чтобы он мог принимать переменные (ака имя листа), чтобы избежать необходимости писать кучу разных макросов. Вот что я до сих пор.Запустить макрос, используя 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 обновляется глобальная переменная, которая является именем листа, но я не уверен, как это сделать. Сообщите мне, если вы можете помочь. Благодаря!

ответ

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 должен начать UserForm, который будет иметь 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 

ScreenShot

enter image description here

Смежные вопросы