278 Aufrufe
Gefragt in Tabellenkalkulation von la-cm Mitglied (142 Punkte)
Hi Leute.

Hatte schon lange keine Anfrage, da bisher alles so lala gefunzt hat. Leider hab ich nun ein Problem, dass nicht so will, wie ich mir das vorstelle.

Ich habe eine Tabelle für eine Stundenplanung erstellt. Pro Tag 8 einzelne Zellen, welche mit einer bedingten Formatierung hinterlegt sind (solange Zelle leer ist - bestimmte Farbe).

Manchmal ist es erforderlich Zellen zu verbinden. Da die Planung vor "unbeabsichtigten" Änderungen geschützt sein muss, hab ich ein Macro erstellt, mit welchem Zellen verbunden werden können:

Sub verbinden()
ActiveSheet.Unprotect Password:="x" 'Passwort für Blattschutz anpassen
If Selection.MergeCells Then
Selection.UnMerge
Else
Selection.Merge
End If
ActiveSheet.Protect Password:="x" 'Passwort für Blattschutz anpassen
End Sub

Mit diesem Macro können Zellen trotz Blattschutz verbunden werden bzw. die Verbindung wieder aufgehoben werden. Leider ist dann aber auch die bedingte Formatierung weg. Hab schon daran gedacht mit einer ausgeblendeten Zelle die Formatierung nach der Aufhebung wieder herstellen zu lassen, kann diesen Vorgang jedoch nicht ins Macro einbauen.

Hat wer eine Idee

Danke im Voraus

la.cm

13 Antworten

+1 Punkt
Beantwortet von beverly_ Experte (3.3k Punkte)
Bearbeitet von beverly_

Hi,

das hat mit Streit oder Besserwisserei absolut nichts zu tun - aber wenn dich ein Helfer um etwas bittet, was er zur Lösung deines Problems benötigt, dann solltest du das schon entsprechend ausführen, denn nur du siehst deine Tabelle. Versuche es mal so:

Sub verbinden()
    ActiveSheet.Unprotect Password:="x" 'Passwort für Blattschutz anpassen
    With Selection
        If .MergeCells Then
            .UnMerge
        Else
            .Merge
            .FormatConditions(1).Delete
            .FormatConditions.Add Type:=xlCellValue, Operator:=xlLessEqual, _
                Formula1:="="""""""""""""
            With .FormatConditions(1).Borders(xlLeft)
                .LineStyle = xlContinuous
                .TintAndShade = 0
                .Weight = xlThin
            End With
            With .FormatConditions(1).Borders(xlRight)
                .LineStyle = xlContinuous
                .TintAndShade = 0
                .Weight = xlThin
            End With
            With .FormatConditions(1).Borders(xlTop)
                .LineStyle = xlContinuous
                .TintAndShade = 0
                .Weight = xlThin
            End With
            With .FormatConditions(1).Borders(xlBottom)
                .LineStyle = xlContinuous
                .TintAndShade = 0
                .Weight = xlHairline
            End With
            With .FormatConditions(1).Interior
                .PatternColorIndex = xlAutomatic
                .Color = 49407
                .TintAndShade = 0
            End With
        End If
    End With
    ActiveSheet.Protect Password:="x" 'Passwort für Blattschutz anpassen
End Sub

Bis später, Karin

0 Punkte
Beantwortet von la-cm Mitglied (142 Punkte)
Hi.

Danke funktioniert

Gruß

la.cm
0 Punkte
Beantwortet von la-cm Mitglied (142 Punkte)
Bearbeitet von la-cm
Hi.

Möchte noch mal kurz nachhaken:

Wollte eine 2. bedingte Formatierung auf die gleichen Zellen anwenden. Da funktioniert der Code nicht mehr. Gibt es da einen Befehl, dass nur eine bestimmte Formatierung angewendet wird.

2. Formatierung erzeugt eine andere Farbe in den Zellen (auf welche oa. Code angewendet wird) wenn in einer bestimmten Zelle ein Feiertag angezeigt wird.

Habe mir so etwas gedacht, kann es aber nicht einarbeiten:

If .selection.cells = .ThemeColor = xlThemeColorDark1 Then
    End Sub
    Else

ActiveSheet.Unprotect Password:="x" 'Passwort für Blattschutz anpassen
    With Selection
        If .MergeCells Then
            .UnMerge
        Else
            .Merge ............

Der Makrorecorder hat das aufgezeichnet:

Range("F1:F8").Select
    Selection.FormatConditions.Add Type:=xlExpression, Formula1:="=F$2=""x"""
    Selection.FormatConditions(Selection.FormatConditions.Count).SetFirstPriority
    With Selection.FormatConditions(1).Interior
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = -0.349986266670736
    End With
    Selection.FormatConditions(1).StopIfTrue = False
End Sub

Ist jetzt nur mehr ein optischer Aufputz :)

Gruß

la.cm
...