Supportnet / Forum / Tabellenkalkulation
VBA - Formel, Zelländerung, Makrostart
Frage
Hi!
Ich habe das gleichen Problem wie unter [url]https://supportnet.de/threads/1603899[/url] beschrieben.
Leider komme ich mit dem Lösungsansatz von Beverly alias Karin nicht ganz klar.
Wenn sich der über eine Wenn-Formel definierte Zellinhalt in Spalte A3 ändert, soll das Makro starten.
Ich habe dazu eine Musterdatei unter
[url]http://www.netupload.de/detail.php?img=be9fdcf2d665b6213824ce45d0f3feaa.xls[/url]
abgelegt.
Vielen Dank für die Unterstützung.
Tom
Antwort 1 von fedjo
Antwort 2 von Beverly
Hi Tom,
da du das UserForm nur dann aufrufen willst, wenn sich der Wert in A3 von "gerade" in "ungerade" oder umgekehrt ändert, muss zuerst festgestellt werden, welcher Wert in A3 steht. Das erfolgt mit dem Worksheet_SelectionChange Ereignis. Dann muss verglichen werden, ob die Eingabe in A1 eine Änderung in A3 auslöst - das erfolgt im Worksheet_Change Ereignis.
Bis später,
Karin
da du das UserForm nur dann aufrufen willst, wenn sich der Wert in A3 von "gerade" in "ungerade" oder umgekehrt ändert, muss zuerst festgestellt werden, welcher Wert in A3 steht. Das erfolgt mit dem Worksheet_SelectionChange Ereignis. Dann muss verglichen werden, ob die Eingabe in A1 eine Änderung in A3 auslöst - das erfolgt im Worksheet_Change Ereignis.
Option Explicit
Dim strWert As String
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then If Range("A3") <> strWert Then UserForm1.Show
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$A$1" Then strWert = Range("A3")
End Sub
Bis später,
Karin
Antwort 3 von fedjo
Hallo Tom,
habe den Code geändert.
In das Codefenster von Tabelle1 einfügen.
Gruß
fedjo
Private Sub Worksheet_Calculate()
Static za3 As Variant
If za3 <> Range("A3").Value Then
za3 = Range("A3").Value
UserForm1.Show
End If
End Sub
habe den Code geändert.
In das Codefenster von Tabelle1 einfügen.
Gruß
fedjo
Private Sub Worksheet_Calculate()
Static za3 As Variant
If za3 <> Range("A3").Value Then
za3 = Range("A3").Value
UserForm1.Show
End If
End Sub
Antwort 4 von Tomschi
Halli Hallo!
DANKE, dass Ihr mich bei meinem "Projekt" so unterstützt!
Das Problem liegt darin, dass nicht nur die Zelle A1 eine Änderung der Formel in Zelle A3 auslösen kann.
In der echten Datei gibt es ca. 10 Möglichkeiten, die die Formel von WAHR auf FALSCH und umgekehrt setzt.
@fedjo:
Die Datei ist toll, allerdings wird bei erstmaliger Cursorpositionierung auf die Zelle A1 ebenfalls das Makro und somit das UserForm aufgerufen. Dies ist aber nicht gewünscht.
Muss jetzt leider weg.
Melde mich dann wieder.
Schönen Sonntag.
Tom
DANKE, dass Ihr mich bei meinem "Projekt" so unterstützt!
Das Problem liegt darin, dass nicht nur die Zelle A1 eine Änderung der Formel in Zelle A3 auslösen kann.
In der echten Datei gibt es ca. 10 Möglichkeiten, die die Formel von WAHR auf FALSCH und umgekehrt setzt.
@fedjo:
Die Datei ist toll, allerdings wird bei erstmaliger Cursorpositionierung auf die Zelle A1 ebenfalls das Makro und somit das UserForm aufgerufen. Dies ist aber nicht gewünscht.
Muss jetzt leider weg.
Melde mich dann wieder.
Schönen Sonntag.
Tom
Antwort 5 von Marie
na dann setz doch einfach in
Gruß Marie
Private Sub Workbook_Open()
den Cursor auf eine Zelle, die nicht das Makro auslösen kann, mit Sheets("Tabelle1").Range("E15").Select
Gruß Marie
Antwort 6 von Beverly
Hi Tom,
das war aber aus deiner Beispieldatei nicht ersichtlich, da sich die Formel nur auf A1 bezieht.
Ändere den Code wie folgt:
Den Bereich der Zellen musst du an deine Bedingungen anpassen.
Bis später,
Karin
das war aber aus deiner Beispieldatei nicht ersichtlich, da sich die Formel nur auf A1 bezieht.
Ändere den Code wie folgt:
Option Explicit
Dim strWert As String
Dim raBereich As Range
Private Sub Worksheet_Change(ByVal Target As Range)
Set raBereich = Range("A1,A10,B20,C30")
If Not Intersect(Target, raBereich) Is Nothing Then If Range("A3") <> strWert Then UserForm1.Show
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set raBereich = Range("A1,A10,B20,C30")
If Not Intersect(Target, raBereich) Is Nothing Then strWert = Range("A3")
End Sub
Den Bereich der Zellen musst du an deine Bedingungen anpassen.
Bis später,
Karin
Antwort 7 von Tomschi
Halli Hallo!
Danke für die Infos!
Werde in den naechsten Tagen (hoffentlich noch vor meinem Urlaub) die Codes mal austesten.
In der Zwischenzeit hat sich eine weitere Frage für mich ergeben:
Leider wird in der Echtdatei die "Änderungszelle" auch von anderen Blättern beeinflusst.
Wenn ich dort etwas ändere erscheint jedes Mal das Userform.
Ich habe mir bis dato so beholfen, dass ich unter
Private Sub Worksheet_SelectionChange() --> ohne (ByVal Target As Range)
auf das aktive Blatt abfrage und nur bei Übereinstimmung
UserForm1.Show aufrufe.
Vielleicht liegt es ja gerade an --> ohne (ByVal Target As Range)
@Beverly:
Soll ich beide Codes in das entsprechende Tabellenblatt kopieren?
Ciao
Tom
P.S.: Hoffe, Ihr hattet einen guten Start ins Jahr 2008!
Danke für die Infos!
Werde in den naechsten Tagen (hoffentlich noch vor meinem Urlaub) die Codes mal austesten.
In der Zwischenzeit hat sich eine weitere Frage für mich ergeben:
Leider wird in der Echtdatei die "Änderungszelle" auch von anderen Blättern beeinflusst.
Wenn ich dort etwas ändere erscheint jedes Mal das Userform.
Ich habe mir bis dato so beholfen, dass ich unter
Private Sub Worksheet_SelectionChange() --> ohne (ByVal Target As Range)
auf das aktive Blatt abfrage und nur bei Übereinstimmung
UserForm1.Show aufrufe.
Vielleicht liegt es ja gerade an --> ohne (ByVal Target As Range)
@Beverly:
Soll ich beide Codes in das entsprechende Tabellenblatt kopieren?
Ciao
Tom
P.S.: Hoffe, Ihr hattet einen guten Start ins Jahr 2008!
Antwort 8 von Beverly
Hi Tom,
ja, beide Codes in die entsprechende Tabelle.
Auch dir alles Gute für das Neue Jahr.
Bis später,
Karin
ja, beide Codes in die entsprechende Tabelle.
Auch dir alles Gute für das Neue Jahr.
Bis später,
Karin