Registriert seit: 14.07.2021
Version(en): Office365
Hallo zusammen,
ich möchte gerne zwei Tagesdaten vergleichen (in A1 und A2) und dann, wenn die Bedingung erfüllt ist, in Zelle A3 einen Text schreiben lassen.
A1 und A2 sind jeweils als Datum formatiert. In A1 habe ich das heutige Datum (21.09.22) und in A2 habe ich das morgige Datum (22.09.22) eingetragen. Der Rest der Arbeitsmappe ist unangetastet und rein.
Leider bekomme ich jedes Mal beim Start der Datei einen Stapelfehler 28 und will die erste Zeile des Codes debuggen, obwohl er die Aktion letztlich doch ausführt und den Text tatsächlich noch in A3 reinschreibt.
Was mache ich bei folgendem Code falsch??
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("a1") <= Range("a2") Then
Range("a3").Value = "KW 39+40"
End If
End Sub
Leider komme ich selbst bei diesem vermeintlich einfachen und kurzen Code nicht alleine weiter und würde mich über Ratschläge freuen.
Danke und viele Grüße ins Forum
Registriert seit: 28.08.2022
Version(en): 365
Hi,
du rennst hier in eine Endlos-Schleife, da deine Routine das Worksheet ändert und die Routine dadurch erneut aufgerufen wird und wieder etwas ändert und wieder aufgerufen wird und ...
Abhilfe:
entweder vor dem Schreiben die Events ausschalten oder prüfen ob eine der beiden Ausgangszellen im Target steckt. Am Besten beides.
Gruß,
Helmut
Win10 - Office365 / MacOS - Office365
Folgende(r) 1 Nutzer sagt Danke an HKindler für diesen Beitrag:1 Nutzer sagt Danke an HKindler für diesen Beitrag 28
• junjor
Registriert seit: 11.04.2014
Version(en): 2021
Hallo,
oder du nimmst anstelle der Change-Funktion das Worksheet_Activate-Ereignis.
Gruß Günter
aus der Helden-, Messe-, Musik-, Buch-, Universitäts- und Autostadt Leipzig
Folgende(r) 1 Nutzer sagt Danke an Glausius für diesen Beitrag:1 Nutzer sagt Danke an Glausius für diesen Beitrag 28
• junjor
Registriert seit: 25.11.2021
Version(en): 2019, 365
21.09.2022, 18:29
(Dieser Beitrag wurde zuletzt bearbeitet: 21.09.2022, 18:37 von Ralf A.)
..wozu dafür VBA notwendig ist, bleibt Dein Geheimnis. In A3 folgende Funktion: =Wenn(A1 <= A2;"Dein Text";"")
Und wenn schon VBA, dann so:
Code:
If target.count = 1 and (Target.Address(0,0) = "A1" or target.address(0,0) = "A2") and(cells1,1) <= cells(2,1) then
cells(3,1) = "Dein Text"
else
cells(3,1) = null
endif
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
Ciao, Ralf
Folgende(r) 1 Nutzer sagt Danke an Ralf A für diesen Beitrag:1 Nutzer sagt Danke an Ralf A für diesen Beitrag 28
• junjor
Registriert seit: 30.03.2018
Version(en): 2010
So, habe ich das noch hinbekommen.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("a1") <= Range("a2") Then
Application.EnableEvents = False
Range("a3").Value = "KW 39+40"
Application.EnableEvents = True
End If
End Sub
Folgende(r) 1 Nutzer sagt Danke an Charmin für diesen Beitrag:1 Nutzer sagt Danke an Charmin für diesen Beitrag 28
• junjor
Registriert seit: 14.07.2021
Version(en): Office365
21.09.2022, 20:56
Ich habe es eben zuerst mit dem Vorschlag von Charmin versucht und es hat auf Anhieb funktioniert.
Insofern belasse ich es dabei, möchte mich aber ausdrücklich bei
euch allen vielmals für die konstruktiven und schnellen Antworten und lehrreichen Hinweise bedanken!!!!
Ein super Forum hier!!
Registriert seit: 25.11.2021
Version(en): 2019, 365
...ich spiele ja nur ungern den Spielverderber, aber Charmin's Vorschlag hat einen kleinen Schönheitsfehler. Wenn einmal KW39 + 40 in der Zelle steht, ändert sich nie mehr etwas am Inhalt von A3. Auch dann nicht, wenn irgendwann mal A2 > A1 ist... kann mir nicht vorstellen, dass das so gewollt ist...
Der sicherste Ansatz für einen Irrtum ist der Glaube, alles im Griff zu haben.
Nur, weil ich den Recorder bedienen kann, macht mich das noch lange nicht zum Musiker.
Ciao, Ralf
Registriert seit: 28.08.2022
Version(en): 365
22.09.2022, 09:03
(Dieser Beitrag wurde zuletzt bearbeitet: 22.09.2022, 09:04 von HKindler.)
Außerdem passiert das immer noch bei jeder Änderung irgendeiner Zelle im Worksheet.
PHP-Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A1:A2")) Is Nothing Then
If Range("a1") <= Range("a2") Then
Application.EnableEvents = False
Range("a3") = "KW 39+40"
Application.EnableEvents = True
Else
Application.EnableEvents = False
Range("A3").ClearContents
Application.EnableEvents = True
End If
End If
End Sub
Hier bräuchte man eigentlich kein Application.EnableEvents, denn wenn etwas in A3 geändert wird (was die Routine ja macht), passiert beim erneuten Aufruf dieses Events nichts, da A3 außerhalb von Range("A1:A2") liegt.
Allerdings: sicher ist sicher. Es könnte ja sein, dass du mal etwas ändern willst und in einen Bereich schreiben, der überwacht wird.
Wenn man die Events ausschaltet, sollte man sie tunlichst wieder einschalten. Daher so wenig Befehle wie möglich ohne Events ausführen. Hier könnte z.B. beim Vergleich von A1 mit A2 ein Fehler auftreten. Z.B. wenn eine der beiden Zellen einen Fehlerwert enthält. Dann würde die Routine einfach so abbrechen. Wären dann die Events ausgeschaltet würde das so bleiben.
So ich gehe mal davon aus, dass du in Wirklichkeit mehr machen willst. Denn für den gezeigten Fall ist VBA völlig überflüssig und viel zu umständlich. Es reicht die Formel
=WENN(A1<=A2;"KW 39+40";"") in A3.
Gruß,
Helmut
Win10 - Office365 / MacOS - Office365