Beim ändern einer bestimmten Zelle Makro erneut ausführen?

3 Antworten

mein Vorschlag (nochmal anders):


Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("j10")) Is Nothing Then MakroABC
Target select
if not intersect(Target, Range("S6")) is nothing then MakroABC
End Sub


Private sub MakroABC() 
Select Case Range("j10").Value
Case "manuell"
Range("s7:u7").ClearContents
Case "Anfang & Ende"
Range("s7").Value = Worksheets("PEPStauchung").Range("d2").Value
End Select
end sub


Die Auslagerung mit Aufruf durch das WS-Ch hat den Vorteil, dass Du so beliebig viele Aktionen fallweise bedingt aufrufen kannst. Dass Du hier zweimal dasselbe Makro aufrufst, ist ja ein Zufall.

Das Target.select ist nur vorsichtshalber für den Fall, dass das aufgerufene Makro die Selection ändert, sollte eigentlich aber auch so überflüssig sein, nur sicherheitshalber. (Target sollte ja unverändert gespeichert bleiben)

Warum allerdings Suboptimierers Lösung nicht geht, ist mir auch schleierhaft, vllt weil das Leerzeichen nach dem Komma vergessen wurde? Range("j10, s6")
Und Ninombres Methode sollte auch gehen, diese Art der Bereichszusammenstellung  ist normalerweise sicher!.

Übrigens habe ich die einzeilige -Alternativlose- Variante des if-then-Befehls verwendet, die braucht kein End if

das ist eine Änderung der zweiten Zeile:

If Not Intersect(Target, Union(Range("j10"), Range("s6"))) Is Nothing Then

If Not Intersect(Target, Range("J10,S6")) Is Nothing Then
Woher ich das weiß:Berufserfahrung – Programmierer

Ninombre  24.08.2016, 15:28

das ist die einfachere Lösung

0
syrena1992 
Fragesteller
 24.08.2016, 15:34

Wenn ich jetzt j10 ändere, wird das nicht erneut durchgeführt. Gibts dafür auch eine Möglichkeit?

0
Suboptimierer  24.08.2016, 15:40
@syrena1992

Das wundert mich. 

Dein Select Case wird durchgeführt, wenn J10 oder S6 geändert wurden. Range("J10,S6") bezieht sich auf beide Zellen.

Du musst nur bei so etwas aufpassen, dass du nicht Zellen beschreibst, die das Ereignis rekursiv immer und immer wieder wiederholen.
Dann musst du die Ereignisbehandlung kurzfristig deaktivieren und am Ende deiner Bearbeitung wieder aktivieren.

1