2015-04-24 5 views
11

Ich möchte eine Schaltfläche zu meinem Excel-Arbeitsblatt hinzufügen, die ein Makro aufrufen sollte, die ein agument (ein ganzzahliger Wert) verarbeiten kann. Leider kann ich beim Erstellen der Schaltfläche kein Makro mit Argumenten verknüpfen. Geben Sie auch nur das Makro ein und das Argument funktioniert nicht.So rufen Sie ein Makro aus einer Schaltfläche und übergeben Sie Argumente

Gibt es eine einfache Lösung, um ein Argument an ein Makro zu übergeben, wenn eine Taste gedrückt wird?

+3

Sie können den Makronamen und das Argument auch in Anführungszeichen eingeben (z. B. ''macro 5''). Verwenden Sie diese Methode jedoch nicht, wenn Ihre Datei im XLSB-Format vorliegt. – Rory

Antwort

6
Sub ert() 
Call ert2(Cells(1,1).Value) 
End Sub 
3

eine ActiveX-Steuerelement Befehlsschaltfläche verwenden und in der Schaltfläche Click-Methode, die Unter aufrufe und das Argument übergeben:

Private Sub CommandButton_Click() 

    Dim x as Integer 
    x = 1 
    Call SomeSub(x) 

End Sub 
3

Called von einem regulären „Formularen“ -Taste auf einem Arbeitsblatt, das Sie etwas tun kann dies wie:

Sub TestMe() 
    Dim c, arr 
    c = Application.Caller 
    arr = Split(c, "_") 
    If UBound(arr) > 0 Then MsgBox "Got " & arr(1) 
End Sub 

Wo die anrufende Taste (zB) "Button_3" genannt

Or (einf ler) der rechten Maustaste auf die Schaltfläche und geben Sie 'TestMe2 5' (einschließlich der einfachen Anführungszeichen)

Sub TestMe2(i) 
    MsgBox "Got " & i 
End Sub 

Siehe auch: Excel 2010 - Error: Cannot run the macro SelectCell using .onAction

23

Ja, Sie ein Makro einer Schaltfläche zuweisen können (oder eine andere Excel Kontrollen/Menü Aktionen) und übergeben Sie ihm konstante oder variable Argumente.

In der ‚Makro zuweisen‘ Fenster (Rechtsklick auf das Objekt und wählen Sie ‚Makro zuweisen‘):

  • Setzen Sie den Makronamen in Apostrophe z.B. 2 Konstanten weitergeben müssen: ‚Button1_Click (‚Ein String!‘, 7)‘
  • Select ‚Diese Arbeitsmappe‘ für das ‚Makros in‘ Feld
  • Wenn Sie eine Variable übergeben (wie der Wert einer Zelle) , schließen Sie die Parameter in()

zum Beispiel auswerten, um den Wert von Sheet1 $ A $ 1 auf eine Schaltfläche Funktion zu übergeben, würden Sie den folgenden Text in dem haben! 'Makroname:' Feld:

'Button1_Click (Auswerten ("Sheet1! $ A $ 1"))'

Wenn Sie Ihr variables Argument nicht einschließen wi th eine "Evaluate" -Funktion, Excel liefert den Fehler "Formel ist zu komplex, um einem Objekt zugewiesen zu werden.".

Ich hätte ein Bild hinzugefügt, wenn dies bei meinem ersten Beitrag erlaubt war.

+0

Ich habe versucht, Ihren Ansatz, aber ich war nicht in der Lage, es zum Laufen zu bringen. Scheint, dass eine Funktion oder ein Makro als zugewiesenes Makro nicht erlaubt ist, wenn es Argumente empfängt. –

+2

Umschließen des Makronamens ist Zitate für mich: Ich habe den Makronamen auf "Select 1,2" für eine Schaltfläche gesetzt und es hat meine 'Select' Methode richtig aufgerufen. – Quango

+2

Vielen Dank! Diese Lösung funktionierte, um ein einzelnes Argument zu übergeben - was ist, wenn mehrere Argumente vorhanden sind? –

0

schlug ich das gleiche Problem mit den assign button nicht sehr nützlich sein, bis ich erkennen, dass alle das Potential macros nur diejenigen in meiner Personal.xlsb Datei angezeigt wurden, die keine Argumente haben. Dann tippte ich Personal.xlsb!'macroNameWhichTakesArguments("arg1", ...)' und das Blatt hob es auf.

I.E. Personal.xlsb!'testForXXXX("Test Test")'

Wo die macro testForXXXX eine Zeichenfolge als Eingabe nehmen, dann funktionierte das Blatt in Ordnung.

Wenn Sie die Zuweisung Makro Route für eine button in excel 2007 mindestens testForXXXX verwenden, wird nicht in der Liste der möglichen Makros angezeigt, wenn es args dauert.

Ich vermute, dass Aaron C dadurch auch gestolpert ist. Vielleicht ist es am besten, keine Personal.xlsb Datei zu verwenden?

Verwandte Themen