Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1360to1364
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

VBA Code funktioniert nicht

VBA Code funktioniert nicht
28.05.2014 19:34:12
Jürgen
Ich möchte mit dem folgenden VBA Code erreichen, dass der Countdown in Zelle A32 bei 00:00:00 gestoppt wird, wenn die Zeiten in den Zellen A30 (Zielzeit) und A31 (aktuelle Uhrzeit) gleich sind. Das funktioniert aber nicht, die aktuelle Zeit läuft weiter. Wie ist der richtige Befehl?
Sub UpdateClock()
Worksheets("Tabelle1").Range("A31").Calculate
Cells(31, 1) = Now
Call StartClock
If Cells(30, 1) = Cells(31, 1) Then
Call Zeitmakro1
End If
End Sub
Sub StartClock()
gdNextTime = Now + TimeSerial(0, 0, 1)
Application.OnTime earliesttime:=gdNextTime, procedure:=gsMacro, schedule:=True
End Sub
Sub Zeitmakro1()
ThisWorkbook.Worksheets("Tabelle1").Range("A31") = Format(Now, "hh:mm:ss")
Worksheets("Tabelle1").Range("A31").Calculate
Cells(31, 1) = Now
Exit Sub
End Sub

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Code funktioniert nicht
28.05.2014 22:12:58
Ewald
Hallo Jürgen,
teste mal so
Dim Freigabe As Boolean
Sub StartClock()
Freigabe = True
gdNextTime = Now + TimeSerial(0, 0, 1)
If Freigabe Then Application.OnTime earliesttime:=gdNextTime, procedure:=gsMacro, schedule:= _
True
End Sub
Sub Zeitmakro1()
Freigabe = False
ThisWorkbook.Worksheets("Tabelle1").Range("A31") = Format(Now, "hh:mm:ss")
Worksheets("Tabelle1").Range("A31").Calculate
Cells(31, 1) = Now
Exit Sub
End Sub
Gruß Ewald

AW: VBA Code funktioniert nicht
29.05.2014 13:41:07
Jürgen
Hallo Ewald,
ich danke Dir für Deine Hilfe. Ich habe Deinen Code bei mir übernommen. Nach dem Start kam eine Fehlermeldung, die sich auf procedure:=gsMacro bezog. Das war bei mir 'UpdateClock', die ich dann wieder eingefügt habe. Dann lief alles wieder, wie bei mir vorher auch, aber eben ohne den Countdown in A32 bei Gleichstand der Zellen A30 und A31 zu stoppen, die aktuelle Zeit in Zelle A31 läuft also weiter.
Ich zeige hier mal meine ganzen Anweisungen, vielleicht habe ich ja noch einen anderen Fehler drin? (Mit 'Zeitmakro()'friere ich die aktuelle Zeit in A27 ein, die ich für einen anderen Zweck benötige)
Dim Freigabe As Boolean
Option Explicit
Public ET As Variant
Sub Zeitmakro()
ThisWorkbook.Worksheets("Tabelle1").Range("A27") = Format(Now, "hh:mm")
Call UpdateClock
End Sub
Sub UpdateClock()
Worksheets("Tabelle1").Range("A31").Calculate
Cells(31, 1) = Now
Call StartClock
If Cells(30, 1) = Cells(31, 1) Then
Call Zeitmakro1
End If
End Sub
Sub StartClock()
Freigabe = True
gdNextTime = Now + TimeSerial(0, 0, 1)
If Freigabe Then Application.OnTime earliesttime:=gdNextTime, procedure:=gsMacro, schedule:=  _
_
True
End Sub

Sub Zeitmakro1()
Freigabe = False
ThisWorkbook.Worksheets("Tabelle1").Range("A31") = Format(Now, "hh:mm:ss")
Worksheets("Tabelle1").Range("A31").Calculate
Cells(31, 1) = Now
Exit Sub
End 

Sub

Anzeige
AW: VBA Code funktioniert nicht
29.05.2014 15:18:34
Ewald
Hallo,
dann teste mal so, ob überhaupt erkannt wird das die Zeiten gleich sind
Option Explicit
Dim Freigabe As Boolean
Public ET As Variant
Sub Zeitmakro()
Freigabe = True
ThisWorkbook.Worksheets("Tabelle1").Range("A27") = Format(Now, "hh:mm")
Call UpdateClock
End Sub
Sub UpdateClock()
Worksheets("Tabelle1").Range("A31").Calculate
Cells(31, 1) = Now
Call StartClock
If Cells(30, 1) = Cells(31, 1) Then
Call Zeitmakro1
End If
End Sub
Sub StartClock()
Dim gdNextTime
gdNextTime = Now + TimeSerial(0, 0, 1)
If Freigabe Then Application.OnTime earliesttime:=gdNextTime, procedure:="UpdateClock",  _
schedule:=True
End Sub
Sub Zeitmakro1()
Freigabe = False
ThisWorkbook.Worksheets("Tabelle1").Range("A31") = Format(Now, "hh:mm:ss")
Worksheets("Tabelle1").Range("A31").Calculate
Cells(31, 1) = Now
MsgBox "Fertig"
Exit Sub
End Sub
mit Zeitmakro starten.
Gruß Ewald

Anzeige
AW: VBA Code funktioniert nicht
29.05.2014 16:51:36
Jürgen
Hallo Ewald,
es ist so, wie Du wohl vermutet hast: Es wird nicht erkannt, dass die Zeiten gleich sind. Hast Du noch eine Idee?

AW: VBA Code funktioniert nicht
29.05.2014 19:07:36
Ewald
Hallo Jürgen,
beide Zellen müssen das gleiche Value haben, Datum/Zeit wie du dann die Zellen formatierst ist dann egal.
Mit folgendem Code läuft es (in A30 wird eine um 1Minute höhere Zeit beim Start eingetragen)
Dim Freigabe As Boolean
Public ET As Variant
Sub Zeitmakro()
Freigabe = True
ThisWorkbook.Worksheets("Tabelle1").Range("A30") = Now + 0.001
Call UpdateClock
End Sub
Sub UpdateClock()
Worksheets("Tabelle1").Range("A31").Calculate
Cells(31, 1) = Now
Call StartClock
If Cells(30, 1).Value = Cells(31, 1).Value Then
Call Zeitmakro1
End If
End Sub
Sub StartClock()
Dim gdNextTime
gdNextTime = Now + TimeSerial(0, 0, 1)
If Freigabe Then Application.OnTime earliesttime:=gdNextTime, procedure:="UpdateClock",  _
schedule:=True
End Sub
Sub Zeitmakro1()
Freigabe = False
ThisWorkbook.Worksheets("Tabelle1").Range("A31") = Format(Now, "hh:mm:ss")
Worksheets("Tabelle1").Range("A31").Calculate
Cells(31, 1) = Now
MsgBox "Fertig"
Exit Sub
End Sub
Wenn du die Msgbox rausnimmst, bleibt der Timer direkt stehen,ansonsten erst wenn du OK geklickt hast
Gruß Ewald

Anzeige
AW: VBA Code funktioniert nicht
29.05.2014 20:20:23
Jürgen
Hallo Ewald,
jetzt funktioniert es so wie es soll! Prima, ich freue mich wirklich sehr und danke Dir für die Zeit, die Du für mich aufgewendet hast und natürlich für Dein Wissen und Können, das Du mir zur Verfügung gestellt hast.
Herzlichen Gruß
Jürgen

Na dann zu! ;-) owT
30.05.2014 15:54:01
Luc:-?
:-?

AW: Na dann zu! ;-) owT
30.05.2014 17:07:49
Jürgen
Hallo Ewald,
ich habe mich zu früh gefreut. In A30 habe ich eine Zielzeit als Ergebnis einer Rechenformel an anderer Stelle eingegeben, damit man sie auch während eines laufenden Prozesses verändern kann. Dieses Ergebnis habe ich in A30 übernommen und entsprechend formatiert.Die Rechnung in den Zellen A30 - A31 = A32 funktionierte auch.
Jetzt wird durch Deine Programmierung der Inhalt von A30 aber beim Macro-Start überschrieben, so dass meine Zeit weg ist. Damit stimmt meine errechnete Zielzeit nicht mehr. Ich habe nun probiert, meine Variablen aus der Berechnung der Zielzeit in den Code von Dir einzufügen, was auch funktioniert. Ich kann dann aber während des laufenden Prozesses keine Variablen mehr ändern. Gibt es nicht eine Möglichkeit, nur die Zelle A30 zu formatieren, den Inhalt/Wert aber gleich lassen? Oder die Programmierung so zu ändern, dass auch Variable während des laufenden Prozesses noch geändert werden können?

Anzeige
AW: Value ist wichtig nicht Format
30.05.2014 17:44:05
Ewald
Hallo Jürgen,
das Schreiben in die Zelle A30 war nur gedacht,damit man schneller testen kann, wenn du jetzt da eine Formel drin hast auch kein Problem.
Du mußt nur sehen das das Value gleich ist.
markiere die Zelle/Zellen formatieren und stelle in den Einstellungen auf Standard, jetzt solltest du in der Vorschau sehen Datum/Zeit (also TT.MM.JJJJ hh:mm:ss).Jetzt einfach auf Abbrechen klicken.
Liegt der Formelwert so nicht vor, mußt du schauen in welcher Zelle der Fehler liegt.
Wichtig ist hierbei immer das Value, nicht das durch Format dargestellte Ergebnis
Gruß Ewald

Anzeige
AW: Value ist wichtig nicht Format
31.05.2014 18:45:18
Jürgen
Hallo Ewald,
danke für Deine Erklärung. Das mit den Testeingaben in A30 habe ich verstanden. Ich hänge aber wohl bei den Begriffen Value und Formatierung. Ich verstehe das so, dass eine formatierte Zelle manuell in Excel vorgenommen wird und das Gleiche geschieht mit Value in einem Makro. In UpdateClock formatierst Du so die Zellen A30 und A31. Also müssten beide gleich formatiert sein, damit das Programm die Zeitgleichheit erkennen kann. Tut es aber nicht.
Jetzt schreibst Du mir: markiere die Zelle/Zellen formatieren und stelle in den Einstellungen auf Standard, jetzt solltest du in der Vorschau sehen Datum/Zeit (also markiere die Zelle/Zellen formatieren und stelle in den Einstellungen auf Standard, jetzt solltest du in der Vorschau sehen Datum/Zeit (also TT.MM.JJJJ hh:mm:ss).Jetzt einfach auf Abbrechen klicken.
Wenn ich die Formatierung in den Zellen anschaue, also formatieren wähle, erscheint im Vorschaufenster von A31 TT.MM.JJJJ hh:mm, in der von A30 hh:mm. Also sind beide unterschiedlich formatiert. Formatiere ich nun A30 auch so wie A31, dann erkennt das Programm dennoch nicht A30, denn die Uhr stoppt nicht, ob wohl A30 in UpdateClock mit Value formatiert wird.
Wo liegt meine Denkfehler?

Anzeige
AW: Value ist wichtig nicht Format
31.05.2014 22:24:44
Ewald
Hallo Jürgen,
vielleicht hilft ja dies zum Verständnis
 A
3018:29:30
3118:29:34
32 
33 
3429.05.2014 18:29:30
3529.05.2014 18:29:34

ZelleFormatWert
A30hh:mm:ss41788,7704861111
A31hh:mm:ss41788,7705324074
A34TT.MM.JJJJ hh:mm:ss29.05.2014 18:29:30
A35TT.MM.JJJJ hh:mm:ss29.05.2014 18:29:34

ZelleFormel
A34=A30
A35=A31
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

in allen 4 Zellen steht das gleiche Value = 41788,7704861111 als Beispiel
die Zahl vor dem Komma ist das Datum, die Zahl nach dem Komma die Zeit.
wird in einer Zelle jetzt nur O,7704861111 eingegeben sehen beide Zellen in der Formatierung hh:mm:ss gleich aus,nur wenn Excel jetzt die zwei Zellen vergleicht dann sind sie eben nicht gleich.
Wenn du die Zellen als Standard formatierst siehst du das Value.
Gruß Ewald

Anzeige
AW: Value ist wichtig nicht Format
01.06.2014 16:23:38
Jürgen
Hallo Ewald,
hier die Darstellung der Value-Werte in den angesprochenen Zellen:
Userbild
Nach Deiner Erklärung zeigen jetzt alle den geforderten Wert an. Trotzdem läuft die Uhr weiter.
Wenn ich das laufende Programm von Dir geladen haben, stoppt der Zähler. Wenn ich das Programm nur an einer Stelle ändere, nämlich die A30 in A27, die ich brauche, um die gewünschte Zielzeit (Intervallzeit) zu berechnen, erkennt das Programm die Zeitgleichheit zwischen A30 und A31 nicht mehr. Der Fehler müsste also in A30 liegen, aber der Value zeigt, dass alles richtig ist.

Anzeige
AW:Ist die Zeit auch größer in A30
01.06.2014 19:16:17
Ewald
Hallo Jürgen,
das scheint dann korrekt zu sein.
leider kann ich nicht erkennen wie A27 und A30 per Formel verbunden sind.
Vielleicht noch eins,kann ich jetzt auch nicht erkennen ob das so ist, die Zeit in A30 muß größer sein als die aktuelle Zeit,sonst bist du schon beim ersten Update 1 sec. drüber und dann läuft er natürlich durch.
Gruß Ewald

AW: AW:Ist die Zeit auch größer in A30
02.06.2014 16:14:56
Jürgen
Hallo Ewald,
ja ich habe extra ein Bild gemacht von der weiter gelaufenen Uhr. A27 benötige ich um die Zielzeit zu errechnen: Zur momentanen Uhrzeit (A27) werden weitere benötigte Zeiten hinzu gerechnet, so dass sich die Intervallzeit in A30 ergibt. Die Zeit ist dann natürlich größer als die aktuelle Zeit (A31). Wird die Zeitgleichheit zwischen beiden Zellen nicht erkannt, läuft die Uhr weiter, wie das Bild zeigt.

Anzeige
Darstellung aller Zeiten
02.06.2014 16:33:39
Jürgen
Hallo Ewald,
ich habe mal alle Zeiten und Quellen im folgenden Bild untergebracht:
Userbild

AW: Darstellung aller Zeiten
02.06.2014 22:47:41
Ewald
Hallo Jürgen,
so sollte es gehen,durch die Addition wird die Zeit nicht richtig erkannt
 AB
22  
2302.06.2014 22:39:17 
2400:02:00 
2500:01:11 
26  
2702.06.2014 22:36:06Startzeit
28  
29  
3002.06.2014 22:39:17Intervallzeit
3102.06.2014 22:39:17Timerzeit
3200:00:00Restzeit
3300:03:11Laufzeit
34  

ZelleFormatWert
A23TT.MM.JJJJ hh:mm:ss02.06.2014 22:39:17
A24[$-F400]h:mm:ss AM/PM0,001388889
A25[$-F400]h:mm:ss AM/PM0,000823045
A27TT.MM.JJJJ hh:mm:ss02.06.2014 22:36:06
A28TT.MM.JJJJ hh:mm:ss 
A30TT.MM.JJJJ hh:mm:ss02.06.2014 22:39:17
A31TT.MM.JJJJ hh:mm:ss02.06.2014 22:39:17
A32[$-F400]h:mm:ss AM/PM1,28585088532418E-06
A33hh:mm:ss2,21064814911468E-03

ZelleFormel
A23=A27+A24+A25
A30=A23
A32=A30-A31
A33=A24+A25-A32
Diese Tabelle wurde mit Tab2Html (v2.4.1) erstellt. ©Gerd alias Bamberg

der Code
Dim Freigabe As Boolean
Public ET As Variant
Sub Zeitmakro()
Freigabe = True
ThisWorkbook.Worksheets("Tabelle1").Range("A27") = Now
Call UpdateClock
End Sub
Sub UpdateClock()
Cells(31, 1) = Now
If TimeValue(Cells(30, 1)) = TimeValue(Cells(31, 1)) Then
Call Zeitmakro1
Else
Call StartClock
End If
End Sub
Sub StartClock()
Dim gdNextTime
gdNextTime = Now + TimeSerial(0, 0, 1)
If Freigabe Then Application.OnTime earliesttime:=gdNextTime, procedure:=" _
UpdateClock", _
schedule:=True
End Sub
Sub Zeitmakro1()
Freigabe = False
ThisWorkbook.Worksheets("Tabelle1").Range("A31") = Format(Now, "hh:mm:ss")
Cells(31, 1) = Now
Exit Sub
End Sub
Gruß Ewald

AW: Darstellung aller Zeiten
03.06.2014 17:13:19
Jürgen
Hallo Ewald,
pffffffft, endlich geschafft, es funktioniert jetzt wirklich!!! (ein kleiner Fehler war noch drin, den ich aber selber tilgen konnte: procedure:=" _UpdateClock", _ hier war der Unterstrich vor UpdateClock zu viel. Am Ende konnte ich auch noch ein Signalton einfügen, so dass eine akustische Meldung erfolgt, dass die Zeit abgelaufen ist.
Ich danke Dir nochmals sehr, möchte Dich aber gleich noch einmal um Deine Hilfe bitten:
Wenn das Intervall läuft und die Arbeitszeit ist zu Ende, jedoch das Intervall noch nicht, möchte ich über eine Schaltfläche die Laufzeit stoppen und am nächsten Tag durch "Weiter" zu Ende laufen lassen können. Geht das? (Das Makro zum Start eines Intervalls habe ich auch mit einer Schaltfläche verknüpft)
Gruß
Jürgen

AW: Darstellung aller Zeiten
03.06.2014 18:29:23
Ewald
Hallo Jürgen,
der Fehler im Code ist hier durch die Darstellung entstanden, wird jetzt wohl auch wieder sein.
mit Start,Stop,Weiter sollte es so aussehen
in ein Modul
Public Freigabe As Boolean
Public ET As Variant
Sub Zeitmakro()
Freigabe = True
ThisWorkbook.Worksheets("Tabelle1").Range("A27") = Now
Call UpdateClock
End Sub
Sub UpdateClock()
Cells(31, 1) = Now
If TimeValue(Cells(30, 1)) = TimeValue(Cells(31, 1)) Then
Call Zeitmakro1
Else
Call StartClock
End If
End Sub
Sub StartClock()
Dim gdNextTime
gdNextTime = Now + TimeSerial(0, 0, 1)
If Freigabe Then Application.OnTime earliesttime:=gdNextTime, procedure:=" _
UpdateClock", _
schedule:=True
End Sub
Sub Zeitmakro1()
Freigabe = False
ThisWorkbook.Worksheets("Tabelle1").Range("A31") = Format(Now, "hh:mm:ss")
Cells(31, 1) = Now
Exit Sub
End Sub
Sub Weiter()
Freigabe = True
Cells(31, 1) = Cells(31, 1) + 1 / 86400
If TimeValue(Cells(30, 1)) = TimeValue(Cells(31, 1)) Then
Call Zeitmakro1
Else
Call StartClock
End If
End Sub
für die Button (in das Tabellenmodul)
Private Sub CommandButton1_Click()  'Start
Zeitmakro
End Sub
Private Sub CommandButton2_Click() 'Stop
Freigabe = False
End Sub
Private Sub CommandButton3_Click() 'Weiter
Weiter
End Sub
Gru0 Ewald

AW: Darstellung aller Zeiten
04.06.2014 17:11:40
Jürgen
Hallo Ewald,
vielen Dank! Ich habe wider Erwarten Probleme beim Zuweisen der CommandBotton auf die erstellten Schalter. Beim Einrichten eines Schalters werde ich gefragt, womit er verknüpft werden soll. Angeboten werden dann die Makronamen. Dort finde ich das Makro "Weiter", das zu CommandBotton3 passen könnte. Für CB2 finde ich aber kein Makro. Und wie wird ein CB mit den Codes verknüpft, die ich unter "Tabelle1" eingefügt habe?
Gruß
Jürgen

AW: Darstellung aller Zeiten
05.06.2014 10:48:58
Jürgen
Hallo Ewald,
ich glaube ich habe die Zuordnung der CommandBottons hinbekommen, die Zeit stoppt jedenfalls und läuft bei Weiter entsprechend weiter. Dabei habe ich jedoch bemerkt, dass die Zeit im Hintergrund weiter läuft und nicht wirklich angehalten wird. Das habe ich bemerkt, weil ich kurz nach dem Stopp-Befehl auf Weiter gedrückt habe. Dann lief die Zeit nicht bei der gestoppten Zeit weiter, sondern bei der inzwischen weiter gelaufenen Zeit.
Vielleicht habe ich ja den Stopp-Befehl doch falsch gesetzt, ich habe ihn dem Zeitmakro1 zugeordnet, weil dort der Befehl "Freigabe=False" enthalten ist. Habe ich etwas falsch gemacht?
Gruß
Jürgen

Stopp - Weiter - Schalter
05.06.2014 15:45:28
Jürgen
Hallo Ewald,
meine beiden vorangegangenen Beiträge brauchst Du nicht zu lesen, das ist verschwendete Zeit. Tut mir leid, dass ich Dir die aufgehalst habe.
Ich habe Dein letztes Modul getestet und denke, es ist alles richtig, auch die von mir installierten Schalter. Das mit der weiter laufenden Zeit stellt sich so dar: Bei Stopp werden alle Zeiten "eingefroren", bei Weiter wird aber die aktuelle Zeit in A31 aufgerufen. Dadurch ergibt sich in A32 je nach Länge der Zeitunterbrechung ein negativer Wert. Damit ist die Zeit, die noch ablaufen sollte, gelöscht und damit verloren, wie Du auf dem folgenden Bild sehen kannst:
Userbild
Weil der Weiter-Befehl immer am nächsten Tag gestartet wird, bedeutet das, dass die Zeit des Countdown (A32), also die Restzeit des unterbrochenen Intervalls immer verloren geht. Um das zu verhindern, müsste die A32 beim Drücken der Stopp-Taste an anderer Stelle als eingefrorener Wert gespeichert werden (z. B. in A35. Der Weiter-Befehl am nächsten Tag, müsste dann die Zeit von A35 übernehmen und den Countdown fortsetzen. Das bedeutet, ich brauche ein neues Weiter-Makro, dass das kann?
Gruß
Jürgen

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige