Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Button mit Action und Parameter

VBA Button mit Action und Parameter
24.02.2020 08:47:13
W
Hallo Forum,
ich nutze auf einer Seite mehrere Buttons, welche per Makrocode generiert werden. Das läuft bisher alles ganz rund. Doch jetzt habe ich ein kleines Problem; mit insgesamt 3 Buttons möchte ich das gleiche Makro aufrufen, jedoch soll bei jedem der 3 Aufrufe ein Parameter an das Makro mitgegeben werden, um Unterschiede im Ablauf zu steuern.
Die Eigenschaften jedes Button werden wie folgt festgelegt:
With FormularControl
.Name = BName
.Characters.Text = BTitel
.Enabled = True
.LockedText = False
.OnAction = BAction
.Placement = xlMoveAndSize 'xlFreeFloating
.PrintObject = False
End With
BName, BTitel und BAction gebe ich als Paramter mit
Was muss ich ändern, um den oben genannten Parameter an den Action-Code zu übergeben?
Gruß W H21
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Button mit Action und Parameter
24.02.2020 09:09:11
Daniel
Hi
bei OnAction gibt es keine Parameterübergabe.
wenn du das gleiche Makro für mehrere Buttons mit leichten Variationen benutzen willst, kannst du mit Application.Caller im Marko den Namen des Aufrufenden Buttons ermitteln und daraus dann die Variation ableiten.
hierzu kannst du dann den benötigten Wert beispielsweise im Button-Namen hinterlegen, oder du kannst über den Namen des Buttons auf seine Objekteigenschaften wie Position oder ähnliches zugreifen und damit weiter arbeiten.
Sub Schaltfl?che1_Klicken()
MsgBox Application.Caller & vbLf & ActiveSheet.Shapes(Application.Caller).TopLeftCell.Address(0, _
0)
End Sub
Gruß Daniel
Anzeige
AW: VBA Button mit Action und Parameter
24.02.2020 09:16:11
W
Hallo Daniel,
Danke für Deine Antwort.
Habe es getestet und für gut befunden; mein Problem ist - dank dem Forum und seiner Freunde - wieder einmal sehr schnell gelöst worden.
Gruß W H21
AW: VBA Button mit Action und Parameter
24.02.2020 09:36:57
W
Hallo Daniel,
jetzt habe ich doch noch ein kleines Problem gefunden.
Der Code läuft einwandfrei, wenn ich das Makro nur über den Button aufrufe. Wenn ich es anders aufrufe, arhalten ich bei der Abfrage nach dem Application.Caller einen Laufzeitfehler 13.
Gibt es dafür eine andere Lösung als "On Error Resume Next"?
Gruß W H21
Anzeige
AW: VBA Button mit Action und Parameter
24.02.2020 09:45:39
Daniel
Hi
wüsste ich jetzt auch nicht.
ich würde aber dann am Anfang den Application.Caller einer Stringvaraible zuweisen:
On Error Resume Next
strAC = Application.Caller
On Error Goto 0
und dann in der folge mit der Variable anstelle von Application.Caller arbeiten.
dann brauchst du das On Error Resume Next nur an diese Stelle und kannst im Rest des Codes wie gewohnt arbeiten.
außerdem kannst du dann mit einer einfachen Abfrage If strAC = "" überprüfen, ob das Makro über einen Button oder über einen anderen Weg aufgerufen wurde, oder du kannst dem strAC einen entsprechenden Wert zuweisen.
Gruß Daniel
Anzeige
AW: VBA Button mit Action und Parameter
24.02.2020 10:32:39
Daniel
HI
noch ne Variante, wie du das lösen kannst:
trenne das Problem auf in 2 Makros.
Makro1 ist das eigentliche Makro welches die Arbeit ausführt. Erstelle dies mit der entsprechenden Parameterübergabe.
das Makro2 verwendest du als OnAction-Makro für die Buttons. Hier ermittelst du ausgehenend von Application.Caller den notwendigen Übergabeparameter und rufst dann damit das Makro1 auf.
wann ist dieser Weg sinnvoll und wann die Methode von Nepumuk?
ich würde diese Methode verwenden, wenn du den Übergabeparameter in irgendeiner Form aus den Buttoneigenschaften oder der Zellposition ableiten kannst (z.B. Übergabeparameter ist der Wert einer Nachbarzelle des Buttons)
die Methode von Nepumuk ist dann sinnvoll, wenn der Übergabeparameter ein beliebiger Wert ist, der nicht "berechnet" oder sonst wie ermittelt werden kann.
Gruß Daniel
Anzeige
AW: VBA Button mit Action und Parameter
24.02.2020 09:16:47
Nepumuk
Hallo,
ein Beispiel:
Option Explicit
Public Sub Beispiel()
With Tabelle1.Shapes("Button 1")
.OnAction = "'Test 1'"
End With
End Sub
Public Sub Test(intNumber As Integer)
MsgBox intNumber
End Sub

Gruß
Nepumuk
AW: VBA Button mit Action und Parameter
24.02.2020 10:05:33
W
Hallo Nepumuk,
Deine Antwort habe ich bisher übersehen.
Natürlich habe ich Deinen Code ebenfalls umgehend probiert. Dabei habe ich aber statt der Ziffern sprechende Namen genommen. Damit hat es leider nicht funktioniert. Nachdem ich die Namen durch Nummern ersetzt hatte. hatte ich den gewünschten Erfolg.
In meinem oben dargestellten Code gebe ich als Parameter für meine Varianle BAction nun "'MyMacro 0'" bzw. "'MyMacro 1'" mit. Dieser Wert wird mir dann im aufgerufenen MyMakro als 1. Parameter angeboten.
Das wars. Danke.
Gruß W H21
Anzeige
AW: VBA Button mit Action und Parameter
24.02.2020 10:11:56
Nepumuk
Hallo,
wenn du Text übergeben willst, dann musst du ihn in Anführungszeichen setzen:
Public Sub Beispiel()
With Tabelle1.Shapes("Button 1")
.OnAction = "'Test ""Text""'"
End With
End Sub
Public Sub Test(strText As String)
MsgBox strText
End Sub
Gruß
Nepumuk
Anzeige
AW: VBA Button mit Action und Parameter
24.02.2020 10:18:03
Daniel
Buttonklick mit Paramteterübergabe, kannte ich auch noch nicht.
wieder was gelernt.
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA Buttons mit Action und Parametern in Excel


Schritt-für-Schritt-Anleitung

Um ein Makro über einen Excel-Button mit einem Parameter aufzurufen, kannst du die OnAction-Eigenschaft der Schaltfläche nutzen. Hier ist eine Schritt-für-Schritt-Anleitung:

  1. Button erstellen: Erstelle einen FormularControl-Button in Excel.

  2. Button Eigenschaften setzen: Setze die Eigenschaften wie folgt:

    With FormularControl
       .Name = BName
       .Characters.Text = BTitel
       .Enabled = True
       .LockedText = False
       .OnAction = BAction
       .Placement = xlMoveAndSize
       .PrintObject = False
    End With

    Hierbei ist BAction der Name des Makros, das aufgerufen werden soll.

  3. Makro definieren: Erstelle das Makro, das durch den Button aufgerufen wird. Verwende Application.Caller, um den Namen des Buttons zu ermitteln und den Parameter abzuleiten:

    Sub Button_Click()
       Dim strButtonName As String
       On Error Resume Next
       strButtonName = Application.Caller
       On Error GoTo 0
       ' Verarbeite den Button-Namen weiter
    End Sub
  4. Parameterübergabe: Um einen Parameter zu übergeben, setze den BAction-Wert im Button auf den gewünschten Makronamen mit dem Parameter:

    .OnAction = "'MyMacro 1'"

Häufige Fehler und Lösungen

  1. Laufzeitfehler 13: Tritt auf, wenn das Makro nicht über einen Button aufgerufen wird. Um dies zu vermeiden, verwende eine String-Variable für Application.Caller:

    Dim strAC As String
    On Error Resume Next
    strAC = Application.Caller
    On Error GoTo 0
    If strAC = "" Then
       ' Makro wurde nicht über einen Button aufgerufen
    End If
  2. Parameterübergabe funktioniert nicht: Achte darauf, dass der Parameter korrekt in Anführungszeichen gesetzt ist, z.B. "'Test ""Text"""'.


Alternative Methoden

Eine alternative Methode besteht darin, zwei Makros zu verwenden:

  1. Makro1: Das Hauptmakro, das die eigentliche Arbeit macht und Parameter akzeptiert.
  2. Makro2: Das Makro, das über den Button aufgerufen wird und die Parameter für Makro1 festlegt.

Beispiel:

Sub Makro2()
    Dim param As Integer
    param = 1 ' oder andere Logik zur Bestimmung des Parameters
    Call Makro1(param)
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele zur Verwendung von Excel VBA Buttons mit OnAction:

  1. Beispiel zur Übergabe eines Textparameters:

    Public Sub Beispiel()
       With Tabelle1.Shapes("Button 1")
           .OnAction = "'Test ""Hello World""'"
       End With
    End Sub
    
    Public Sub Test(strText As String)
       MsgBox strText
    End Sub
  2. Beispiel zur Übergabe einer Zahl:

    Public Sub Beispiel()
       With Tabelle1.Shapes("Button 2")
           .OnAction = "'Test 5'"
       End With
    End Sub
    
    Public Sub Test(intNumber As Integer)
       MsgBox intNumber
    End Sub

Tipps für Profis

  • Namen der Buttons: Verwende sprechende Namen für deine Excel VBA Buttons, um die Wartbarkeit zu erhöhen.
  • Fehlerbehandlung: Implementiere eine robuste Fehlerbehandlung, um Laufzeitfehler zu vermeiden.
  • Dokumentation: Dokumentiere den Code, um die Verwendung der Buttons und deren Funktionen für andere Benutzer verständlich zu machen.

FAQ: Häufige Fragen

1. Kann ich mehrere Parameter übergeben?
Ja, du kannst mehrere Parameter übergeben, indem du sie in der OnAction-Eigenschaft durch Kommas trennst, z.B. "'MyMacro 1, 2, 3'".

2. Was ist Application.Caller?
Application.Caller gibt den Namen des Buttons zurück, der das Makro aufgerufen hat. Dies ist nützlich, um unterschiedliche Verhaltensweisen für verschiedene Buttons zu implementieren.

3. Wie ignoriere ich Fehler beim Aufruf?
Nutze On Error Resume Next, um Laufzeitfehler zu ignorieren. Achte jedoch darauf, dies sparsam zu verwenden und Fehler an geeigneten Stellen zu behandeln.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige