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

Marko soll bei Wert in Zelle Starten!

Forumthread: Marko soll bei Wert in Zelle Starten!

Marko soll bei Wert in Zelle Starten!
28.08.2024 09:44:47
Kruemelmonstar
Hallo,

ich möchte gerne einen Makrobefehl starten lassen, wenn ein Wert in einer Zelle ( V22 ) sich ergibt.

Die Zelle hat eine Formel ( Sverweis) und gibt das Wort Ja oder nein wieder.
Bei Ja soll ein Marko "TSW" gestartet werden.

Suche hat mir dies vorgeschlagen :

Sub worksheet_change(Target As Range)


If Target.Address = "$V$22" And Target.Value = "Ja" Then Call TSW

End If

End Sub


Jedoch bekomme ich den Fehler " Fehler beim Kompilieren: Deklaration der Prozedur entspricht nucht der Beschreibung eines Ereignisses...."
Anzeige

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SVerweis lößt kein Event aus
28.08.2024 09:51:44
Fennek
Hallo,

beim Lesen konnte ich keinen Syntax-Error erkennen, aber wenn ein Sverweis andere Werte zurück gibt, lößt das kein VBA-Event aus. Wie wäre es mit einen ActiveX-Element die Zelle V22 zu überwachen?

mfg
AW: Marko soll bei Wert in Zelle Starten!
28.08.2024 09:55:47
daniel
Hi
der korrekte Prozedurkopf ist:
Sub worksheet_change(ByVal Target As Range)

das "ByVal" muss angebeben werden, da beim Weglassen dieser Angabe "ByRef" der Default-Wert ist und dieser hier nicht zulässig ist


um sicher zu gehen, dass die Eventmakros auch funktionieren sollte man sie nicht vollständig selber schreiben, sondern die automatisch erstellen lassen:
1. im VBA-Editor auf das Modul des Tabellenblatts wechseln
2. in der rinken Combobox über dem Codefenster "Worksheet" auswählen
3. in der rechten Combobox über dem Codefenster das gewünschte Eventmakro auswählen
dann wird das Makro als Grundgerüst mit Start und Endzeile erstellt und du kannst deinen Code dazwischen schreiben.

für das Funktionieren ist die richtige Schreibweise der Kopfzeile wichtig.
ändern darf man höchsten das Private/Public am Anfang und man kann, wenn man möchte, die Bezeichnung der Übergabeparameter ändern ("Target"), was aber keinen positiven Effekt hat.
Alles andere muss so bleiben wie dort geschrieben.

Gruß Daniel
Anzeige
AW: Marko soll bei Wert in Zelle Starten!
28.08.2024 09:56:12
Der Steuerfuzzi
Hallo,

die Änderung durch eine Formel löst das Worksheet_Change event nicht aus. Allerdings muss ja irgendeine Eingabe zur Änderung der SVERWEIS-Formel führen. Setze dort das Event ein und prüfe das Ergebnis der Zelle in der der SVERWEIS steht.

Grüße
Michael
AW: Marko soll bei Wert in Zelle Starten!
28.08.2024 10:01:46
MCO
Moin!

So sollte es klappen:
Private Sub worksheet_change(ByVal Target As Range)


If Range("V22") = "Ja" Then Call TSW

End Sub


Gruß, MCO
Anzeige
AW: Marko soll bei Wert in Zelle Starten!
28.08.2024 10:26:10
BoskoBiati2
Hi MCO,

hast Du das getestet?

Gruß


Edgar
AW: Marko soll bei Wert in Zelle Starten!
28.08.2024 11:11:27
Kruemelmonstar
Hallo MCO,

der Code macht seine arbeit, jedoch zu sehr gut.

Durch den Ausgelösten Makro merkt der Sheet eine Änderung und fürt den Befehler TSW immer wieder erneut aus. Obwohl in V22 sich nichts ändert.

Das heißt:
Feld V22 ändert sich auf Ja, Dein Code Fängt an zu Arbeiten und löst den Code TSW aus.
TSW fängt an und löscht werte in den Spalten A bis O. Das wieder merkt der erste Code und will wieder TSW starten.

