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

Makro warten bis refresh - Fehler

Forumthread: Makro warten bis refresh - Fehler

Makro warten bis refresh - Fehler
23.09.2022 13:24:08
Dennis
Hallo zusammen,
ich habe leider ein Problem beim Warten des Makros. Ich habe den unten stehenden Code geschrieben. Dort soll eine Tabelle (Rechnungen mittels PQ) aktualisiert werden, da diese in der Vorlage leer ist. Sobald das Ergebnis da ist, soll dies genommen werden um zu gucken ob eine Schaltfläche eingeblendet wird. In Zelle(5,12) ist eine Formel hinterlegt welche die eindeutigen Ergebnisse zählt. Daher wird dort drauf verlinkt. Wenn es Einträge gibt dann muss diese erscheinen, wenn nicht dann nicht.
Es hängt vor dem x= ... Hier wartet das Makro nicht und er erkennt immer x als 0 an. Könnt ihr mir sagen wo der Fehler ist? Oder geht diese(r) Abfrage/Code auch anders?
Viele Grüße
Dennis

Sub Auswertung()
Application.ScreenUpdating = False
Set ta = Worksheets("Auswertung")
Set tb = Worksheets("Avisdaten")
ActiveWorkbook.RefreshAll
Do
DoEvents
Loop Until Application.CalculationState = xlDone
x = ta.Cells(5, 12)
If x > 0 Then
ta.Shapes.Range(Array("Rounded Rectangle 1")).Visible = True
Else
End If
Application.ScreenUpdating = True
End Sub
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Makro warten bis refresh - Fehler
23.09.2022 13:49:03
GerdL
Hallo Dennis,
teste mal mit dieser Prozedur im Modul von Blatt Avisdaten.

Private Sub Worksheet_Calculate()
With Application
.EnableEvents = False
.Calculation = xlCalculationManual
Worksheets("Auswertung").Shapes("Rounded Rectangle 1").Visible = (Cells(5, 12) > 0)
.Calculation = xlCalculationAutomatic
.EnableEvents = True
End With
End Sub
Gruß Gerd
Anzeige
AW: Makro warten bis refresh - Fehler
24.09.2022 15:32:45
Dennis
Hallo Gerd,
funktioniert leider auch nicht.
Vg Dennis
AW: Makro warten bis refresh - Fehler
23.09.2022 13:56:24
ChrisL
Hi Dennis
PQ Verbindungseigenschaften die Hintergrundaktualisierung deaktivieren.

Sub Auswertung()
Dim ta As Worksheet
Application.ScreenUpdating = False
With ThisWorkbook
Set ta = .Worksheets("Auswertung")
.RefreshAll
ta.Shapes.Range("Rounded Rectangle 1").Visible = ta.Cells(5, 12) > 0
End With
Application.ScreenUpdating = True
End Sub
cu
Chris
Anzeige
AW: Makro warten bis refresh - Fehler
24.09.2022 15:30:19
Dennis
Hallo Chris,
leider funktioniert es nicht. Excel blendet es nur ein wenn ich manuell durch die Schritte gehe.
Habe auch meiner Meinung nach die Aktualisierung deaktiviert. Oder hab ich die falsche. Habe es unter Daten abrufen, Abfrageoptionen, Daten laden, Hintergrunddaten, Download im Hintergrund nie zulassen gemacht.
Viele Grüße
Dennis
Anzeige
AW: Makro warten bis refresh - Fehler
26.09.2022 08:47:11
ChrisL
Hi Dennis
Menü Daten, vorhandene Verbindungen
Für jede einzelne Verbindung die rechte Maustaste.
- Verbindungseigenschaften bearbeiten
- Aktualisierung im Hintergrund zulassen - deaktivieren
cu
Chris
;
Anzeige
Anzeige

Infobox / Tutorial

Excel VBA: Warten bis der Refresh abgeschlossen ist


Schritt-für-Schritt-Anleitung

  1. Makro erstellen: Öffne den VBA-Editor in Excel (ALT + F11) und erstelle ein neues Modul.

  2. Code hinzufügen: Füge den folgenden Code ein, um zu warten, bis der Refresh abgeschlossen ist. Hier wird die Application.CalculationState verwendet, um sicherzustellen, dass alle Berechnungen abgeschlossen sind.

    Sub Auswertung()
       Application.ScreenUpdating = False
       Dim ta As Worksheet
       Set ta = Worksheets("Auswertung")
       ThisWorkbook.RefreshAll
       Do
           DoEvents
       Loop Until Application.CalculationState = xlDone
       If ta.Cells(5, 12) > 0 Then
           ta.Shapes("Rounded Rectangle 1").Visible = True
       Else
           ta.Shapes("Rounded Rectangle 1").Visible = False
       End If
       Application.ScreenUpdating = True
    End Sub
  3. Verbindungseigenschaften anpassen: Stelle sicher, dass die Hintergrundaktualisierung deaktiviert ist. Gehe zu Daten > Vorhandene Verbindungen, klicke mit der rechten Maustaste auf jede Verbindung und deaktiviere die Option „Aktualisierung im Hintergrund zulassen“.

  4. Makro ausführen: Führe das Makro aus, um zu überprüfen, ob die Schaltfläche korrekt ein- oder ausgeblendet wird, abhängig von den Zelleninhalten.


Häufige Fehler und Lösungen

  • Problem: Das Makro wartet nicht richtig und zeigt immer 0 an.
    Lösung: Überprüfe die Application.CalculationState, um sicherzustellen, dass alle Berechnungen abgeschlossen sind, bevor du die Zelle überprüfst.

  • Problem: Der Refresh erfolgt nicht sofort.
    Lösung: Stelle sicher, dass die Hintergrundaktualisierung deaktiviert ist. Dies kann das Warten auf den Refresh erheblich beschleunigen.


Alternative Methoden

Eine alternative Methode zur Verwendung von Application.CalculationState ist die Nutzung des Worksheet_Calculate Ereignisses. Hier ist ein Beispiel, das du im Modul des Arbeitsblattes „Avisdaten“ hinzufügen kannst:

Private Sub Worksheet_Calculate()
    With Application
        .EnableEvents = False
        .Calculation = xlCalculationManual
        Worksheets("Auswertung").Shapes("Rounded Rectangle 1").Visible = (Cells(5, 12) > 0)
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
    End With
End Sub

Diese Methode sorgt dafür, dass die Sichtbarkeit der Schaltfläche aktualisiert wird, sobald die Berechnung auf dem Arbeitsblatt abgeschlossen ist.


Praktische Beispiele

  1. Beispiel 1: Wenn du eine Tabelle mit Rechnungen hast, die automatisch aktualisiert werden, kannst du das oben genannte Makro verwenden, um sicherzustellen, dass die Schaltflächen entsprechend der Rechnungsanzahl angezeigt werden.

  2. Beispiel 2: Bei der Arbeit mit Pivot-Tabellen kannst du denselben Ansatz verwenden, um sicherzustellen, dass die Daten vor der Anzeige aktualisiert werden.


Tipps für Profis

  • Debugging: Verwende Debug.Print in deinem Code, um den Status deiner Variablen während der Ausführung zu verfolgen. Dies kann hilfreich sein, um zu verstehen, ob das Warten wirklich funktioniert.

  • Optimierung: Reduziere die Anzahl der Berechnungen, indem du manuelle Berechnungen (xlCalculationManual) verwendest, bevor du die Aktualisierungen vornimmst.

  • Verwendung von Application.Wait: In einigen Fällen kann es sinnvoll sein, eine kurze Pause im Code einzufügen, um sicherzustellen, dass alle Prozesse abgeschlossen sind.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass das Makro nicht einfriert?
Verwende DoEvents in einer Schleife, um sicherzustellen, dass Excel auf Benutzerinteraktionen reagiert.

2. Was tun, wenn die Schaltfläche nicht erscheint?
Stelle sicher, dass die Zelle (5,12) die erwarteten Daten enthält und dass die Sichtbarkeit der Schaltfläche korrekt gesetzt wird. Überprüfe auch die Verbindungseinstellungen für die Datenquelle.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige