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
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.
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
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?
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, 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?
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.
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*
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.