Anzeige
Archiv - Navigation
1948to1952
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

Änderung von Variablen innerhalb einer bestimmten Zeit

Änderung von Variablen innerhalb einer bestimmten Zeit
25.10.2023 18:14:57
Micha
Hallo liebe VBA Profis, für einen Lösungsansatz habe diesen Thread bereits durchsucht, da ich allerdings kein Profi bin, habe ich möglicherweise auch nicht den richtigen Suchbegriff verwendet. Vielleicht könnt ihr mir weiterhelfen.

In zwei Zeilen (A1:A30) und (B1:B30) stehen jeweils 30 Zahlen, die sich permanent verändert. In diesen zwei Zeilen befinden sich Formeln, die sich auf Grund von anderen Zellen ändern. Das Ziel ist es, für jede Zeile A + B herauszufinden, wie viele Zahlen sich dort innerhalb von 5 Sekunden verändern. Nach den 5 Sekunden, sollte automatisch eine neue Berechnung durchgeführt werden, die dann jeweils unter (A32) und (B32) ausgegeben werden sollte. Um weiterzukommen habe mir auch schon einen VBA-Kurs besorgt, der mir leider auch keine Lösung zeigen konnte. Ich danke euch sehr für die Hilfe. Liebe Grüße Micha

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Änderung von Variablen innerhalb einer bestimmten Zeit
25.10.2023 18:21:38
bigmayo
Moin Micha,

Um die Anzahl der Veränderungen in den Zahlen in den Spalten A und B innerhalb eines Zeitraums von 5 Sekunden zu überwachen und die Ergebnisse in den Zellen A32 und B32 auszugeben, kannst du VBA verwenden. Hier ist ein allgemeiner Ansatz, den du anpassen kannst:

Erstelle ein neues Modul:
Öffne deine Excel-Datei und drücke Alt + F11, um den Visual Basic for Applications (VBA)-Editor zu öffnen.
Klicke im VBA-Editor auf "Einfügen" und wähle "Modul", um ein neues Modul zu erstellen.
Füge den folgenden VBA-Code in das Modul ein:
Dim LastUpdateTime As Double


Sub ÜberwacheVeränderungen()
Dim ARange As Range
Dim BRange As Range
Dim ACell As Range
Dim BCell As Range
Dim ChangeCountA As Integer
Dim ChangeCountB As Integer
Dim CurrentTime As Double

' Definiere die Zeilenbereiche in Spalte A und B (A1:A30 und B1:B30)
Set ARange = ThisWorkbook.Sheets("DeinBlatt").Range("A1:A30")
Set BRange = ThisWorkbook.Sheets("DeinBlatt").Range("B1:B30")

' Aktuelle Zeit in Sekunden seit 1900-01-01 00:00:00
CurrentTime = CDbl(Now)

' Prüfe, ob 5 Sekunden vergangen sind
If CurrentTime - LastUpdateTime >= 5 / 86400 Then
' Setze die letzte Aktualisierungszeit
LastUpdateTime = CurrentTime

' Überwache Veränderungen in Spalte A
ChangeCountA = 0
For Each ACell In ARange
If ACell.Value > ACell.Offset(-1, 0).Value Then
ChangeCountA = ChangeCountA + 1
End If
Next ACell

' Überwache Veränderungen in Spalte B
ChangeCountB = 0
For Each BCell In BRange
If BCell.Value > BCell.Offset(-1, 0).Value Then
ChangeCountB = ChangeCountB + 1
End If
Next BCell

' Gib die Anzahl der Veränderungen in Zellen A32 und B32 aus
ThisWorkbook.Sheets("DeinBlatt").Range("A32").Value = ChangeCountA
ThisWorkbook.Sheets("DeinBlatt").Range("B32").Value = ChangeCountB
End If
End Sub

Bitte ersetze "DeinBlatt" durch den Namen deines Arbeitsblatts.

Trigger für die Aktualisierung:
Du kannst den Code manuell ausführen, indem du in Excel zu "Entwicklertools" -> "Makros" gehst, das Makro "ÜberwacheVeränderungen" auswählst und auf "Ausführen" klickst.
Um die Aktualisierung automatisch alle 5 Sekunden auszulösen, kannst du den VBA-Editor öffnen und in "Eigenschaften-Fenster" (F4) deines Arbeitsblatts den Code "ÜberwacheVeränderungen" auswählen und "Wiederhole" auf "wiederholen" einstellen.
Dieser Code überwacht Veränderungen in den Zellen A1:A30 und B1:B30 und gibt die Anzahl der Veränderungen in den Zellen A32 und B32 aus. Beachte, dass die Zeit in Excel als Bruchteil eines Tages (1 Tag = 1) gemessen wird, daher wird 5 Sekunden als 5 / 86400 angegeben. Du kannst diesen Wert anpassen, um den gewünschten Zeitraum zu definieren.

Gruß
Anzeige
AW: Änderung von Variablen innerhalb einer bestimmten Zeit
25.10.2023 19:14:08
Micha
Hallo bigmayo, erst einmal vielen Dank für diese professionelle Arbeit. Ich bin echt überrascht, wie schnell und effizient du das programmiert hast. Auch deine Anleitung ist perfekt geschrieben, da habe ich noch sehr viel zu lernen. 😉 Ich habe alles so ausgeführt wie beschrieben, doch als ich den Code manuell ausführte kam, während sich meine Zeilen änderten: Anwendungs- und objektorientierter Fehler. Sobald ich die Daten ausschaltete und den Code manuell ausführte, kam die Zahl 400. Hast du eine Idee, was ich falsch gemacht haben könnte. Liebe Grüße Michael
AW: Änderung von Variablen innerhalb einer bestimmten Zeit
25.10.2023 19:33:50
bigmayo
Moin Micha,

Der Fehlercode "400" deutet auf einen VBA-Programmierfehler hin. Um das Problem zu beheben, musst du nochmal in den Code sehen. Mögliche Ursachen:

1. Stelle sicher, dass du den Blattnamen ("DeinBlatt") in den Zeilen, die auf das Blatt zugreifen, an deinen tatsächlichen Blattnamen anpasst. Achte darauf, dass der Blattnamen in doppelten Anführungszeichen steht, wenn Leerzeichen oder Sonderzeichen enthalten sind.

2. Überprüfe, ob der Code in einem Standardmodul (Module) und nicht in einem Klassenmodul oder Objektmodul geschrieben ist.

3. Stelle sicher, dass keine anderen Excel-Dateien oder Add-Ins das Makro stören oder beeinflussen.

4. Achte darauf, dass du den Code im VBA-Editor korrekt eingefügt hast, und dass keine Teile fehlen oder falsch formatiert sind.

Wenn das Problem weiterhin besteht, wäre es hilfreich, mehr Informationen zu haben, um die Ursache des Fehlers genauer zu identifizieren. Du könntest den genauen Fehlerbeschreibungstext überprüfen, der normalerweise zusammen mit der Fehlermeldung angezeigt wird. Dies könnte zusätzliche Hinweise auf die Fehlerursache liefern.

Gruß
Anzeige
AW: Änderung von Variablen innerhalb einer bestimmten Zeit
26.10.2023 08:11:21
Micha
Moin bigmayo,

vielen Dank für deine schnelle Antwort.

Ich hatte einen Laufzeitfehler 1004 in folgenden Zeilen

If ACell.Value > ACell.Offset(-1, 0).Value Then
If BCell.Value > BCell.Offset(-1, 0).Value Then

Da der Wert in der Zeile 1 betrug habe ich die Zeilen geändert

If ACell.Value > ACell.Offset(1, 0).Value Then
If BCell.Value > BCell.Offset(1, 0).Value Then

danach erst erschienen die Zellen A32 und B32 in Tabelle1.

F8 läuft nun korrekt durch die Schleifen.

Die automatische Aktualisierung bekomme ich nicht gestartet, da ich im Eigenschaftenfenster unter "ÜberwacheVeränderungen" kein "Wiederhole" oder "wiederholen" finde. Allerdings bin ich absoluter Neuling und habe nur Basiswissen. Ich habe mal ein Arbeitsblatt erstellt, dass ich dir hochlade.

Vielen Dank für deine Mühe. Liebe Grüße Michael

https://www.herber.de/bbs/user/163742.xlsm
Anzeige
AW: Änderung von Variablen innerhalb einer bestimmten Zeit
26.10.2023 08:49:18
bigmayo
Moin Micha,

Was die automatische Aktualisierung betrifft, verstehe ich deine Verwirrung. Ich habe nicht daran gedacht, dass die Möglichkeit Makros in einer Schleife auszuführen standardmäßig in Excel nicht verfügbar ist, um die Ausführung unbegrenzter Schleifen zu verhindern und die Leistung nicht zu beeinträchtigen.

Allerdings kannst du die Aktualisierung automatisch über eine andere Methode erreichen. Hier ist, wie du es machen kannst:

1. Drücke "Alt + F11", um den VBA-Editor zu öffnen.
2. Klicke oben auf "Einfügen" und wähle "Modul", um ein neues Modul zu erstellen.
3. Füge den folgenden Code in das Modul ein:

Sub AutomatischeAktualisierung()

Application.OnTime Now + TimeValue("00:00:05"), "ÜberwacheVeränderungen"
End Sub


4. Drücke "Alt + F8" und wähle "AutomatischeAktualisierung" aus der Liste aus, um das Makro auszuführen.
5. Dieses Makro wird alle 5 Sekunden das "ÜberwacheVeränderungen"-Makro aufrufen, um die Aktualisierung zu erreichen.
Bitte stelle sicher, dass das "ÜberwacheVeränderungen"-Makro korrekt funktioniert, wie zuvor besprochen. Beachte auch, dass das automatische Aktualisieren von Makros die Leistung deiner Excel-Datei beeinflussen kann, insbesondere wenn es viele Daten gibt.

Gruß
Anzeige
AW: Änderung von Variablen innerhalb einer bestimmten Zeit
26.10.2023 13:04:39
Micha
Hallo bigmayo,

lieben Dank für deine Antwort und Hilfe. Wenn ich deinen neuen Code in einem neuen Modul 2 eintrage, müssen dann nicht diese Codezeilen in Modul 1 gelöscht werden?

' Aktuelle Zeit in Sekunden seit 1900-01-01 00:00:00
CurrentTime = CDbl(Now)

' Prüfe, ob 5 Sekunden vergangen sind
If CurrentTime - LastUpdateTime >= 5 / 86400 Then
' Setze die letzte Aktualisierungszeit
LastUpdateTime = CurrentTime

Zusätzlich wäre es hilfreich zu wissen ob diese Variante

If ACell.Value > ACell.Offset(-1, 0).Value Then
If BCell.Value > BCell.Offset(-1, 0).Value Then

oder dieser Code

If ACell.Value > ACell.Offset(1, 0).Value Then
If BCell.Value > BCell.Offset(1, 0).Value Then

enthalten sein muss. Vielen Dank noch einmal für deine großartige Unterstützung. Liebe Grüße Michael
Anzeige
AW: Änderung von Variablen innerhalb einer bestimmten Zeit
26.10.2023 13:32:55
bigmayo
Moin Micha,

du kannst das alte Modul überschreiben, löschen oder auch stehen lassen und nicht benutzen. Es wird nur das ausgeführt was du aktivierst.

Da der Code rückwärts arbeitet sollte es mit der Codezeile mit negativem Vorzeichen funktionieren.

Gruß
AW: Änderung von Variablen innerhalb einer bestimmten Zeit
27.10.2023 10:59:02
Micha
Hallo bigmayo,
ich hoffe du kannst mir nochmal helfen. Wenn Excel die Ausführung unbegrenzter Schleifen verhindert, müsste doch die For Schleife gelöscht werden. Dazu habe ich viele Varianten versucht, die für mich als Anfänger, immer wieder Fehler auslösten. Wärst du so freundlich und würdest mir kurz alle Code Zeilen löschen, die nicht erforderlich sind. Dann kann ich zwei Module erstellen und es müsste laufen. Tausend Dank für deine Hilfe. Liebe Grüße Micha

Dim LastUpdateTime As Double

Sub ÜberwacheVeränderungen()
Dim ARange As Range
Dim BRange As Range
Dim ACell As Range
Dim BCell As Range
Dim ChangeCountA As Integer
Dim ChangeCountB As Integer
Dim CurrentTime As Double

' Definiere die Zeilenbereiche in Spalte A und B (A1:A30 und B1:B30)
Set ARange = ThisWorkbook.Sheets("Tabelle1").Range("A1:A30")
Set BRange = ThisWorkbook.Sheets("Tabelle1").Range("B1:B30")

' Aktuelle Zeit in Sekunden seit 1900-01-01 00:00:00
CurrentTime = CDbl(Now)

' Prüfe, ob 5 Sekunden vergangen sind
If CurrentTime - LastUpdateTime >= 5 / 86400 Then
' Setze die letzte Aktualisierungszeit
LastUpdateTime = CurrentTime

' Überwache Veränderungen in Spalte A
ChangeCountA = 0
For Each ACell In ARange
If ACell.Value > ACell.Offset(-1, 0).Value Then
ChangeCountA = ChangeCountA + 1
End If
Next ACell

' Überwache Veränderungen in Spalte B
ChangeCountB = 0
For Each BCell In BRange
If BCell.Value > BCell.Offset(-1, 0).Value Then
ChangeCountB = ChangeCountB + 1
End If
Next BCell

' Gib die Anzahl der Veränderungen in Zellen A32 und B32 aus
ThisWorkbook.Sheets("Tabelle1").Range("A32").Value = ChangeCountA
ThisWorkbook.Sheets("Tabelle1").Range("B32").Value = ChangeCountB
End If
End Sub

Sub AutomatischeAktualisierung()
Application.OnTime Now + TimeValue("00:00:05"), "ÜberwacheVeränderungen"
End Sub
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige