Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1884to1888
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datei mit Bedingung aktualisieren

Datei mit Bedingung aktualisieren
28.05.2022 17:42:16
Max_Danger
Hallo zusammen,
ich habe eine Frage für unsere VBA Profis. :)
Meine Excel Datei, soll sich alle 5 Sek. über die Funktionen "RefreshAll" & anschließend "PivotCacheRefresh" aktualisieren.
Wie könnte ich es umsetzen, dass es folgende Bedingung erfüllt.
Wenn in Blatt "Tabelle1" Zelle "C2" steht "Ja", soll das Aktualisierungsmakro automatisch stoppt, sobald sich etwas in dem Blatt "Tabelle1" verändert. Wenn in Zelle "C2" "Nein" steht, soll es einfach weiter laufen.
Hat jemand eine Idee, wie man es umsetzen könnte?
Vielen Dank
Grüße
Max

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datei mit Bedingung aktualisieren
30.05.2022 06:26:12
Max_Danger
Hallo zusammen,
mein ursprünglicher Beitrag, war ein bisschen knapp verfasst.
Anbei ein paar detaillierte Informationen, wie die Aktualisierung aufgebaut ist und wie ich es gerne optimieren möchte. :)
Ich habe insgesamt fünf Makros in der Datei im Einsatz.
Über das erste Makro werden die anderen Makros der Reihe nach ausgeführt.
Anschließend wird der Ablauf durch das Makro "StartEs" wieder erneut gestartet.
Es ist somit eine Endlosschleife.
Ich habe einen Button, auf dem ich das Makro stoppen könnte.
Da sich die Excel Datei jedoch ständig, aktualisiert ist es sehr schwierig die Aktualisierung zu stoppen.
In der Regel stoppe ich es aktuell, durch drücken der "ESC" Taste.
Jetzt stellt sich mir die Frage, ob es möglich ist, das Makro automatisch zu stoppen, wenn ein bestimmtes Ereignis eintritt.
-> Sprich es hat sich etwas in Tabelle1 Spalte C-H und Zeile 7-13 geändert.
Lässt sich so etwas überhaupt umsetzen?
Das Makro stoppt selbständig, sobald das entsprechende Ereignis eintritt und ich kann es anschließend wieder manuell starten?
1. Makro

Option Explicit
Sub StartMakro()
Datenactual
PivotRefresh
StartEs
End Sub
2. Makro

Option Explicit
Sub Datenactual()
Windows("Daten.xlsm").Activate
Application.DisplayAlerts = False
ActiveWorkbook.RefreshAll
End Sub
3. Makro

Option Explicit
Sub PivotRefresh()
Windows("Daten.xlsm").Activate
Dim pc As PivotCache
For Each pc In ActiveWorkbook.PivotCaches
If pc.SourceType = xlExternal Then pc.BackgroundQuery = False
pc.Refresh
Next
End Sub
4. Makro
Option Explicit
Dim iTimerSet As Double
Public Sub StartEs()
iTimerSet = Now + TimeValue("00:00:01")
Application.OnTime iTimerSet, "StartMakro"
End Sub
5. Makro

Public Sub StopEs()
Application.OnTime iTimerSet, "StartMakro", , False
End Sub
Über Tipps & Tricks würde ich mich sehr freuen.
Viele Grüße
Max
Anzeige
AW: Datei mit Bedingung aktualisieren
30.05.2022 07:19:10
Oberschlumpf
Hi Max,
erst mal die Frage: Wieso MUSS denn alles alle 5 Sek. aktualisiert werden?
Kommen denn innerhalb dieser 5 Sek. immer wieder neue Daten rein? Manuell wirst du es wohl nicht schaffen.
Nun denn, meine einzige Idee, die mir einfällt, wäre (ungetestet) im Change-Ereignis von "Tabelle1" für den Zellbereich "C7:H13" das hier:

Private Sub Worksheet_Change(ByVal Target As Range)
If InStr(Target.Address, ";") > 0 Or _
InStr(Target.Address, ":") > 0 Then Exit Sub
If Not Intersect(Target, Range("C7:H13")) Is Nothing Then
StopEs
End If
End Sub
Da ich aber nicht weiß, ob sich meine Idee "negativ" auswirken kann, aus welchem Grund auch immer (meine Idee ist ja ungetestet), lass ich den Thread mal offen.
Ciao
Thorsten
Anzeige
AW: Datei mit Bedingung aktualisieren
30.05.2022 11:56:49
Max_Danger
Hi Thorsten,
vielen Dank für Deine Hilfestellung.
Ja, leider müssen die Daten die ganze Zeit aktualisiert werden.
Ich benötige die Informationen in Echtzeit.
Deine Idee hat leider noch nicht das gewünschte Ergebnis geliefert.
Das Makro lässt sich dadurch nicht stoppen.
Hast Du vielleicht noch eine Idee, woran es liegen könnte? :)
Viele Grüße
Max
AW: Datei mit Bedingung aktualisieren
30.05.2022 12:07:43
Max_Danger
Hi Thorsten,
mir ist noch etwas eingefallen, vielleicht liegt es auch an meinem Aufbau?
Da ich die Aktualisierung auf 0 Sekunden gestellt habe und die Datei somit die ganze Zeit ohne Unterbrechnung durch läuft, kommt das Makro "StopEs" vlt. gar nicht zum Zuge. Könnte das evtl. der Grund sein?
Wenn es die ganze Zeit durch läuft kann ich meinen Button "StopEs" auch nicht betätigen, da Hintergrundabfragen deaktiviert sind und ich somit in der Datei nichts machen kann, bis ich das Makro gestoppt habe.
Das geht in diesem Falle nur durch drücken der "ESC" Taste.
Könnte man mit deinem Code Snipsel auch das drücken der "ESC" Taste simulieren?
Also wenn etwas in den entsprechenden Zeilen erscheint, soll die "ESC" Taste gedrückt werden?
Vielen Dank
&
Grüße
Max
Anzeige
AW: Datei mit Bedingung aktualisieren
30.05.2022 12:47:18
Oberschlumpf
Hi,
ich hatte ja geschrieben, dass ich nur die eine Idee habe.
Vielleicht fällt mir/wem anders noch was anderes ein, wenn du uns bitte mal eine Bsp-Datei mit Bsp-Daten zeigst.
Wichtig ist, dass in der Bsp-Datei genau das Gleiche passiert (Code) wie im Original.
Ciao
Thorsten
AW: Datei mit Bedingung aktualisieren
30.05.2022 13:31:55
Max_Danger
Hi Thorsten,
danke für die Rückmeldung.
Eine Beispieldatei lässt sich leider nicht so einfach zur Verfügung stellen.
Die Daten kommen von meinem lokalen NAS.
Ich muss mal schauen, ob ich irgendwie ein ähnliches Szenario nachbauen kann.
Dafür muss ich mir aber erst einmal eine Datenquelle suchen, die sich ständig aktualisiert. :D
VG
Max
Anzeige
AW: Datei mit Bedingung aktualisieren
30.05.2022 14:33:38
Oberschlumpf
Hi,
ich denke, folgendes könnte schon reichen:
- Haup-Bsp-Datei mit den Makros erstellen
- 1 oder 2 Neben-Bsp-Dateien mit Bsp-Daten erstellen (aus diesen Neben-Dateien werden dann die Daten in Haupt-Datei per Makros aktualisiert)
- alle Dateien per 7ZIP in eine ZIP-Datei packen
- ZIP-Datei dann hier per Upload zeigen
vom Prinzip her ist es doch egal, ob in Neben-Datei(en) für unser Bsp-Szenario - nicht andauernd - neue Daten vorhanden sind; hauptsache deine Makros "feuern" immer wieder den Neustart der Makros an - ach ja, auch dein Stop-Makro muss enthalten sein
Wer weiß, vllt findet ja, mit Hilfe deiner Bsp-Dateien, irgdwer ne Lösung.
Ciao
Thorsten
...warte auf mich nich zeitnah, bin jetzt n paar Std nich dabei :-)
Anzeige
AW: Datei mit Bedingung aktualisieren
30.05.2022 20:56:23
Max_Danger
Hallo Thorsten,
danke für dein Engagement.
Ich habe jetzt eine kleine Simulation der Abfrage nachgebaut.
Es wäre wirklich genial, wenn jemand dafür eine Lösung finden würde.
Ich bin da absolut überfragt.
Das Simulationsumfeld ist unter folgendem Link abrufbar:
https://www.herber.de/bbs/user/153330.zip
VG
Max
AW: Datei mit Bedingung aktualisieren
31.05.2022 01:18:24
Oberschlumpf
Hi
im Makro PivotRefresh, direkt unterhalb von pc.Refresh schreib noch den Befehl DoEvents hin.
Jetzt ist es nicht nur mit ESC möglich, den Makro-Dauerlauf zu stoppen, nun kannst du auch auf den Stopp-Button klicken.
Bei mir kommt es zwar sowohl bei ESC, als auch bei Button-Klick zu einem Laufzeitfehler. Aber ich denk, das liegt an der Bsp-Datei, die irgdwo ein Problem mit den Pivot-Abfragen hat. Ich kenn mich mit Pivot nicht so aus, konnte den Fehler nicht beseitigen.
Aber nun hab ich das Problem gelöst, dass du vorher nicht den Stopp-Button klicken konntest.
Ciao
Thorsten
Anzeige
AW: Datei mit Bedingung aktualisieren
31.05.2022 02:17:54
Max_Danger
Hi Thorsten,
danke für den Tipp.
Das funktioniert schon einmal prächtig.
Den Laufzeitfehler, erhalte ich in meiner ursprünglichen Datei jedoch auch.
Das ist aber kein neues Ereignis. :)
Den Fehler habe ich auch schon immer erhalten, wenn ich die "ESC" Taste gedrückt habe.
Jetzt ist nur noch die Frage offen, ob sich das Makro automatisch stoppen lässt, wenn in den entsprechenden Zeilen ein Wert erscheint?
Meinst Du das lässt sich dort irgendwie einbauen?
Vielen Dank nochmal!!
Grüße
Max
AW: Datei mit Bedingung aktualisieren
31.05.2022 02:40:53
Oberschlumpf
Hi,
das is doch schon (in der Bsp-Datei zumindest) eingebaut.
Während die Makros mit DoEvents in Dauerschleife liefen, hatte ich einfach mal in Zelle C7 (da steht eigtl ne Formel drin) etwas eingebeben - und schwupps - Makro hat sich beendet.
Dann wieder auf Start-Button geklickt und n paar Sek später Klick auf Stop und wieder beendet.
Ciao
Thorsten
Anzeige
AW: Datei mit Bedingung aktualisieren
31.05.2022 02:58:32
Max_Danger
Hallo Thorsten,
stimmt, wenn ich dort manuell etwas eintrage stoppt es tatsächlich.
Leider stoppt es aber nicht wenn die Formel ein Ergebnis liefert.
Ziel ist es, dass die Formel einen Wert liefert, wie in der Testumgebung, und sobald ein Wert geliefert wird das Makro gestoppt.
Woran könnte es liegen?
VG
Max
bitte wer anders
31.05.2022 10:01:04
Oberschlumpf
Hi,
ja, das mit dem Change-Ereignis funktioniert leider nur bei manueller Zellwertänderung im angegebenen Bereich - Änderung durch Formel greift da nicht, hab ich nun auch festgestellt.
Überwachen müsste man nun das Calculate-Ereignis (reagiert z Bsp bei Änderung durch Formel)
Ich hab einiges ausprobiert, z Bsp
- bei Klick auf Start werden alle Werte aus Bereich "C7:H13" einer public Array-Variablen zugewiesen
- bei jeder Calculate-Änderung werden nun die "alten" Werte in Array mit vllt neuen Werten in "C7:H13" verglichen
...wenn auch nur ein Vergleich feststellt, dass beide Werte nicht identisch sind, soll eigentlich das Stop-Makro gestartet werden
funktioniert aber irgdwie nicht.
Nun hab ich auch keine Ideen mehr.
(auch nich, wenn du vllt diesen letzten Hinweis "überliest" und fragen solltest "hast du vllt noch ne Idee")
Ciao
Thorsten
...weiter viel Erfolg...
Anzeige
AW: Idee dazu?
31.05.2022 11:46:31
Heli
Hi zusammen,
könnte man nicht vor dem jeweiligen Restart des Makros prüfen ob sich der Wert im Zielbereich geändert hat? Das wäre unabhängig von Formel oder Eingabe...
Also Wert in Variable wegschreiben und vor dem Restart dagegen prüfen?
Nur als Idee...
VG, Heli
AW: Idee dazu?
31.05.2022 14:53:02
Max_Danger
Hallo zusammen,
@Thorsten: Zu erst einmal Vielen Dank für Deinen Einsatz eine Lösung für das Problem zu finden.
@all: Ich denke über den Ansatz von Heli könnte es klappen.
Leider fehlt mir das entsprechende Know How, wie ich es umsetzen könnte.
Ich habe einen Beitrag auf einer anderen Seite gefunden, der meiner Meinung nach das gleiche Prinzip anwendet.
http://www.office-loesung.de/ftopic641137_0_0_asc.php
Es sollte also nach jedem Durchlauf überprüft werden, ob ein Ergebnis in einem Feld (Bsp. A1) steht.
Wenn Zelle "", dann neuen Durchgang starten, wenn Zelle "", dann stoppen.
Hat jemand eine Idee, wie ich es einbauen kann?
Vielen Dank euch allen!
Grüße
Max
Anzeige
AW: Idee dazu?
31.05.2022 16:22:21
Heli
Hi,
da gibt's verschiedene Möglichkeiten, habe mal was mit Summe des Bereichs hergenommen - da müsste Dein Makro (vom anfänglichen Post) in etwa so umgebaut werden:

Sub StartMakro()
Datenactual
PivotRefresh
If WorksheetFunction.Sum(Range("C7:H13")) = 0 Then
StartEs
Else
StopEs
End if
End Sub

AW: Idee dazu?
31.05.2022 18:12:25
Max_Danger
Hi Heli,
genau das ist die Lösung.
Super Klasse!
Vielen Vielen Dank an alle Helfer!
Bezüglich der Lösung, habe ich noch eine Frage.
Liese sich die Abfrage auch variabel einstellen?
Angenommen das Makro stoppt nun, weil in "C7" ein Ergebnis erschienen ist.
Anschließend starte ich das Makro wieder, möchte aber dass es das Ergebnis in "C7" ignoriert, bis ein anderes Ergebnis erscheint und dann erst wieder stoppt.
Es müsste also eine Bedingung implentiert werden "C7:H13" ungleich "leer" und den aktuellen Werten.
Erst dann soll es wieder stoppen.
Geht so etwas?
Zusätzlich habe ich noch das Problem mit dem Laufzeitfehler "1004 - Die Methode On Time für das Objekt _Application ist fehlgeschlagen".
Hat einer eine Idee woran es liegen könnte?
Die Fehlermeldung habe ich auch schon bekommen, als ich das Makro manuell gestoppt habe.
VG
Max
AW: Idee dazu?
31.05.2022 18:30:28
Heli
Hallo Max,
wenn das Variabel sein soll bzw. immer auf eine Veränderung reagieren soll könntest Du das so machen:
Wert der Zellen in einer Variable speichern
Prüfen ob sich was ändert
Makro anhalten wenn Wert anders als vor der Aktualisierung

Sub StartMakro()
Dim dblPruefung as Double
dblPruefung = WorksheetFunction.Sum(Range("C7:H13"))
Datenactual
PivotRefresh
If WorksheetFunction.Sum(Range("C7:H13")) = dblPruefung Then
StartMakro
Else
StopEs
End if
End Sub
Den Laufzeitfehler bekommst Du meiner Einschätzung nach weil die Variable iTimerSet nicht global deklariert ist - also statt Dim iTimerSet As Double mal mit Public iTimerSet As Double versuchen.
Viel Erfolg! H.
AW: Idee dazu?
31.05.2022 19:41:24
Max_Danger
Hallo Heli,
das ist wirklich spitze.
Wirklich genial deine Lösung.
Es läuft jetzt weiter wenn ich es erneut starte.
Jedoch stoppt es noch wenn das Ergebnis "verschwindet" sprich der Wert auf 0 geht.
Es wäre noch schön wenn das Makro dann weiter läuft.
Also die Bedingung Kleiner oder gleich Summe, dann weiter laufen, wenn größer dann Stop.
Kann man zwei Bedingungen hinterlegen?
Dann müsste es doch funktionieren oder?
Ergebnis weg (Makro läuft weiter) oder Ergebnis bleibt unverändert (Makro läuft weiter), wenn Ergebnis größer, hält das Makro an.
Das mit dem Laufzeitfehler hat leider noch nicht geklappt.
In einem anderen Beitrag bin ich auf diesen Hinweis gestoßen...
"...Fehler war, dass ich zum einen den ersten Timer per Makro beendem wollte, obwohl dieser schon abgelaufen war. Weiterhin startete der zweite Timer erst, nachdem die UF geschlossen wird, da diese vor Start des Timers geladen wurde.
Habe generell festgestellt, dass die Reihenfolge von starten und beenden der OnTime-Funktion besonderer Beachtung bedarf."

http://www.office-loesung.de/ftopic641137_0_0_asc.php
Könnte das auch bei mir zu dem Laufzeitfehler führen?
Vielen Dank nochmal für deine tolle Hilfe! :)
Grüße
Max
AW: Idee dazu?
31.05.2022 21:00:51
Max_Danger
Ok, das Problem mit den kleineren Werten konnte ich ganz einfach mit

lösen. :)
Jetzt steht nur noch die Fragestellung bezüglich des Laufzeitfehlers im Raum.
Hat da vielleicht noch jemand eine Idee? :))
Viele Grüße
Max
AW: Idee dazu?
01.06.2022 08:25:57
Heli
Hi Max,
da das Makro zur Aktualisierung in Dauerschleife läuft würde ich einfach ohne Timer arbeiten, dann dürfte das Problem nicht auftreten. Vermutlich überholt sich der Code da die Aktualisierung länger als der Timer (1 Sekunde) braucht. Hier mal eine Möglichkeit zum ausprobieren:

Sub StartMakro()
Dim dblPruefung as Double
Neustart:
dblPruefung = WorksheetFunction.Sum(Range("C7:H13"))
Datenactual
PivotRefresh
If WorksheetFunction.Sum(Range("C7:H13")) 

VG, Heli
AW: Idee dazu?
01.06.2022 16:52:31
Max_Danger
Hi Heli,
super klasse.
Das funktioniert hervorragend.
Richtig genial, jetzt läuft alles so wie es soll!
Vielen vielen Dank!!
Grüße
Max

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige