.FormatConditions / mehrere Formatierungeinstellungen
#1
Hallo Ihr VBA Spezialisten,

Im Makro mit mehreren " Bedingten Formatierungen" möchte ich die Formatierung für das " Tagesdatum" nicht einfach nur mit einer farbigen Zelle darstellen, sondern mit einem Fülleffekt und zwei Rahmenlinien.
um viele With und End With zu sparen möchte ich den Code zusammenfassen. Klappt leider nicht ganz so wie ich will, weil ich nicht syntaxsicher bin.
(farbige Zelle klappt aber ...)

so sieht mein Code ( verkürzt um einige Bedingungen) aus.

With Range("E2:N2")
   .Cells(1).Select
   .FormatConditions.Delete   'löscht bestehende Formatierungen
   
   .FormatConditions.Add Type:=xlExpression, Formula1:="=WOCHENTAG(E$1;2)>5"               'Wochenenden
       .FormatConditions(1).Interior.ColorIndex = 48
       
   .FormatConditions.Add Type:=xlExpression, Formula1:="=SVERWEIS(E$1;DAT_Feier;1;0)"   'Feiertage
       .FormatConditions(2).Interior.ColorIndex = 6
       
   .FormatConditions.Add Type:=xlExpression, Formula1:="=LINKS(Tabelle2!C$2;1)=""M"""  'Montage
       .FormatConditions(3).Interior.ColorIndex = 37


....... ( bis hierhin alles Problemlos)

.FormatConditions.Add Type:=xlExpression, Formula1:="=E$1=Heute()"  'Tagesdatum
       .FormatConditions(11).Interior
       .Borders (xlLeft)
       .LineStyle = xlContinuous
       .Color = -16776961
       .TintAndShade = 0
       .Weight = xlThin
 
       .Borders (xlRight)
       .LineStyle = xlContinuous
       .Color = -16776961
       .TintAndShade = 0
       .Weight = xlThin
   
       .Interior
       .Pattern = xlPatternLinearGradient
       .Gradient.Degree = 0
       .Gradient.ColorStops.Clear

       .Interior.Gradient.ColorStops.Add (0)
       .ThemeColor = xlThemeColorDark1
       .TintAndShade = 0
 
       .Interior.Gradient.ColorStops.Add (0.5)
       .ThemeColor = xlThemeColorAccent1
       .TintAndShade = 0
 
       .Interior.Gradient.ColorStops.Add (1)
       .ThemeColor = xlThemeColorDark1
       .TintAndShade = 0

   End With

und das funktioniert eben nicht wie gedacht. Hier bräuchte ich eure Hilfe
Gruß
Michael
Win 10
Office 2010 & 2016
Top
#2
Für Interessierte,

Ich habe meine einzelnen Formatierungen jetzt dann doch nochmal in With und End With gebettet. So funktioniert´s
Hatte zwar gedacht, dass es im Code auch etwas kürzer/ kompakter ginge - aber wohl nicht.

Sieht jetzt so aus


With .......(Andere Formatierungen)

.FormatConditions.Add Type:=xlExpression, Formula1:="=E$1=Heute()" 'tagesdatum
With .FormatConditions(11).Borders(xlLeft)
.LineStyle = xlContinuous
.Color = -16776961
.TintAndShade = 0
.Weight = xlThin
End With

With .FormatConditions(11).Borders(xlRight)
.LineStyle = xlContinuous
.Color = -16776961
.TintAndShade = 0
.Weight = xlThin
End With

With .FormatConditions(11).Interior
.Pattern = xlPatternLinearGradient
.Gradient.Degree = 0
.Gradient.ColorStops.Clear
End With

With .FormatConditions(11).Interior.Gradient.ColorStops.Add(0)
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With

With .FormatConditions(11).Interior.Gradient.ColorStops.Add(0.5)
.ThemeColor = xlThemeColorAccent1
.TintAndShade = 0
End With

