Worksheet_change

Hallo zusammen.

Leider komme ich nicht weiter. Ich habe für die Lösung einer Aufgabe die worksheet-change Methode gefunden. Um das mal auszuprobieren habe ich einen einfachen Code gebastelt, damit ich die grundsätzliche Funktion probieren kann. Hier der Code:

Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = „$A$1“ Then
MsgBox „hurra“
End Sub

Ich erstehe die Methode derart, dass die MsgBox erscheinen sollte, wenn ich in Zelle A1 etwas ändere. Ich tippe zum testen einfach eine neue Zahl in die Zelle und dann auf Enter. Leider passiert danach nichts weiter, außer das die Zelle A2 aktiviert wird.

Liegt es vielleicht an einer Einstellung?

Des Weiteren habe ich noch die folgende ariante versucht - jedoch mit dem gleichen Ergebnis.

Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim zelle As Range, max As Integer

Set zelle = Intersect(Range(„A2:A100“))
If Not zelle Is Nothing Then
MsgBox „hurra“
End If

End Sub

Grüße, Aiko.

Grüezi Aiko

Leider komme ich nicht weiter. Ich habe für die Lösung einer
Aufgabe die worksheet-change Methode gefunden. Um das mal
auszuprobieren habe ich einen einfachen Code gebastelt, damit
ich die grundsätzliche Funktion probieren kann. Hier der Code:

Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = „$A$1“ Then
MsgBox „hurra“
End Sub

Ich verstehe die Methode derart, dass die MsgBox erscheinen
sollte, wenn ich in Zelle A1 etwas ändere. Ich tippe zum
testen einfach eine neue Zahl in die Zelle und dann auf Enter.
Leider passiert danach nichts weiter, außer das die Zelle A2
aktiviert wird.

Liegt es vielleicht an einer Einstellung?

Des Weiteren habe ich noch die folgende ariante versucht -
jedoch mit dem gleichen Ergebnis.

Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim zelle As Range, max As Integer

Set zelle = Intersect(Range(„A2:A100“))
If Not zelle Is Nothing Then
MsgBox „hurra“
End If

End Sub

Beide Codes sollten an sich lauffähig sein - wo genau hast Du sie denn reingeschrieben?
Sie gehören ins Codemodul des betreffenden Tabellenblattes und nicht etwa in einallgemeines Modul.

Ansonsten könnten die Makros noch deaktiviert sein, wenn die Makro-Sicherheit auf ‚Hoch‘ steht.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

hallo Aiko,

dein Code wird wie schon gesagt im falschen Modul stehen.
Oder du hast Application.EnableEvents auf False gesetzt.

Sonst hättest du beim zweiten Code eine Fehlermeldung erhalten müssen weil du Intersect falsch benutzt,probiers mal so:

Sub Worksheet\_SelectionChange(ByVal Target As Range)
Dim zelle As Range
Set zelle = Intersect(Target, Range("A2:A100"))
If Not zelle Is Nothing Then
 MsgBox "hurra"
End If
End Sub

Gruß
Reinhard

Hallo Thomas.

Aha - grundsätzlicher Fehler meinerseits.

Ich hatte ein neues Modul gesetzt und in dieses Modul die beiden Codes geschrieben. Habe die Codes jetzt in Tabellenblatt 3 verlegt und dort funktioniert es.

Kann ich also dadurch die Funktion eines Codes auf ein bestimmtes Tabellenblatt begrenzen?

Grüße und Dank, Aiko.

Hallo Aiko,

Ich hatte ein neues Modul gesetzt und in dieses Modul die
beiden Codes geschrieben. Habe die Codes jetzt in
Tabellenblatt 3 verlegt und dort funktioniert es.

das glaube ich beim zweiten Code erstmal nicht.

Kann ich also dadurch die Funktion eines Codes auf ein
bestimmtes Tabellenblatt begrenzen?

Ja, der Code reagiert nur dort.

Gruß
Reinhard

Hallo Reinhard.

Ja, das mit der Fehlermeldung habe ich tatsächlich bekommen. Mit dem „Application.EnableEvents auf False gesetzt“ kann ich nichts zu sagen. Ich habe in den einzelnen Menüs noch nichts dergleichen gefunden und im Code selbst steht es nicht. Was genau kann man damit machen - allgemein Aktionen verhindern, die das Makro im Tabellenblatt ausführen soll? Ich kenne da noch so etwas wie Do:Events, das müsste ja dann einen entsprechenden punktuellen Effekt habeb, oder?

Grüße, Aiko.

Grüezi Aiko

Aha - grundsätzlicher Fehler meinerseits.

Ich hatte ein neues Modul gesetzt und in dieses Modul die
beiden Codes geschrieben. Habe die Codes jetzt in
Tabellenblatt 3 verlegt und dort funktioniert es.

Fein, so ist es richtig.

Kann ich also dadurch die Funktion eines Codes auf ein
bestimmtes Tabellenblatt begrenzen?

Die Ereignis-Codes wirken immer auf der Stufe auf der sie erstellt werden.
Im VBA-Editor kannst Du im lilnken DropDown den ‚Level‘ voreinstellen und dann im rechten DropDown das Ereignis festelegen. Dort siehst Du auch welche Ereignisse es auf der betreffenden Ebene gibt.

Dasselbe gilt dann auch in ‚Diese Arbeitsmappe‘.


Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo Aiko,

Ich hatte ein neues Modul gesetzt und in dieses Modul die
beiden Codes geschrieben. Habe die Codes jetzt in
Tabellenblatt 3 verlegt und dort funktioniert es.

das glaube ich beim zweiten Code erstmal nicht.

Gruß
Reinhard

Hallo Reinhard.

Na, das mit dem Fehler hatten wir ja schon *zwinker*

Grüße, Aiko.

Hallo Aiko.

Mit dem „Application.EnableEvents auf False gesetzt“ kann ich
nichts zu sagen. Ich habe in den einzelnen Menüs noch nichts
dergleichen gefunden und im Code selbst steht es nicht. Was
genau kann man damit machen - allgemein Aktionen verhindern,

Mit „Application.EnableEvents = False“ kannst Du unter Anderem verhindern, daß eine Prozedur rekursiv wird. Das bedeutet: Wenn Du im „Worksheet_Change“-Ereignis Code verwendest wie z.B.

Range("$A$1") = IrgendeinWert

, dann ruft sich das Ereignis immer wieder selbst auf und die Anwendung hängt in einer Schleife fest.

VG
Carsten