Damit habe ich eine entlos schleife was nicht geplant war.

Anzeige
AW: Marko soll bei Wert in Zelle Starten!
28.08.2024 11:23:36
daniel
Hi
du solltest mit If Not Intersect(Target, Range(???)) is Noting prüfen, ob die Eingabzelle, welche für die Wertänderung der SVerweis-Funktion in V22 verantwortlich ist, prüfen. ??? sollte also die Zelle sein, auf die dein SVerweis im ersten Parameter referenziert.
beim Change-Event liegen im Target immer nur die Zellen, die der Anwender oder ein Makro direkt geändert haben, aber nicht die Zellen, die eine Formel enthalten und das Formelergebnis sich aufgrund einer neuberechnung der Formel geändert hat.

weiterhin sollte man in Makros, welche Zellinhalte ändern, den Aufruf der Eventmakros ausschalten, wenn dieser nicht erwünscht ist.
dazu gibt es die Anweisung Application.EnableEvents = False
danach werden keine Eventmarkos mehr ausgeführt.
zum aktivieren der Eventmakros muss der Befehl Appication.EnableEvents = True ausgeführt werden.
Dies muss auf jeden Fall noch im Makro passieren, da sonst die Events ausgeschaltet bleiben.
Sollte da mal passieren (beim Testen oder nach einem Fehler), dann kann man diesen Befehl auch im Direktfenster eingeben und ausführen.a

Gruß Daniel
Anzeige
AW: Marko soll bei Wert in Zelle Starten!
29.08.2024 08:16:26
MCO
Moin,

Ja, sorry, war natürlich ungetestet, weil das ungerufene Makro auch nicht da war.
Hätte ich mir aber denken können.

Wie schon in anderem Beitrag angemerkt, müssen die Ereignisse abgeschaltet und wieder eingeschaltet werden.

Private Sub worksheet_change(ByVal Target As Range)

Application.enableevents = false
If Range("V22") = "Ja" Then Call TSW
Application.enableevents = true
End Sub


So sollte es gehen.

Gruß, MCO
Anzeige
AW: Marko soll bei Wert in Zelle Starten!
28.08.2024 12:00:52
Kruemelmonstar
Hallo daniel,

Für dich zur Info.
Die Eingabe für den Sverweis erfolgt über die Zelle S10. Dort erfolgt die Info durch ein Listenfeld. Die Werte sind fest.

Schreibe ich nun den Zusatz, If Not Intersect(Target, Range("S10")) kommt der Fehler "Typen Unverträglichkeit". Wobei er bei der Formel ein THEN haben möchte. IS nothing akzeptiert er nicht.

Anzeige
AW: Marko soll bei Wert in Zelle Starten!
28.08.2024 12:21:05
daniel
Dann mach’s halt so wie du es am Anfang gemacht hast mit den richtigen Zellen

If Target. address = "$S$10" and Range("V22").Value = "ja" then

Gruß Daniel
AW: Marko soll bei Wert in Zelle Starten!
28.08.2024 12:30:19
BoskoBiati2
Hi,

bei mir akzeptiert er das:

If Not Intersect(Target, Range("S10")) Is Nothing Then


ohne Probleme

Gruß

Edgar
Anzeige
AW: Marko soll bei Wert in Zelle Starten!
28.08.2024 19:24:31
GerdL
Moin
Private Sub Worksheet_Change(ByVal Target As Range)


If Target.Address(0, 0) = "S10" Then
If LCase(Range("V22")) = "ja" Then
Application.EnableEvents = False
Call TSW
Application.EnableEvents = True
End If
End If

End Sub

Gruß Gerd
Anzeige
AW: SVerweis lößt kein Event aus
28.08.2024 09:55:26
BoskoBiati2
Hi,

lautet die Syntax für dieses Makro nicht so:

Sub worksheet_change(byval Target As Range)


Gruß

Edgar
;

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