Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: OnAction Parameter mitgeben

OnAction Parameter mitgeben
Reinhard
Hallo,
zur Laufzeit wird in einjem Blatt ein Button erstellt.
Dieser Button soll dann ein Makro aufrufen und diesem einen Parameter übergeben.
Bei einem Test mit "Klappt" funktioniert es, klicke ich aber auf den Button so wird warum auch immer 1977 angezeigt als StrBlatt.
Was muß ich da ändern sodaß der Button funktioniert?
Wie kann ich einer Prozedur wie "PivotAktualisieren" je nach Sachlage den Namen eines Worksheets übergeben oder aber auch das Worksheet direkt als Objekt?
Und zwar zur laufzeit über OnAction.
Danke für das Interesse
Gruß
Reinhard
Sub test()
Call ButtonErstellen(worksheets("2011-03-31"))
End Sub
Sub ButtonErstellen(wks As Worksheet)
Dim T As Integer, L As Integer, W As Integer, H As Integer, btn As Button
With wks
L = .Range("C1").Left
T = .Range("C1").Top
W = 100
H = 20
Set btn = wks.Buttons.Add(L, T, W, H)
btn.Caption = "Pivot aktualisieren"
MsgBox wks.Name      'Anzeige: 2011-03-31
btn.OnAction = "'PivotAktualisieren " & wks.Name & "'"
MsgBox btn.OnAction  'Anzeige: Mappenname!'PivotAktualisieren 2011-03-31'
End With
End Sub
Sub PivotAktualisieren(ByVal strBlatt As String)
Dim PT As PivotTable
MsgBox strBlatt           'Anzeige: 1977
For Each PT In worksheets(strBlatt).PivotTables
PT.PivotTableWizard SourceType:=xlDatabase, SourceData:="PivotQuelle"
PT.RefreshTable
Next PT
End Sub
Sub Klappt()
Call PivotAktualisieren("2011-03-31")
End Sub



		
Anzeige
AW: OnAction Parameter mitgeben
31.03.2011 13:15:59
Rudi
Hallo,
da sich doch der Button auf dem zu aktualisierenden Blatt befindet, kannst du doch einfach mit ActiveSheet arbeiten, ohne Parameterübergabe.
Gruß
Rudi
Was soll das werden...
31.03.2011 13:18:18
Luc:-?
btn.OnAction = "'PivotAktualisieren " & wks.Name & "'", Reinhard?
Willst du etwa mit einem Button ein Pgm parametriert aufrufen? Das kannst du von beliebigen Objekten aus machen, bspw in OpenScript und Lingo, in VBA wäre das aber ein Novum, sprich kannste vajessn!
Gruß Luc :-?
Anzeige
AW: Was soll das werden...
31.03.2011 13:34:04
Reinhard
Hallo Luc,
ich denk mir halt, da das Nachfolgende auch funktioniert, ich also den Parameter fest vorgeb, müßte es doch auch funktionieren wenn ich für den Parameter eine Variable nehmen.
Sub ButtonErstellen()
Dim T As Integer, L As Integer, W As Integer, H As Integer, btn As Button
With Worksheets("Tabelle1")
L = .Range("C1").Left
T = .Range("C1").Top
W = 100
H = 20
Set btn = .Buttons.Add(L, T, W, H)
btn.Caption = "Pivot aktualisieren"
btn.OnAction = "'PivotAktualisieren ""Huhu""'"
End With
End Sub
Sub PivotAktualisieren(strText As String)
MsgBox strText & strText & strText
End Sub

Gruß
Reinhard
Anzeige
Umleitung
31.03.2011 13:32:44
Rudi
Hallo,
Sub ButtonErstellen(wks As Worksheet)
Dim T As Integer, L As Integer, W As Integer, H As Integer, btn As Button
With wks
L = .Range("C1").Left
T = .Range("C1").Top
W = 100
H = 20
Set btn = wks.Buttons.Add(L, T, W, H)
With btn
.Caption = "Pivot aktualisieren "
.OnAction = "test"
.Name = "b_" & wks.Name
End With
End With
End Sub

Sub ttt()
ButtonErstellen Sheets(2)
End Sub

Sub test()
MsgBox Mid(ActiveSheet.Shapes(Application.Caller).Name, 3)
End Sub

Gruß
Rudi
Anzeige
AW: Umleitung
31.03.2011 13:45:21
Reinhard
Hallo Rudi,
der Umweg über Application.Caller ist ja noch besser als das mit Activesheet was auch gut funktioniert.
Ich nehm dann einen AktivX Commandbutton, dann habe ich ja noch den "Tag" zur Verfügung, bin zufrieden, danke dir.
Aber grundsätzlich gesehen interessiert mich die Parameterübergabe,
so wie von mir angedacht aber nicht hinbekommen. Deshalb Frage noch offen.
Gruß
Reinhard
Anzeige
AktiveX Commandbutton
31.03.2011 14:08:01
Rudi
Hallo,
das mit dem Tag ist richtig.
Ich bin aber gespannt, wie du dem ein Makro zuweist. ;-)
Gruß
Rudi
AW: AktiveX Commandbutton
31.03.2011 14:38:27
Reinhard
Hallo Rudi,
nein Makro wollte ich nicht, ich dachte mit Name und Tag könnte icch ja zei Parameter übergeben, so ungefähr.
Aber ein CB in einem Blatt hat wohl keinen Tag.
Und onaction gibts da ja auch nicht.
Vergiss halt die Idee :-)
Gruß
Reinhard
Anzeige
AW: AktiveX Commandbutton
31.03.2011 18:51:14
Nepumuk
Hallo,
wenn du per OnAction einen String übergeben willst musst du den in Anführungszeichen setzen.
btn.OnAction = "'PivotAktualisieren """ & wks.Name & """'"

In deiner Konstruktion wird ein Integer erzeugt welcher bei der Übergabe berechnet wird. 2011 minus 3 minus 31 gibt 1977.
Gruß
Nepumuk
Anzeige
OnAction ein Objekt als Parameter dem makro mitgeb
31.03.2011 21:13:27
Reinhard
Hallo Nepumuk,
dankeschön. Jetzt bin ich überreich beschenkt mit Lösungen für mein aktuelles Problem.
Aus Wissensgründen für die Zukunft, wie übergebe ich nicht den namen eines Worksheets an die aufgerufene Prozedur durch OnAction, sondern das Worksheet selbst als Objekt?
Nachfolgender Code kappt natürlich nicht in der zeile
btn.OnAction = "'PivotAktualisieren2 """ & Worksheets("Tabelle1") & """'"
kommt Fehler 438.
Ich habe schon mit einigen Anführungszeichenkombinationen rumzubasteln, bislang erfolglos.
Gruß
Reinhard
Option Explicit
Sub ButtonErstellen()
Dim T As Integer, L As Integer, W As Integer, H As Integer, btn As Button
With Worksheets("Tabelle1")
L = .Range("C1").Left
T = .Range("C1").Top
W = 100
H = 20
Set btn = .Buttons.Add(L, T, W, H)
btn.Caption = "Pivot aktualisieren"
btn.OnAction = "'PivotAktualisieren """ & .Name & """'"
Set btn = .Buttons.Add(L + 30, T + 30, W, H)
btn.Caption = "Pivot aktualisieren2"
btn.OnAction = "'PivotAktualisieren2 """ & Worksheets("Tabelle1") & """'"
'btn.OnAction = "'PivotAktualisieren ""Huhu""'"
End With
End Sub
Sub PivotAktualisieren(strText As String)
MsgBox strText & strText & strText
End Sub
Sub PivotAktualisieren2(wks As Worksheet)
MsgBox wks.Name & wks.Name
End Sub

Anzeige
AW: OnAction ein Objekt als Parameter dem makro mitgeb
31.03.2011 23:03:51
Nepumuk
Hallo,
wenn du den Codenamen der Tabelle benutzt klappt das.
Option Explicit

Sub test()
    Call ButtonErstellen(Tabelle1)
End Sub

Sub ButtonErstellen(wks As Worksheet)
    Dim T As Integer, L As Integer, W As Integer, H As Integer, btn As Button
    With wks
        L = .Range("C1").Left
        T = .Range("C1").Top
        W = 100
        H = 20
        Set btn = wks.Buttons.Add(L, T, W, H)
        btn.Caption = "Pivot aktualisieren"
        MsgBox wks.Name 'Anzeige: 2011-03-31
        btn.OnAction = "'PivotAktualisieren " & wks.CodeName & "'"
        MsgBox btn.OnAction 'Anzeige: Mappenname!'PivotAktualisieren 2011-03-31'
    End With
End Sub

Sub PivotAktualisieren(strBlatt As Worksheet)
    
    MsgBox strBlatt.Name
    
End Sub

Gruß
Nepumuk
Anzeige
AW: OnAction ein Objekt als Parameter dem makro mitgeb
31.03.2011 23:39:13
Reinhard
Hallo Nepumuk,
sehr schön, auch das klappt vorzüglich, danke dir.
Gruß
Reinhard
;
Anzeige
Anzeige

Infobox / Tutorial

OnAction Parameter in Excel VBA übergeben


Schritt-für-Schritt-Anleitung

Um einen Button in Excel VBA zu erstellen und diesem einen OnAction-Parameter zu übergeben, kannst du die folgenden Schritte ausführen:

  1. Erstelle eine Subroutine für das Button-Setup:

    Sub ButtonErstellen(wks As Worksheet)
       Dim T As Integer, L As Integer, W As Integer, H As Integer, btn As Button
       With wks
           L = .Range("C1").Left
           T = .Range("C1").Top
           W = 100
           H = 20
           Set btn = .Buttons.Add(L, T, W, H)
           btn.Caption = "Pivot aktualisieren"
           btn.OnAction = "'PivotAktualisieren """ & wks.Name & """'"
       End With
    End Sub
  2. Definiere die Subroutine, die aufgerufen wird:

    Sub PivotAktualisieren(ByVal strBlatt As String)
       MsgBox "Aktualisiere Pivot für " & strBlatt
       ' Hier kannst du den Code zur Aktualisierung des Pivot-Tabellen einfügen.
    End Sub
  3. Rufe die Button-Erstellungsroutine auf:

    Sub test()
       Call ButtonErstellen(Worksheets("2011-03-31"))
    End Sub

Durch dieses Setup kannst du bei einem Klick auf den Button das Makro PivotAktualisieren mit dem Namen des Arbeitsblattes als Parameter aufrufen.


Häufige Fehler und Lösungen

  1. Fehler 438: "Objekt unterstützt diese Eigenschaft oder Methode nicht."

    • Ursache: Dies tritt häufig auf, wenn du versuchst, ein Objekt an die OnAction-Eigenschaft zu übergeben, das nicht als String interpretiert werden kann.
    • Lösung: Stelle sicher, dass du den Namen des Worksheets in Anführungszeichen setzt:
      btn.OnAction = "'PivotAktualisieren """ & wks.Name & """'"
  2. Falsche Anzeige des Arbeitsblattnamens:

    • Ursache: Wenn du die falsche Variable oder den falschen Kontext verwendest.
    • Lösung: Überprüfe, ob du das richtige Arbeitsblatt referenzierst und den Code entsprechend anpasst.

Alternative Methoden

  • Verwendung von ActiveSheet: Wenn der Button auf dem gleichen Arbeitsblatt ist, das du aktualisieren möchtest, kannst du ActiveSheet verwenden, um die Parameterübergabe zu vermeiden:

    btn.OnAction = "PivotAktualisieren"
  • Verwendung von Application.Caller: Mit dieser Methode kannst du den Namen des Buttons ermitteln und entsprechend den Kontext verwenden:

    Sub test()
      MsgBox "Der aufgerufene Button ist: " & Application.Caller
    End Sub

Praktische Beispiele

Hier sind einige Beispiele für die Verwendung von .OnAction mit Parametern:

  1. Übergabe eines Textparameters:

    btn.OnAction = "'PivotAktualisieren ""Huhu""'"
  2. Übergabe eines Arbeitsblattobjekts:

    btn.OnAction = "'PivotAktualisieren2 """ & Worksheets("Tabelle1").CodeName & """'"

Diese Beispiele zeigen, wie du Excel VBA OnAction mit verschiedenen Parametern effektiv nutzen kannst.


Tipps für Profis

  • Achte darauf, dass du deine Makros gut dokumentierst, insbesondere wenn du mit mehreren Parametern arbeitest.
  • Verwende Option Explicit am Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert sind. Dadurch vermeidest du viele häufige Fehler.
  • Teste deine VBA-Funktionen gründlich, um sicherzustellen, dass die Parameterübergabe wie gewünscht funktioniert.

FAQ: Häufige Fragen

1. Wie kann ich mehrere Parameter an eine OnAction-Prozedur übergeben? Du kannst die Parameter als String formatieren und sie in Anführungszeichen setzen. Zum Beispiel:

btn.OnAction = "'MeineSub ""Parameter1"" ""Parameter2""'"

2. Funktioniert das auch in Excel Online? Aktuell unterstützen die Online-Versionen von Excel einige VBA-Funktionen nicht. Daher ist es ratsam, dies in der Desktop-Version von Excel zu testen.

3. Was ist der Unterschied zwischen .OnAction und Application.Run? .OnAction wird verwendet, um eine bestimmte Prozedur beim Klicken eines Buttons auszuführen, während Application.Run es dir ermöglicht, eine Prozedur programmgesteuert auszuführen, auch wenn du keine Schaltfläche verwendest.

Nutze diese Anleitungen und Tipps, um deine VBA-Projekte effizient zu gestalten und die Parameterübergabe mit .OnAction erfolgreich zu implementieren!

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige