Excel - OptionButton automatisch aktualisieren nach Wertänderung in Zelle

McGillis

Lieutenant
Registriert
Aug. 2007
Beiträge
566
Hallo zusammen,

Ich schreibe gerade ein Excel-Tool.
Ich habe eine Tabelle erstellt, in welcher verschiedene Werte ausgerechnet werden.
Je nach ausgewähltem Kontrollkästchen wird eine bestimmte Zelle aus der Tabelle in eine Liste kopiert.
Ändert sich aber jetzt der Wert in der ausgewählten Zelle, so muss ich erst nocheinmal ein anderes Kontrollkästchen anwählen und dann wieder auf das alte zurück, damit der neue Wert in die Liste weitergegeben wird.

Gibt es eine Möglichkeit, dass sich die Optionbox automatisch aktualisiert, falls sich ein Wert ändert?

Private Sub OptionButton1_Click() '16er Zelle einfach'
If ActiveSheet.OptionButton1.Value = True Then
ActiveSheet.Range("B14") = "16"
ActiveSheet.Range("B15") = "18,5"
ActiveSheet.Range("B31") = ActiveSheet.Range("L20")
ActiveSheet.Range("B32") = ActiveSheet.Range("N20")
Else
ActiveSheet.Range("B14") = ""
ActiveSheet.Range("B15") = ""
End If
End Sub

Dankeschön!
 
Bist du nur auf der Suche nach dem Worksheet_Change()-Ereignis?
 
Ändert sich aber jetzt der Wert in der ausgewählten Zelle
Unter diesem Aspekt stimme ich der Vermutung von paep zu.

Aber Vorsicht! Achte auf die Funktion Application.EnableEvents. Die muss beim OptionButton-Makro zu Beginn auf False und am Ende wieder auf True. Denn das Schreiben von Werten in Zellen, eben auch per Makro, löst das Ereignis Worsheet_Change aus, und das kann zu »Irritationen« führen.

CN8
 
Dankeschön für eure Hilfe!

Ich bin leider ein absoluter Laie in Excel, könnt ihr mir die Befehle in meinen oben beigefügten code eintragen?

Vielen vielen Dank!

Gruß Mischa
 
Es ist jetzt ein wenig schwer das zu ergänzen, ohne deine Exceldatei zu kennen. Es muss auch nicht in deinen bisherigen Code.

Eher muss dein bisheriger Code in eine eigene Sub und diese wird dann beim Button Click aufgerufen (wie bisher) und außerdem noch in das Change-Ereignis.

In etwa so:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Datenakualisierung
End Sub

Private Sub OptionButton1_Click() '16er Zelle einfach'
    Datenaktualisierung
End Sub

Private Sub Datenaktualisierung()
    If ActiveSheet.OptionButton1.Value = True Then
        ActiveSheet.Range("B14") = "16"
        ActiveSheet.Range("B15") = "18,5"
        ActiveSheet.Range("B31") = ActiveSheet.Range("L20")
        ActiveSheet.Range("B32") = ActiveSheet.Range("N20")
    Else
        ActiveSheet.Range("B14") = ""
        ActiveSheet.Range("B15") = ""
    End If
End Sub
 
paep schrieb:
Es ist jetzt ein wenig schwer das zu ergänzen, ohne deine Exceldatei zu kennen. Es muss auch nicht in deinen bisherigen Code.

Eher muss dein bisheriger Code in eine eigene Sub und diese wird dann beim Button Click aufgerufen (wie bisher) und außerdem noch in das Change-Ereignis.

In etwa so:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Datenakualisierung
End Sub

Private Sub OptionButton1_Click() '16er Zelle einfach'
    Datenaktualisierung
End Sub

Private Sub Datenaktualisierung()
    If ActiveSheet.OptionButton1.Value = True Then
        ActiveSheet.Range("B14") = "16"
        ActiveSheet.Range("B15") = "18,5"
        ActiveSheet.Range("B31") = ActiveSheet.Range("L20")
        ActiveSheet.Range("B32") = ActiveSheet.Range("N20")
    Else
        ActiveSheet.Range("B14") = ""
        ActiveSheet.Range("B15") = ""
    End If
End Sub

Dankeschön für deine Mühe!
Jedoch stürzt Excel ab, sobald ich den Code ausführe.
Ich habe leider echt keine Ahnung was da falsch sein könnte..
Hast du eine Idee?

Liebe Grüße

Mischa
 
Zurecht - war eine 1a Endlosschleife (durch die Änderungen durch den VBA Code wurde das Change-Ereignis immer wieder aufgerufen).

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Application.Intersect(Target, Range("B14:B35")) Is Nothing Then
        Datenaktualisierung
    End If
End Sub

Versuche es mal so in etwa. Genau kann ich es dir ohne deine Excel Datei nicht sagen.
 
Zurück
Oben