Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Private Sub Worksheet_Change(ByVal target As Range

Forumthread: Private Sub Worksheet_Change(ByVal target As Range

Private Sub Worksheet_Change(ByVal target As Range
17.04.2018 13:18:59
Gergö
Hallo alle miteinander,
habe schon einmal tolle Hilfestellung von euch bekommen,
bin wieder zu einem Punkt gekommen wo ich nicht weiterkomme.
Ich habe hier diesen Text aus einem anderem Forum gefunden für meine Zwecke
  • 
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'Erstellt in Bereich E27 bei Klick ein leeres Kästchen oder ein angehaktes Kä stchen
    If Not Intersect(Target(1, 1), [E27]) Is Nothing Then
    With Target(1, 1)
    .Font.Name = "Wingdings" 'Zelle in Schriftart "Wingdings" formatieren
    .Font.Size = 40 'Hier die Grösse anpassen !
    .Value = IIf(.Value = Chr(168), Chr(254), Chr(168)) 'Wechselt zwischen leerem und  _
    angehaktem Kästchen
    End With
    End If
    End Sub
    

  • Mein Ziel ist es diese Anwendung nicht nur auf die Zelle E27 zu begrenzen,
    ich würde diese auch in den Zellen E32, E37, E42, E47, E52 brauchen.
    Wie erstelle ich eine Case hierzu damit es führ mehrere Zellen zutrefen kann?
    Bitte euch um eine möglichst detailierte Beschreibung da ich in sachen VBA wenig verstehe
    Anzeige

    7
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: Private Sub Worksheet_Change(ByVal target As Range
    17.04.2018 13:27:57
    Rudi
    Hallo,
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'Erstellt in Bereich E27 bei Klick ein leeres Kästchen oder ein angehaktes Kästchen
    Select Case Target.Column
    Case 5
    Select Case Target.Row
    Case 27, 32, 37, 42, 47, 52
    With Target(1, 1)
    .Font.Name = "Wingdings" 'Zelle in Schriftart "Wingdings" formatieren
    .Font.Size = 40 'Hier die Grösse anpassen !
    .Value = IIf(.Value = Chr(168), Chr(254), Chr(168)) 'Wechselt zwischen leerem und  _
    _
    angehaktem Kästchen
    End With
    End Select
    End Select
    End Sub
    

    Gruß
    Rudi
    Anzeige
    AW: Private Sub Worksheet_Change(ByVal target As Range
    17.04.2018 13:50:29
    Gergö
    Hallo,
    Hebe es versucht es 1 zu 1 in meine Arbeitsmappe zu kopieren, eine Fehlermeldung erscheint
    "Fehler beim Kompilieren:
    Select Case ohne End Select
    habe es nach meinem Verständnis weiter gesponnen
    sieht so aus:
  • 
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    'Erstellt in Bereich E27 bei Klick ein leeres Kästchen oder ein angehaktes Kästchen
    Select Case Target.Column
    Case 5
    Select Case Target.Row
    Case 27
    With Target(1, 1)
    .Font.Name = "Wingdings" 'Zelle in Schriftart "Wingdings" formatieren
    .Font.Size = 40 'Hier die Grösse anpassen !
    .Value = IIf(.Value = Chr(168), Chr(254), Chr(168)) 'Wechselt zwischen leerem und  _
    angehaktem kästchen
    Case 32
    With Target(1, 1)
    .Font.Name = "Wingdings" 'Zelle in Schriftart "Wingdings" formatieren
    .Font.Size = 40 'Hier die Grösse anpassen !
    .Value = IIf(.Value = Chr(168), Chr(254), Chr(168)) 'Wechselt zwischen leerem und  _
    angehaktem kästchen
    Case 42
    With Target(1, 1)
    .Font.Name = "Wingdings" 'Zelle in Schriftart "Wingdings" formatieren
    .Font.Size = 40 'Hier die Grösse anpassen !
    .Value = IIf(.Value = Chr(168), Chr(254), Chr(168)) 'Wechselt zwischen leerem und  _
    angehaktem kästchen
    Case 47
    With Target(1, 1)
    .Font.Name = "Wingdings" 'Zelle in Schriftart "Wingdings" formatieren
    .Font.Size = 40 'Hier die Grösse anpassen !
    .Value = IIf(.Value = Chr(168), Chr(254), Chr(168)) 'Wechselt zwischen leerem und  _
    angehaktem kästchen
    Case 52
    With Target(1, 1)
    .Font.Name = "Wingdings" 'Zelle in Schriftart "Wingdings" formatieren
    .Font.Size = 40 'Hier die Grösse anpassen !
    .Value = IIf(.Value = Chr(168), Chr(254), Chr(168)) 'Wechselt zwischen leerem und  _
    angehaktem kästchen
    End With
    End Select
    End Select
    End Sub
    

  • und es kommt die gleiche Fehlermeldung
    Was fehlt mir hier?
    Anzeige
    AW: Private Sub Worksheet_Change(ByVal target As Range
    17.04.2018 13:59:26
    fcs
    Hallo Gergö,
    es fehlt kein "End Select" sondern mehrer "End With".
    Leider schafft es der Compiler nicht immer offene Schleifen oder Select odeer With correct zu identifizieren.
    Die End With fehlen am Ende der 1. vier Case-Blöcke. Beim letzten hast du es drin.
    Gruß
    Franz
    AW: Private Sub Worksheet_Change(ByVal target As Range
    17.04.2018 14:10:57
    Gergö
    Hallo,
    jap das wars, habe erreich was ich brauche.
    Vielen Dank euch wieder einmal
    Anzeige
    AW: Private Sub Worksheet_Change(ByVal target As Range
    17.04.2018 13:59:38
    Daniel
    Hi
    dir fehlt in allen Case-Fällen außer dem Letzten (52) das END WITH
    Case 52 ist korrekt, alle anderen nicht.
    aber du hast das Prinzip von Select Case noch nicht verstanden.
    wenn mehrere Case-Fälle den gleichen Code haben, dann kann man diese alle zusammenfassen.
    du schreibst
    Select Case Prüfung
    Case "A"
    hier ein Code
    Case "B"
    hier der gleiche code wie bei "A"
    Case "C"
    hier der gleiche Code wie bei "A"
    end Select
    
    das kann man aber dann so zusammenfassen.
    Select Case Prüfung
    Case "A", "B", "C"
    hier ein Code
    End Select
    
    Gruß Daniel
    Anzeige
    AW: Private Sub Worksheet_Change(ByVal target As Range
    17.04.2018 14:18:10
    Gergö
    hatte vermutlich ein Ctrl+c Fehler, habe alles verglichen, passt alles nun
    vielen Dank dir
    AW: Private Sub Worksheet_Change(ByVal target As Range
    17.04.2018 13:35:56
    Daniel
    Hi
    gib bei Intersect als zweite Range alle Zellen an, für die das gelten soll:
    
    If Not Intersect(Target(1, 1), Range("E27,E32,E37,E42,E47,E52") Is Nothing Then
    

    bei vielen aber regelmäßig angeordneten Zellen könnte man es auch berechnen (hier jede 5. Zeile):
    If Target.Column = 5 Then
    If Target.Row >= 27 then
    if Target.row 

    Gruß Daniel
    Anzeige
    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Entdecke relevante Threads

    Schau dir verwandte Threads basierend auf dem aktuellen Thema an

    Alle relevanten Threads mit Inhaltsvorschau entdecken
    Anzeige

    Infobox / Tutorial

    Excel VBA: Verwendung von Worksheet_Change und Worksheet_SelectionChange


    Schritt-für-Schritt-Anleitung

    Um die Worksheet_SelectionChange-Ereignisprozedur in Excel VBA zu nutzen, gehe wie folgt vor:

    1. Öffne deine Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.

    2. Suche im Projektfenster das Arbeitsblatt, in dem du den Code anwenden möchtest.

    3. Doppelklicke auf das Arbeitsblatt, um das Codefenster zu öffnen.

    4. Füge den folgenden Code ein:

      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
         Select Case Target.Column
             Case 5
                 Select Case Target.Row
                     Case 27, 32, 37, 42, 47, 52
                         With Target(1, 1)
                             .Font.Name = "Wingdings"
                             .Font.Size = 40
                             .Value = IIf(.Value = Chr(168), Chr(254), Chr(168))
                         End With
                 End Select
         End Select
      End Sub
    5. Schließe den VBA-Editor und teste die Funktionalität, indem du auf die Zellen E27, E32, E37, E42, E47 oder E52 klickst.


    Häufige Fehler und Lösungen

    • Fehler beim Kompilieren: Select Case ohne End Select
      Dies tritt auf, wenn du vergisst, das End Select für die Select Case-Anweisung zu setzen. Stelle sicher, dass jede Select Case-Anweisung ein entsprechendes End Select hat.

    • End With fehlt
      Wenn du den Fehler "End With fehlt" erhältst, stelle sicher, dass jede With-Anweisung ein passendes End With hat.

    • Syntaxfehler oder unerwartetes Verhalten
      Überprüfe den Code auf korrektes Einrücken und schließe alle offenen Anweisungen. Achte darauf, dass der Code in der richtigen Subroutine platziert ist.


    Alternative Methoden

    Eine alternative Methode zur Verwendung der Worksheet_SelectionChange-Ereignisprozedur ist die Verwendung von Intersect, um mehrere Zielzellen zu definieren:

    If Not Intersect(Target, Range("E27,E32,E37,E42,E47,E52")) Is Nothing Then
        ' Dein Code hier
    End If

    Diese Methode ermöglicht es dir, einen Block von Zellen zu definieren, anstatt jede Zelle einzeln zu überprüfen.


    Praktische Beispiele

    Hier sind einige Beispiele, wie du die Private Sub Worksheet_Change(ByVal Target As Range) und Worksheet_SelectionChange(ByVal Target As Range) effektiv nutzen kannst:

    1. Checkbox in mehreren Zellen
      Du kannst den oben gezeigten Code verwenden, um in mehreren Zellen eine Checkbox zu erstellen, die zwischen einem leeren und einem angehakten Kästchen wechselt.

    2. Datenvalidierung
      Verwende die Worksheet_Change-Ereignisprozedur, um Eingaben in bestimmten Zellen zu validieren. Beispiel:

      Private Sub Worksheet_Change(ByVal Target As Range)
         If Not Intersect(Target, Me.Range("A1:A10")) Is Nothing Then
             If Target.Value < 0 Then
                 MsgBox "Bitte geben Sie einen positiven Wert ein."
             End If
         End If
      End Sub

    Tipps für Profis

    • Kombiniere Case-Anweisungen: Wenn mehrere Case-Bedingungen denselben Code ausführen, kannst du diese zusammenfassen, um den Code zu vereinfachen.

    • Verwende Target.Calculate: Wenn du Berechnungen durchführen möchtest, kannst du Target.Calculate innerhalb deiner Subroutine verwenden, um sicherzustellen, dass die Zelle, die geändert wurde, aktualisiert wird.

    • Debugging: Nutze Debug.Print innerhalb deiner Subroutinen, um Werte während der Ausführung zu protokollieren und so leichter Fehler zu finden.


    FAQ: Häufige Fragen

    1. Was ist der Unterschied zwischen Worksheet_Change und Worksheet_SelectionChange?
    Worksheet_Change wird ausgelöst, wenn der Inhalt einer Zelle geändert wird, während Worksheet_SelectionChange ausgeführt wird, wenn eine andere Zelle ausgewählt wird.

    2. Wie kann ich mehrere Zellen in einer Select Case-Anweisung abdecken?
    Du kannst mehrere Case-Bedingungen in einem einzigen Select Case zusammenfassen, indem du sie durch Kommas trennst, oder du kannst die Zellen in einem Array definieren.

    3. Was bedeutet ByVal Target As Range?
    ByVal Target As Range bedeutet, dass die Variable Target einen Bereich von Zellen darstellt, die in der aktuellen Subroutine bearbeitet werden. ByVal stellt sicher, dass der ursprüngliche Wert nicht verändert wird.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Entdecke mehr
    Finde genau, was du suchst

    Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

    Suche nach den besten Antworten
    Unsere beliebtesten Threads

    Entdecke unsere meistgeklickten Beiträge in der Google Suche

    Top 100 Threads jetzt ansehen
    Anzeige