With .FormatConditions(11).Interior.Gradient.ColorStops.Add(1)
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
End With

Gruß
Michael
Win 10
Office 2010 & 2016
Top
#3
Hallo Michael,

Withs kannst Du wohl eher nicht mehr einsparen, dafür einige Worte, wenn Du die With noch mehr schachtelst

z.B.
Code:
With .FormatConditions(11).Interior
  .Pattern = xlPatternLinearGradient
  With .Gradient
    .Degree = 0
    .ColorStops.Clear
    With .ColorStops.Add(0)
      .ThemeColor = xlThemeColorDark1
      .TintAndShade = 0
    End With
    With .ColorStops.Add(0.5)
      .ThemeColor = xlThemeColorAccent1
      .TintAndShade = 0
    End With
    With .ColorStops.Add(1)
      .ThemeColor = xlThemeColorDark1
      .TintAndShade = 0
    End With
  End With
End With
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Mick-DUS
Top
#4
Hallo André,

da geht noch was: Smile
With .FormatConditions(11).Interior
.Pattern = xlPatternLinearGradient
With .Gradient
.Degree = 0
With .ColorStops
.Clear
With .Add(0)
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
With .Add(0.5)
.ThemeColor = xlThemeColorAccent1
.TintAndShade = 0
End With
With .Add(1)
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
End With
End With
End With
Gruß Uwe
[-] Folgende(r) 2 Nutzer sagen Danke an Kuwer für diesen Beitrag:
  • schauan, Mick-DUS
Top
#5
Danke für Eure Inspriation.

Lassen sich in dem With-Konstrukt die Linien noch einbauen?


With .FormatConditions(11).Borders(xlLeft)
.LineStyle = xlContinuous
.Color = -16776961
.TintAndShade = 0
.Weight = xlThin
End With

With .FormatConditions(11).Borders(xlRight)
.LineStyle = xlContinuous
.Color = -16776961
.TintAndShade = 0
.Weight = xlThin
End With


Ich habe schon ein paar Varianten probiert, aber nur Fehlermeldungen generiert
Ansonsten läuft´s cool :94:

Gruß
Michael
Win 10
Office 2010 & 2016
Top
#6
Hallöchen,

natürlich.
Code:
With .FormatConditions(11)
  With .Borders(xlLeft)
    .LineStyle = xlContinuous
    .Color = -16776961
    .TintAndShade = 0
    .Weight = xlThin
  End With
  With .Borders(xlRight)
    .LineStyle = xlContinuous
    .Color = -16776961
    .TintAndShade = 0
    .Weight = xlThin
  End With
  With .Interior
    .Pattern = xlPatternLinearGradient
    With .Gradient
      .Degree = 0
      With .ColorStops
        .Clear
        With .Add(0)
          .ThemeColor = xlThemeColorDark1
          .TintAndShade = 0
        End With
        With .Add(0.5)
          .ThemeColor = xlThemeColorAccent1
          .TintAndShade = 0
        End With
        With .Add(1)
          .ThemeColor = xlThemeColorDark1
          .TintAndShade = 0
        End With
      End With
    End With
  End With
End With
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
[-] Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:
  • Mick-DUS
Top
#7
Jo, so etwas hab ich mir schon gedacht.

Ich grübel aber aus Spass an der Freude an der Variante, alles Doppelte nur einmal zu schreiben.
Denn bis auf xlLeft und xlRight sind die Eigenschaften ja gleich

hatte schon probiert, .Borders mit zwei Indexangaben zu bestücken, --jehtnich

Aber vielen Dank fürs gemeinsame denken
Gruß
Michael
Win 10
Office 2010 & 2016
Top
#8
Hi Michael,

nein, das geht leider nicht. Entweder nimmst DU alle Seiten, oder eben jede einzeln.
Du kannst höchstens noch sparen, wenn Du Standardangaben weglässt, könnten z.B. diese sein:
.Weight = xlThin
.TintAndShade = 0
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste