Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

.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
Antworten 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
Antworten 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
Antworten 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
Antworten 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
Antworten 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
Antworten 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
Antworten 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)
Antworten Top


Gehe zu:


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