2015-03-10 14 views
5

Próbowałem utworzyć wstążkę w programie Excel i odniosłem sukces. Teraz przypisałem makro do przycisku.Jak wywołać funkcję w vba, która jest już przypisana do przycisku

Function delete_cells(control As IRibbonControl) 

Teraz stworzyłem kolejny makro, z którego trzeba wywołać funkcję delete_cells. Próbowałem to nazwać jak poniżej.

Function modify_cells(control As IRibbonControl) 
delete_cells 
End Sub 

ja dostaję błąd mówiąc argument nie opcjonalne. Pomóż mi z tym błędem.

+0

"Funkcja" wymaga argumentu "control". Musisz podać go w ten sposób: 'kontrola delete_cells'. – L42

Odpowiedz

5

Proponuję, aby utworzyć oddzielną podprogram, który nazywamy od przycisku w OnAction i gdziekolwiek chcesz się połączyć go z np

'button macro 
Sub cmdDeleteCells_OnAction(control as iRibbonControl) 
DeleteCells 
End Sub 

'another Sub that calls the delete routine 
Sub SomeOtherSub 
DeleteCells 
End Sub 

'the one they're all talking about 
Sub DeleteCells 
msgbox "All your cells are toast, bwah hah hah ha!" 
End Sub 

EDIT: Jeśli naprawdę chcesz po prostu zadzwonić OnAction sub Buttona, należy przekazać go do obiektu iRibbonControl, tak więc zadeklarować fałszywy:

Sub CallTheButtonsCode() 
Dim FakeControl As IRibbonControl 

cmdDeleteCells_OnAction FakeControl 
End Sub 

naprawdę nie polecam th jest z powodów konserwacji kodu, ale działa.

+0

Doug Glancy, Teraz używam metody, którą zasugerowałeś. Ale chcę wiedzieć, czy istnieje sposób bez użycia tego dodatkowego Sub. –

0

W swoim Function delete_cells(control As IRibbonControl) masz WYMAGANY argument ...(control As IRibbonControl). Po wywołaniu funkcji powinna wyglądać następująco:

Function modify_cells(control As IRibbonControl) 
delete_cells(myControl) 'myControl is your variable. Define what control you want to pass to the function. 
End Sub 
+0

Odkąd jestem nowy w vba, nie wiem zbyt wiele na temat kontroli. Więc jaki rodzaj kontroli powinien przejść do funkcji delete_cells? Po prostu chcę wykonać funkcję delete_cells, którą wciskam przycisk określony dla modify_cells. –

+0

Polecam, korzystając z sugestii z @Doug Glancy. Jeśli chcesz pozbyć się dodatkowego sub, możesz wkleić kod bezpośrednio do wszystkich procedur, z których chcesz uruchomić kod, ale to nie jest dobra praktyka, jak sądzę. "Sub SomeOtherSub DeleteCells End Sub", o którym Doug mówił, nie jest konieczne, nie potrzebujesz go wcale. To była tylko demonstracja, którą można nazwać 'DeleteCells' z różnych miejsc. –