ich suche einen Befehl wie ich aus dem Menü "Daten" den Punkt "alle aktualsieren" ausführen kann.
funktioniert das evtl. per Application.Dialogs( ... ) ?
Grüße
Peter
Sub kopieren17302200()
With ActiveWorkbook
ActiveWorkbook.RefreshAll
Application.Wait (Now + TimeValue("0:00:20"))
.Worksheets("RealtimeEinzelvergleich").Range("q2:q31").Copy
.Worksheets("1730-2200").Range("A1").PasteSpecial Paste:=xlValues
.Worksheets("RealtimeEinzelvergleich").Range("u2:u31").Copy
.Worksheets("1730-2200").Range("B1").PasteSpecial Paste:=xlValues
Application.Wait Now + TimeSerial(0, 0, 0.5)
.Worksheets("1730-2200").Range("d1:e30").Copy
.Worksheets("1730-2200").Range("g1").PasteSpecial Paste:=xlValues
End With
End Sub
Öffne die Excel-Datei, in der du den VBA-Befehl ausführen möchtest.
Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
Füge ein neues Modul hinzu:
Kopiere den folgenden Code in das Modul:
Sub kopieren17302200()
With ActiveWorkbook
ActiveWorkbook.RefreshAll
Application.Wait (Now + TimeValue("0:00:20"))
.Worksheets("RealtimeEinzelvergleich").Range("q2:q31").Copy
.Worksheets("1730-2200").Range("A1").PasteSpecial Paste:=xlValues
.Worksheets("RealtimeEinzelvergleich").Range("u2:u31").Copy
.Worksheets("1730-2200").Range("B1").PasteSpecial Paste:=xlValues
Application.Wait Now + TimeSerial(0, 0, 0.5)
.Worksheets("1730-2200").Range("d1:e30").Copy
.Worksheets("1730-2200").Range("g1").PasteSpecial Paste:=xlValues
End With
End Sub
Schließe den VBA-Editor und kehre zu Excel zurück.
Führe das Makro aus:
ALT + F8, wähle kopieren17302200 aus und klicke auf "Ausführen".Fehler: "Das Objekt unterstützt diese Eigenschaft oder Methode nicht."
Fehler: "Das Makro wurde nicht gefunden."
Problem mit der Verzögerung:
Application.Wait die gesamte Ausführung pausiert, kannst du stattdessen Application.OnTime verwenden, um eine Verzögerung gezielt einzufügen.Anstelle von Application.Wait kannst du die Sleep-Funktion verwenden. Dafür musst du die Windows API in dein Modul einfügen:
Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub kopierenMitSleep()
With ActiveWorkbook
ActiveWorkbook.RefreshAll
Sleep 20000 ' Verzögert für 20 Sekunden
' Rest des Codes hier...
End With
End Sub
Die Verwendung von Sleep kann die Ausführung nicht vollständig anhalten, sodass andere Prozesse weiterhin bearbeitet werden können.
Hier ist ein Beispiel, wie du einen Menüpunkt per VBA-Befehl ausführen kannst:
Sub Aktualisieren()
Application.CommandBars("Daten").Controls("Alle aktualisieren").Execute
End Sub
Mit diesem Befehl kannst du direkt den Menüpunkt "Alle aktualisieren" ansteuern, ohne die Refresh-All Funktion nutzen zu müssen.
1. Frage: Wie kann ich sicherstellen, dass mein Makro nur bei aktiven Daten ausgeführt wird?
Antwort: Du kannst eine Bedingung hinzufügen, die überprüft, ob die Daten in den entsprechenden Zellen vorhanden sind, bevor das Makro ausgeführt wird.
2. Frage: Was mache ich, wenn ich keine VBA-Befehle verwenden kann?
Antwort: Du kannst die Daten auch manuell aktualisieren oder Excel-Funktionen nutzen, um die Daten zu bearbeiten, jedoch ohne die Automatisierung, die VBA bietet.