Diagramme werden nicht automatisch aktualisiert, wenn sich Daten ändern

9

Hoffentlich ist das ein leichtes. Ich habe eine Reihe von Diagrammen in MS Excel, die auf Daten auf demselben Arbeitsblatt zeigen. Die Daten auf dem Arbeitsblatt werden mithilfe einer VBA-Funktion berechnet. Wenn die Daten von der VBA-Funktion aktualisiert werden, werden die neuen Zahlen nicht in den Diagrammen angezeigt, die auf sie zeigen. Ich habe versucht, Application.Calculate aufzurufen, aber das hat nicht funktioniert. Irgendwelche Gedanken?

UDPATE:

Ich konnte dieses Problem in einem viel kleineren Maßstab reproduzieren. Hier ist wie:

  • Erstellen Sie eine neue Arbeitsmappe
  • Benennen Sie Blatt 1 in "Zusammenfassung"
  • um
  • Benennen Sie Blatt 2 in "Daten"
  • um
  • Öffnen Sie das Übersichtsblatt im VBA-Editor und fügen Sie den folgenden Code ein:

    %Vor%
  • Erstellen Sie ein neues VBA-Modul

  • Fügen Sie den folgenden Code in das neue VBA-Modul ein (Ich entschuldige mich - ich kann Stack Overflow nicht dazu bringen, das richtig für mein Leben zu formatieren - das ist das Beste, was ich dafür tun könnte):
    .

    %Vor%

    .

  • Ändern Sie das Datenarbeitsblatt so, dass es mit dem folgenden Bild übereinstimmt:

  • Wählen Sie Zelle B1 und benennen Sie den Bereich "worksheetDate"
  • Kopieren Sie die Zeilen 1 bis 3 in der folgenden Abbildung:

  • Geben Sie in Zeile 4 unter den Kopfzeilen von "Woche X" die folgende Formel ein

.

%Vor%

Erhöhen des ersten Arguments für die Funktion getWeekValue um eins für jede Woche (z. B. 1 für Woche 1, 2 für Woche 2, 3, für Woche 3 usw.).

  • Erstellen Sie ein Balkendiagramm mit den Zellen A3 bis E4 als Daten
  • Ändern Sie das Datum in der Zelle B2 in ein Datum zwischen dem 01.10.2010 und dem 31.12.2010 und wählen Sie einen anderen Monat als den Monat, der sich derzeit in der Zelle befindet. Zum Beispiel, wenn das Datum der 12/11/2010 ist, ändern Sie es in etwas wie 11/11/2010 oder 10/11/2010. Beachten Sie, dass sowohl die Daten als auch das Diagramm korrekt aktualisiert werden.
  • Ändern Sie das Datum in Zelle B2 Verstärkung. Beachten Sie, dass die Daten aktualisiert werden, das Diagramm jedoch nicht.

Seltsamerweise wird das Diagramm nach einer gewissen Zeit (einige Minuten) endlich aktualisiert. Ich bin mir nicht sicher, ob dies daran liegt, dass ich andere Aktivitäten ausgeführt habe, die das Update ausgelöst haben, oder weil Excel nach einigen Minuten ein Update auslöst.

    
Adam 16.12.2010, 22:50
quelle

7 Antworten

1

Habe gerade die Lösung für dieses Problem gefunden, da ich unter demselben litt.

Ich habe gerade "DoEvents ()" vor dem Drucken oder Exportieren hinzugefügt und das Diagramm wurde aktualisiert.

Beispiel

%Vor%     
Ageel Al-Shayeb 05.04.2015 20:43
quelle
0

Ich habe festgestellt, dass das Aufrufen dieses Unterwerks funktioniert ...

%Vor%

ABER Microsoft warnt davor, bei den nächsten DoEvents abgefangen zu werden, die vor dem Abschluss der ersten DoEvents ausgeführt werden. Dies kann abhängig davon sein, wie oft es ohne Verzögerung zwischen den Anrufen aufgerufen wird. Daher scheint DoEvents als eine Art nicht maskierbarer Interrupt zu fungieren, und die Verschachtelung nicht maskierbarer Interrupts kann dazu führen, dass die Maschine aus mehreren Gründen einfriert, ohne dass eine andere Wiederherstellung als ein Neustart erforderlich ist.

  

(Hinweis: Wenn man die obige Routine nicht häufig und schnell aufruft, kann may nicht verschachtelt werden   ein Problem sein.)

