2015-03-10 7 views
5

Ich habe versucht, eine Multifunktionsleiste in Excel zu erstellen, und ich war erfolgreich. Jetzt habe ich einem Button ein Makro zugewiesen.So rufen Sie eine Funktion in vba auf, die bereits einer Schaltfläche zugewiesen ist

Function delete_cells(control As IRibbonControl) 

Jetzt habe ich ein anderes Makro, von dem ich brauche delete_cells um die Funktion aufzurufen. Ich habe versucht, es wie unten zu nennen.

Function modify_cells(control As IRibbonControl) 
delete_cells 
End Sub 

Ich erhalte ein Fehler Argument nicht optional sagen. Bitte helfen Sie mir mit diesem Fehler.

+0

Sie 'Funktion' erfordert' Kontrolle' Argument. Sie müssen es wie folgt bereitstellen: 'delete_cells control'. – L42

Antwort

5

Ich schlage vor, dass Sie eine separate Unterprogramm erstellen, die Sie von der OnAction der Schaltfläche aufrufen und anderswo wollen Sie es von nennen, zB:

'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: Wenn Sie Sie OnAction Unter der Schaltfläche müssen wirklich nur das, nennen wollen es ein iRibbonControl Objekt als auch passieren, erklären so eine gefälschte:

Sub CallTheButtonsCode() 
Dim FakeControl As IRibbonControl 

cmdDeleteCells_OnAction FakeControl 
End Sub 

ich empfehle nicht wirklich th ist aus Gründen der Codepflege, aber es funktioniert.

+0

Doug Glancy, Im Moment verwende ich die Methode, die Sie vorgeschlagen haben. Aber ich möchte wissen, ob es einen Weg gibt, ohne diesen zusätzlichen Sub zu verwenden. –

0

In Ihrem haben Sie ein Required-Argument ...(control As IRibbonControl). Wenn Sie die Funktion aufrufen, sollte es so aussehen:

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

Da ich neu in VBA bin, weiß ich nicht viel über Kontrollen. Welche Art von Kontrolle sollte ich an die Funktion delete_cells weitergeben? Ich möchte nur die Funktion delete_cells ausführen, die ich die Taste für modify_cells drücken. –

+0

Ich würde empfehlen, den Vorschlag von @Doug Glancy zu verwenden. Wenn Sie extra Sub loswerden wollen, können Sie den Code direkt in alle Prozeduren einfügen, von wo Sie den Code ausführen möchten, aber das ist keine gute Praxis, denke ich. Das 'Sub SomeOtherSub DeleteCells End Sub', von dem Doug gesprochen hat, ist nicht notwendig, Sie brauchen es überhaupt nicht. Es war nur eine Demonstration, dass Sie die 'DeleteCells' von verschiedenen Orten aus aufrufen können. –

Verwandte Themen