Schrift bei Klick in Zelle ändern

Bild

Betrifft: Schrift bei Klick in Zelle ändern
von: Tim
Geschrieben am: 19.10.2015 15:38:07

Hallo,
ich möchte gerne beim Klick auf eine Zelle (Bereich D10:D100) prüfen, ob der jeweilige Text durchgestrichen ist oder nicht und ihn entsprechend ändern.
Da ich VBA-Anfänger bin, habe ich mir mit einer Hilfsspalte beholfen, die entweder "Hide" (Text durchgestrichen) oder "Show" (Text normal) zeigt.
Bisher habe ich den folgenden Code, der bei einer bestimmten Zelle funktioniert.
Kann mir jemand sagen, was ich hier ändern muss, damit dies bei allen Zellen im obigen Bereich funktioniert ?
Wenn es noch einen einfacheren Weg ohne Hilfsspalte gibt, wäre ich auch dafür dankbar.
Gibt es zusätzlich noch die Möglichkeit, die Schriftfarbe auf rot (durchgestrichen) bzw. schwarz (normal) zu ändern ? Das wäre perfekt.
Ich weiss, das ist .color = xxx aber mir war nicht klar, wie ich das hier mit dem Durchstreichen kombinieren kann.
Mein Code:


Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ' show / hide optional services
    If Not Intersect(Target, Range("D15")) Is Nothing Then
        If Worksheets(1).Range("E15") = "Hide" Then
            Worksheets(1).Range("E15") = "Show"
            Worksheets(1).Rows("16:20").Hidden = False
        Else
            Worksheets(1).Range("E15") = "Hide"
            Worksheets(1).Rows("16:20").Hidden = True
        End If
    End If
    If Not Intersect(Target, Range("D16:D20")) Is Nothing Then
        If Worksheets(1).Range("E16") = "Hide" Then
            Worksheets(1).Range("E16") = "Show"
            Worksheets(1).Range("D16").Font.Strikethrough = False
        Else
            Worksheets(1).Range("E16") = "Hide"
            Worksheets(1).Range("D16").Font.Strikethrough = True
        End If
    End If
End Sub

Vielen Dank im Voraus,
Tim

Bild

Betrifft: AW: Schrift bei Klick in Zelle ändern
von: Rudi Maintaire
Geschrieben am: 19.10.2015 15:47:19
Hallo,
so?

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Count = 1 Then
    If Len(Target) Then
      If Not Intersect(Range("D10:D100"), Target) Is Nothing Then
        With Target.Font
          .Strikethrough = Not .Strikethrough
          .Color = -.Strikethrough * 255
        End With
      End If
    End If
  End If
End Sub
Gruß
Rudi

Bild

Betrifft: AW: Schrift bei Klick in Zelle ändern
von: Tim
Geschrieben am: 19.10.2015 16:09:36
Hallo Rudi,
vielen Dank für die schnelle Hilfe - das funktioniert super !
Damit ich es beim nächsten Mal auch richtig anwende, kannst Du mir noch folgendes sagen:
1) Ist Not .Strikethrough das gleiche wie Strikethrough = False ?
2) Was genau bedeutet -. vor dem Strikethrough ? Das habe ich so noch nicht gesehen.
Viele Grüße,
Tim

Bild

Betrifft: AW: Schrift bei Klick in Zelle ändern
von: Rudi Maintaire
Geschrieben am: 19.10.2015 16:25:38
Hallo,
1) Ist Not .Strikethrough das gleiche wie Strikethrough = False ?
Nein. Das dreht die Eigenschaft einfach um. True wird False und False wird True.
-. vor dem Strikethrough ?
True = -1 und False = 0. Ergo ergibt .Color -(-1)*255 = 255 oder -0*255 = 0 somit rot oder schwarz.
Der . stellt den Bezug zu With Target.Font her.
Ohne With-Rahmen sieht das so aus:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  If Target.Count = 1 Then
    If Len(Target) Then
      If Not Intersect(Range("D10:D100"), Target) Is Nothing Then
        Target.Font.Strikethrough = Not Target.Font.Strikethrough
        Target.Font.Color = -Target.Font.Strikethrough * 255
      End If
    End If
  End If
End Sub
Gruß
Rudi

Bild

Betrifft: AW: Schrift bei Klick in Zelle ändern
von: Tim
Geschrieben am: 19.10.2015 16:26:36
Das ist super - danke für die tolle Erklärung, ist eine riesen Hilfe !
Viele Grüße,
Tim

Bild

Betrifft: AW: Schrift bei Klick in Zelle ändern
von: Hajo_Zi
Geschrieben am: 19.10.2015 15:52:34
Hallo Tim,
falls mehr als eine Zelle gewählt.

Option Explicit                                     ' Variablendefinition erforderlich
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    '***********************************************
    '* H. Ziplies                                  *
    '* 19.10.15                                    *
    '* erstellt von HajoZiplies@web.de             *
'* http://Hajo-Excel.de/
 *
    '***********************************************
    Dim RaBereich As Range                          ' Variable für Bereich
    Dim RaZelle As Range                            ' Variable für Zelle
    Set RaBereich = Range("C8:D15,L22:M39, O21:O26")       ' Bereich der Wirksamkeit
    ' noch mehr Bereiche
    'Set RaBereich = Union(Range("C11:AG11 , C13:AG13, C15:AG15 , C17:AG17"), _
        '    Range("C35:AE35, C37:AE37, C43:AG43, C45:AG45 , C47:AG47 , C49:AG49"), _
        '    Range("C67:AF67 , C69:AF69 , C75:AG75 , C77:AG77 , C79:AG79 , C81:AG81"), _
        '    Range("C99:AF99 , C101:AF101, C107:AG107 , C109:AG109 , C111:AG111"), _
        '    Range("C127:AG127 , C129:AG129 , C131:AG131 , C133:AG133 , C139:AF139"), _
        '    Range("C155:AG155, C157:AG157 , C159:AG159 , C161:AG161 , C163:AG163"), _
        '    Range("C179:AF179 , C181:AF181, C187:AG187 , C189:AG189 , C191:AG191"))
    ' ab Vesion XP braucht der Schutz nicht aufgehoben werden
    ' Formatierung bei Schutz kann über Dialog Schutz eingestellt werden
    ' Zelle die in dem Bereich liegen auf die Variable schreiben
    ' damit werden nur noch die Zellen bearbeitet die im vorgegeben Bereich liegen
    ' jede Zelladresse ist einzeln angegeben
    Set RaBereich = Intersect(RaBereich, Target)
    If Not RaBereich Is Nothing Then
        'ActiveSheet.Unprotect ("Passwort")
        For Each RaZelle In RaBereich
            With RaZelle.Font
                If .Strikethrough = False Then
                    .Strikethrough = True
                Else
                    .Strikethrough = False
                End If
            End With
        Next RaZelle
        'ActiveSheet.protect ("Passwort")
    End If
    Set RaBereich = Nothing                         ' Variable leeren
End Sub


Bild

Betrifft: AW: Schrift bei Klick in Zelle ändern
von: Tim
Geschrieben am: 19.10.2015 16:27:02
Hallo Hajo,
vielen Dank auch dafür !
Viele Grüße,
Tim

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Schrift bei Klick in Zelle ändern"