Das folgende Sub unten, das ich von ihrem Vorschlag abgewandelt habe, verhindert dies.

%Vor%

Ich habe den Eindruck, dass die Anzahl der benötigten DoEvents auf der Anzahl der Hintergrundtasks basiert, die auf Ihrem Computer ausgeführt werden, und das Aktualisieren des Diagramms scheint eine Hintergrundaufgabe für die Anwendung zu sein. Ich brauchte nur zwei DoEvents, weil ich die Routine häufig anrufe; Allerdings kann es sein, dass ich es später bei Bedarf aufstocken muss. Ich behalte auch den Mod bei 1000, um den Abstand zwischen jedem DoEvents nicht zu ändern, wie Microsoft vorschlägt, Verschachtelung zu verhindern. Ein möglicher Grund, warum Sie die Zahl von 2000 auf eine höhere Zahl erhöhen möchten, ist, wenn das System die Grafik nicht aktualisiert. Wenn Sie diese Zahl erhöhen, kann die Maschine eine größere Anzahl von Hintergrundereignissen verarbeiten, die DoEvents möglicherweise über mehrere Aufrufe treffen, da sie sich wahrscheinlich auf einem Stapel befinden. Das Ereignis DoEvents darf nur eine bestimmte Anzahl von Zyklen ausführen, bevor es im Stapel platziert wird Nicht behandelte Ereignisse zulassen und zurückgeben, sodass sie beim nächsten Aufruf behandelt werden. Daher die Notwendigkeit für mehrere Anrufe. Ändern Sie dies zu ihrem Beispiel von 150000 scheint nicht zu verlangsamen die Maschine, um auf Nummer sicher zu gehen Sie wollen 150000 zu machen.

Hinweis: Das erste Beispiel Sub mit zwei DoEvents ist wahrscheinlich sicher, abhängig davon, wie oft Sie das Sub aufrufen. Wenn es jedoch zu oft aufgerufen wird, könnte Ihr Computer einfrieren. Ihr Anruf. ; -)

PS: DoEvents wird einer Ihrer besten Aufrufe, wenn Sie viele verschachtelte Schleifen erstellen und das Programm sich nicht wie erwartet verhält. Zum Glück ist dies in allen Apps verfügbar, die VBA verwenden!

    
Cyberchipz 21.07.2017 12:21
quelle
0

Zum Beispiel:

%Vor%

    
Dr. belisarius 17.12.2010 00:03
quelle
0

Diese Lösung hat für mich funktioniert. Fügen Sie für das beanstandete Arbeitsblatt Folgendes hinzu:

%Vor%     
SLeepdepD 07.09.2012 17:03
quelle
0

Am Ende meiner Änderungen schließe ich die Arbeitsmappe und öffne sie erneut. das scheint der einfachste und zuverlässigste Weg zu sein, um alles für mich zu aktualisieren.

    
Martin Trummer 07.03.2014 18:29
quelle
0

Es ist möglich, dass das Problem die Argumentliste von getWeekValue ist, die nur die Wochennummer und den Datenstrom enthält.

Wenn Sie ein drittes Argument, worksheetDate, hinzufügen, wird die Neuberechnungs-Engine von Excel an der Seite des Kopfes mit der Tatsache getroffen, dass getWeekValue den Wert in worksheetDate verwendet. In Ihrer aktuellen Implementierung wird diese Tatsache nur im VBA-Code gehalten, wo sie für die Neuberechnungs-Engine wahrscheinlich nicht sichtbar ist.

Ich schreibe das so hedgingly, weil ich nicht in die inneren Abläufe der Neuberechnungsmaschine eingeweiht bin. (Vielleicht jemand, der das besser weiß, als ich meine Spekulationen kommentieren kann) Aber ich habe einen Test gemacht, bei dem getWeekValue dieses dritte Argument hat und das Diagramm korrekt neu berechnet. Ein weiterer Vorteil dieses Ansatzes: Sie können alle anderen VBA-Event-Management entfernen. -HTH

    
user3716832 11.06.2014 14:18
quelle
-2

Nur eine Idee: Fügen Sie in Ihrem Worksheet_Change Sub als erste Zeile ein:

%Vor%

um selbstzündende Ereignisse zu vermeiden ....
Natürlich setze es am Ende des Sub auf True zurück.

    
Patrick Honorez 17.12.2010 22:11
quelle

Tags und Links