Frage von syrena1992, 31

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

Hallo,

ich habe folgendes Anliegen: Ich möchte in Excel mit VBA etwas machen. Hier einmal der Code:

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("j10")) Is Nothing Then
    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 If
End Sub 

Ich möchte, dass, wenn ich in Zelle S6 einen Wert ändere, das ganze erneut durchgeführt wird.

Wie binde ich das ein? Vielen Dank!!!

Syrena

Expertenantwort
von Iamiam, Community-Experte für Excel, 11

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

Expertenantwort
von Suboptimierer, Community-Experte für Excel, 22
If Not Intersect(Target, Range("J10,S6")) Is Nothing Then
Kommentar von Ninombre ,

das ist die einfachere Lösung

Kommentar von syrena1992 ,

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

Kommentar von Suboptimierer ,

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.

Expertenantwort
von Ninombre, Community-Experte für Excel, 19

das ist eine Änderung der zweiten Zeile:

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

Keine passende Antwort gefunden?

Fragen Sie die Community