Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Tabellenblatt friet und beendet sich

Forumthread: Tabellenblatt friet und beendet sich

Tabellenblatt friet und beendet sich
11.04.2024 23:13:57
Holger
Hallo und einen schönen Abend

Weist jemand vielleicht, wieso das Tabellenblatt sich automatisch schließt, wenn der Code aktiv wird?
Das Blatt friet dann ein und beendet sich von selbst.

Private Sub Worksheet_Change(ByVal Target As Range)
If Range("B1") = 1 Then Range("B3") = Time
End Sub

Danke für eure Hilfe.

Gruß
Anzeige

26
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenblatt friet und beendet sich
11.04.2024 23:22:21
ralf_b
Endlosschleife weil du durch die Zuweisung des Zellwertes in B3 wieder ein change Event auslöst. und wieder und wieder und wieder.




If Range("B1") = 1 Then
application.enableevents=false
Range("B3") = Time
application.enableevents=true
end if
Anzeige
Dauerschleife
11.04.2024 23:23:11
{Boris}
Hi,

sobald Du in B1 was einträgst (1), dann löst Du das Change-Event aus. Dann wird in B3 die Zeit eingetragen - das löst wieder das Change-Event aus.
Da B1 immer noch 1 ist, wird wieder die Zeit eingetragen - usw. usw.
Abhilfe: Du musst die Events temporär ausschalten - nach dem Motto:

Application.EnableEvents = False
If Range("B1")...
Application.EnableEvents = True

VG, Boris
Anzeige
AW: Tabellenblatt friet und beendet sich
12.04.2024 05:07:12
RPP63
Moin!
Zusätzlich zu den bisherigen Anmerkungen, die prinzipiell richtig sind:
Einem Change-Ereignis wird immer ein Target übergeben.
Wenn man es nicht auswertet, nimmt VBA Range("B3"), welches sich ja immer wieder neu aktualisiert → Endlosschleife!

Folglich:
Korrekt angewendet, braucht man die Events nicht ausschalten.
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = "$B$1" And Target.Value = 1 Then Range("B3") = Time
End Sub

Gruß Ralf
Anzeige
AW: Tabellenblatt friet und beendet sich
12.04.2024 09:33:56
GerdL
Moin
Private Sub Worksheet_Change(ByVal Target As Range)


If Target.Address = "$B$1" Then
If Range("B1") = 1 Then
Application.EnableEvents = False
Range("B3") = Date
Application.EnableEvents = True
End If
End If

End Sub

Gruß Gerd
Anzeige
AW: Tabellenblatt friet und beendet sich
12.04.2024 15:18:54
Oppawinni
So wie ich das sehe, kannst du - mal abgesehen davon, dass du dir da eine Endlosschleife gebaut hast
auf die Art gleich in die Zelle B3 = Jetzt() rein schreiben.

So jedenfalls wenn ich mir den Vorgänger-Thread anschaue, denn da prüfst du nur eine Zelle und wenn da ein Eintrag gemacht wird
dann wechselt eine Zelle auf den Wert 1 und wenn da 1 steht, willst du jetzt an anderer Stelle über den Change_Event die Uhrzeit eintragen lassen.
Da aber die 1 stehen bleibt, würde bei jeder Änderung die Zeit wieder eingetragen. Willst du aber wohl nicht,
also drehst du dich da im Kreis. Endlosschleife ?

Worauf du eigentlich reagieren willst, denke ich, ist ein Wechsel des Wertes einer Zelle auf den Wert 1.
Du müsstest also wenigstens irgendwo eine Zelle haben, die dir sagt, dass der Wert war vorher anders war und jetzt auf 1 gewechselt ist.
Also prinzipiell sowas:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

' hier Prüfung auf Target...
If not (Target.Address = "$N$8") Then exit sub
'dann
Application.EnableEvents = False
'Kontrolle ob "B1" sich verändert hat durch Vergleich mit Hilfszelle "B2"
If Range("B1") > Range("B2") Then
'neuen Wert von B1 in B2 speichern
Range("B2") = Range("B1").Value
If Range("B1") = 1 Then Range("B3") = Time
End If
Application.EnableEvents = True
End Sub

wobei du natürlich weißt, welche Zelle editiert werden muss, damit "B1" den Wert 1 annimmt.
ich habe jetzt mal angenommen, dass die Eingabezelle "N8" den Wert von "B1" triggert.
Anzeige
AW: Tabellenblatt friet und beendet sich
12.04.2024 15:26:38
Oppawinni
ach du grüne Neune,
man sieht die Fehler halt immer erst, wenn es raus ist.
sollte natürlich
Private Sub Worksheet_Change(ByVal Target As Range)
sein.....
Das wird ja immer wilder hier!
12.04.2024 15:55:18
RPP63
Zunächst mal hält es der TE nicht für nötig, mal in "seinen" Thread hereinzuschauen und Feedback zu geben.
Dann kommen schließlich Antworten von durchaus respektablen Usern, die mir die spärlichen Haare zu Berge stehen lassen.
Vorab mein Hinweis, dass der TE schlicht null Ahnung von Ereignismakros hat, was ja erst mal nicht schlimm ist.
Dann aber (durch die Bank!) zu empfehlen, mal eben EnableEvents = False zu implementieren, ohne eine Fehlerbehandlung durchzuführen, ist mindestens fahrlässig.
Der "Tipp" (besser die Zurechtweisung), die Bedingungen kaskadierend zu prüfen, wo ein simples And reicht, macht mich sprachlos.
Einzig der Hinweis, "die Zelle mit der 1" könnte ja auch per Formel veränderbar sein, mag zielführend sein.
Ansonsten gilt mein obiger Einzeiler mit Auswertung des Target (der schlimmstenfalls in den Debugger laufen kann aber nicht eine Eigenschaft der Application verändert).
Ab jetzt lese ich nur noch mit, es sei denn, jemand weist mir einen Fehler nach.
Anzeige
AW: Das wird ja immer wilder hier!
12.04.2024 16:23:25
Oppawinni
Primär wäre mal wichtig, dass wir die erste Etappe erreichen und wäre für mich "Make it Run". Es nützt der schönste Code nichts, wenn er nicht tut was er soll.
Solange wir noch raten, was das Ziel sein könnte, rückt sowas Fehlerhandlung in den Hintergrund. Gut, ein on Error Resume next hätte wahrscheinlich nicht weh getan.
Anzeige
Sorry
12.04.2024 16:44:29
Kuwer
Hallo Ralf,

"... der schlimmstenfalls in den Debugger laufen kann..."

da das für Dich in Ordnung ist, verzeih mir bitte die Zurechtweisung. Ich nehme alles zurück, behaupte aber nicht das Gegenteil. ;-)

Gruß, Uwe
AW: Das wird ja immer wilder hier!
12.04.2024 17:17:30
Oppawinni
Im Prinzip war das nur der "Output" des Vorgänger-Thread, wenn ich das richtig sehe, also nicht nur die "Leistung" des TO:
https://www.herber.de/forum/messages/1973050.html
Ich denke, dass dein schöner Code da leider auch nicht die Lösung bringt.
Anzeige
Für so eine Anfrage...
12.04.2024 18:02:12
{Boris}
Hi Ralf,

...ohne jedes Feedback ist es total sinnfrei, über Optimierungen zu diskutieren.
Der Grund der Dauerschleife wurde direkt zu Beginn korrekt benannt. Alles Weitere ist hier für den Moment "Perlen vor die S...".

VG, Boris
AW: Für so eine Anfrage...
12.04.2024 22:41:46
Holger
Schönen Abend Zusammen,

in erster Linie möchte rechtherzlich für die ganze Teilnahme bedanken. Ich hab leider nicht das Wissen dafür.
Einiges habe ich sowieit hinbekommen.

Problem ist an der Sache, ich muss die Momentzeit als Wert in die Zelle BB3 bekommen, sonst kann ich damit nicht rechnen.
Mein Vorhaben war, dass ich 90 min rausrechnen möchte und nach 90 min eine bedingte Formatierung auslöse.
Also z. B. Start 14:00 Uhr - Ende 15:30 Uhr dannach bedingte F.
Soweit klappt das auch mit bedingten F., aber wenn ich =jetzt() benutze kann ich damit nicht rechnen.

Habe die Datei miteingefügt, vielleicht falls jemand ne Idee hat, dann sehr gerne.

https://www.herber.de/bbs/user/168698.xlsm

Danke und Gruß
Anzeige
AW: Für so eine Anfrage...
12.04.2024 23:05:36
Onur
Erzähl doch einfach mal: Was genau willst du wann bedingt formatieren?
Aber ohne Excel, nur mit eigenen Worten.
z.B. "Wenn Rampe länger als 90 min besetzt, dann Rampenfarbe=Rot" oder sowas.
AW: Für so eine Anfrage...
12.04.2024 23:25:38
Holger
Hallo Onur

Ich möchte, wenn BA3 = 1 ist, dann soll die aktulle Uhrzeit in BB3 als Wert drin stehen und sich danach nicht mehr aktualieseren.

In dieser Form habe ich wohl eine Enloschleife und das möchte ich gerne verhindern.
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("BA3") = 1 Then Range("BB3") = Time
End Sub

Habe hier einige Hilfe bekommen, nur wenn ich mit =jetzt() arbeite, dann kann ich hinter die Uhrzeit nicht wie gewünscht als Zahlenformat umwandeln.

Danke.
Anzeige
AW: Für so eine Anfrage...
12.04.2024 23:56:18
Onur
NOCHMAL: Erkläre bitte (OHNE EXCEL-AUSDRÜCKE), wozu das Ganze gut ist (als ob du das einem Kollegen erklärst, der keine Ahnung von Excel hat).
Ich glaube nämlich, du hast da einen Denkfehler und machst das Alles viel zu kompliziert.
Deswegen: WAS willst du am Ende damit erreichen? Und nicht wieder "Wenn Zelle A1 dann soll Zelle B1...."
Anzeige
Servus
13.04.2024 19:09:11
Oppawinni
Nee, ob sich dein Engagement da lohnt, Onur.
Ich merk jedenfalls, dass bei mir die Motivation stark nachgelassen hat.
Vielleicht, weil es mich nerft, wenn User hier posten und ihre Posts dann vergessen.
Vielleicht, weil mich zu wenige Themen wirklich ansprechen und ich merke, dass ich schlampig werde.
Vielleicht einfach auch, weil ich nicht wirklich viel beitragen kann. Es gibt hier ja genug versierte Helfer.
Vielleicht ... egal.
Ich werd jedenfalls mal ne Pause einlegen.
Man liest sich.. oder auch nicht.
Anzeige
AW: Servus
13.04.2024 20:05:42
Onur
Sowas mache ich eher für mich (als Gehirnjogging) als für den Frager.... :)
AW: Servus
14.04.2024 21:49:21
Holger
Danke dir Onur, auch wenn du das wahrscheinlich bereits jeden Tag 100 mal hörst.
Ich wusste sogar nicht, dass man Spalten in Zahlen umwandeln kann.
Respekt für deine Gedult und viellicht kommt bald schon nächste die kopliezierte Frage? :-)

Gruß
Anzeige
AW: Servus
15.04.2024 00:40:02
Onur
Siehst du? Mein Engagement hat sich doch gelohnt - er hat sich bei DIR bedankt. ;)
AW: Servus
15.04.2024 10:15:33
Oppawinni
Ein "Danke" war mir nie wichtig. Mir reicht es, wenn ein TO die für ihn passende Lösung bekommt, auch wenn es nicht meine ist.
Freilich frag ich mich manchmal auch, warum ein TO sich für eine Lösung entscheidet, obwohl da aus meiner Sicht bessere waren, oder frage mich, gerade in diesem Fall, ob dem TO damit überhaupt geholfen ist, da der scheinbar mit VBA noch völlig überfordert ist, aber, wie meine Oma zu sagen pflegte:
"Des Menschen Wille ist sein Himmelreich"
D.h. es ist mir im Grunde egal. Die Gedanken sind halt dennoch da, kann ich auch nicht abschalten.
Aber toll, oder, der TO ist im Himmelreich, jedenfalls temporär. :)
Anzeige
Gerne !
14.04.2024 22:01:02
Onur
Wieso antwortest du dann OpaWinni? :)
Hast du gemerkt? Die Uhrzeit wird alle 10 sec aktualisiert und alle 10 sec wird auch geprüft, ob eine Rampe über der Zeit ist. Anders geht es auch nicht, denn Excel aktualisiert die Uhrzeit nur bei einer Neuberechnung und nicht andauernd.
Dein seltsamer Konstrukt mit den Uhrzeiten war auch völlig überflüssig, denn "Jetzt()" enthält Uhrzeit UND Datum und man kann damit wunderbar (auch nach Mitternacht) rechnen. Wenn man nur die Zeit braucht, kann man die Stelle nach dem Komma nehmen.
Anzeige
AW: Gerne !
14.04.2024 23:53:35
Holger
Jetzt sehe das mit Uhrzeit, hätte wahrscheinlich das Problem mit meiner Dezimalrechnung mit der Uhrzeit nach 00:00 Uhr gehabt.
Alleine hätte ich das im Leben nicht hinbekommen. Danke nochmal, nett von dir das Leuten hier hilfst.

Gruß
Korrekt angewendet, ...
12.04.2024 08:35:48
Kuwer
... müssten die 2 Prüfungen entkoppelt voneinander abhängig erfolgen, Ralf. ;-)

Gruß, Uwe
Anzeige
AW: Korrekt angewendet, ...
12.04.2024 09:50:31
Oppawinni
Wir wissen ja nicht, was unser lieber Holger da vor hat. Vielleicht handelt es sich bei der betreffenden Zelle um eine berechnete Zelle. Da würde dann die Prüfung von Target vielleicht etwas kompliziert sein.
Die Events zu unterdrücken dürfte in aller Regel nicht schaden.
Wenn es sich um eine Eingabezelle handelt, dann vielleicht am Besten gleich ein Exit Sub, wenn die Eingabezelle nicht Target ist, also insoweit sehe ich das so wie du.
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige