ich habe in jedem Tabellenblatt ein Makro......... Da wir über eine größere Anzahl an Tabellenblättern & Makros reden, möchte ich nicht jedes Makro per Call aufrufen.
Wie kann ich alle Makros nacheinander laufen lassen bis alle einmal durch sind?
möchte ich nicht jedes Makro per Call aufrufen.
musst du aber.
ich habe in jedem Tabellenblatt ein Makro
du meinst aber keine Event-Prozeduren, oder?
Private Sub CommandButton1_Click()
Call Makro1 'Die Makronamen müssen mit Deinem Macrnamen Übereinstimmen, also anpassen!!!
Call Macro 2
Call Macro3 ' Beliebig viele Makros eingeben
End Sub
Gruß
Public Sub Daten_aktualisieren()
Dim Current As Worksheet
Dim qt As QueryTable
For Each Current In Worksheets
'MsgBox Current.Name
If Current.QueryTables.Count > 0 Then
For Each qt In Current.QueryTables
qt.Refresh (BackgroundQuery)
Next
End If
Next
End Sub
Function OpenUrl(sURL As String, InFireFox As Boolean) As Integer
If InFireFox Then
OpenUrl = Shell("C:\Programme\Mozilla Firefox\firefox.exe " & sURL)
End If
End Function
Sub HellaKurse()
intResult = OpenUrl("https://www.onvista.de/aktien/handelsplaetze/Hella-Aktie-DE000A13SX22", True)
Application.Wait Now + TimeSerial(0, 0, 3)
Application.SendKeys "^a"
Application.Wait Now + TimeSerial(0, 0, 3)
Application.SendKeys "^c"
Application.Wait Now + TimeSerial(0, 0, 3)
Worksheets("1HellaKurs").Visible = True
Worksheets("1HellaKurs").Select
Range("A1").Select
ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False
Application.SendKeys "^{F4}", True
Worksheets("1HellaKurs").Visible = False
End Sub
Infolgedessen möchte ich halt nicht jedes einzelne makro anklicken oder in einem Makro 100 Call-Aufrufe haben, die ich einzeln benennen muss.....
Sub BankKurse()
Dim rng As Range
With Worksheets("Links")
For Each rng In .Range(.Cells(2, 1), .Cells(Rows.Count, 1).End(xlUp))
intResult = OpenUrl(rng.Value, True)
Application.Wait Now + TimeSerial(0, 0, 3)
Application.SendKeys "^a"
Application.Wait Now + TimeSerial(0, 0, 3)
Application.SendKeys "^c"
Application.Wait Now + TimeSerial(0, 0, 3)
With Worksheets(rng.Offset(, 1))
.Range("A1").PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False
End With
Next rng
End With
End Sub
Function OpenUrl(sURL As String, InFireFox As Boolean) As Integer
If InFireFox Then
OpenUrl = Shell("C:\Programme\Mozilla Firefox\firefox.exe " & sURL)
End If
End Function
GrußÖffne den VBA-Editor: Drücke ALT + F11
, um den VBA-Editor zu öffnen.
Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf VBAProject (DeineDatei.xlsm)
und wähle Einfügen -> Modul
.
Füge den Code ein: Schreibe den folgenden Code in das Modul:
Sub AlleMakrosAusfuehren()
Call Makro1
Call Makro2
Call Makro3
'Füge hier weitere Makros hinzu
End Sub
Erstelle einen CommandButton: Gehe zu Excel, wähle die Entwicklertools und füge einen CommandButton auf deinem Arbeitsblatt hinzu.
Verknüpfe den Button mit dem Makro: Doppelklicke auf den Button und füge den Aufruf des neuen Makros hinzu:
Private Sub CommandButton1_Click()
AlleMakrosAusfuehren
End Sub
Testen: Klicke auf den Button, um alle Makros nacheinander auszuführen.
Fehler: "Makro nicht gefunden"
Stelle sicher, dass die Makronamen exakt mit den Namen in deinem Code übereinstimmen.
Fehler: "Ungültiger Prozeduraufruf"
Überprüfe, ob die Makros korrekt definiert sind und keine private Sub-Prozeduren sind, wenn du sie von einem anderen Modul aufrufen möchtest.
Fehler: Keine Reaktion nach dem Klicken des Buttons
Vergewissere dich, dass der CommandButton korrekt mit dem Sub AlleMakrosAusfuehren
verknüpft ist.
Eine weitere Möglichkeit, mehrere Makros in Excel nacheinander auszuführen, besteht darin, die Makros in einer Schleife zu organisieren. Beispielsweise kannst du eine Liste von Makronamen in einem Array speichern und dann eine Schleife verwenden, um sie auszuführen:
Sub AlleMakrosMitArrayAusfuehren()
Dim Makros() As Variant
Dim i As Integer
Makros = Array("Makro1", "Makro2", "Makro3") 'Füge hier weitere Makros hinzu
For i = LBound(Makros) To UBound(Makros)
Application.Run Makros(i)
Next i
End Sub
Beispiel: Angenommen, du hast drei Makros, die Daten von verschiedenen URLs abrufen. Du kannst sie in einem einzigen Makro zusammenfassen:
Sub DatenVonURLsAbrufen()
Call AbrufVonURL1
Call AbrufVonURL2
Call AbrufVonURL3
End Sub
Wenn du die URLs in einer Excel-Tabelle hast, kannst du auch die oben genannte Schleifenmethode verwenden, um sie nacheinander zu verarbeiten.
Modularität: Halte deine Makros modular, sodass du nur die Änderungen in den spezifischen Modulen vornehmen musst, ohne den Hauptaufruf zu beeinflussen.
Fehlerbehandlung: Implementiere eine Fehlerbehandlung in deinen Makros, um sicherzustellen, dass das gesamte Skript nicht bei einem Fehler abbricht.
On Error Resume Next
'Dein Code hier
On Error GoTo 0
Dokumentation: Kommentiere deinen Code gut, um die Nachvollziehbarkeit zu gewährleisten, besonders wenn du mehrere Makros nacheinander ausführen möchtest.
1. Muss ich alle Makros in einem Modul haben?
Nein, du kannst Makros in verschiedenen Modulen haben, solange sie als Public
deklariert sind.
2. Wie kann ich sicherstellen, dass alle Makros in der richtigen Reihenfolge ausgeführt werden?
Du kannst die Makros in der Reihenfolge aufrufen, in der sie ausgeführt werden sollen, oder die Schleifenmethode verwenden, um die Reihenfolge festzulegen.
3. Was ist der Unterschied zwischen Call
und Application.Run
?
Call
wird verwendet, um Subroutinen direkt aufzurufen, während Application.Run
es dir ermöglicht, Makros anhand ihres Namens als String aufzurufen.
Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden
Suche nach den besten AntwortenEntdecke unsere meistgeklickten Beiträge in der Google Suche
Top 100 Threads jetzt ansehen