Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Fülleffekt per VBA auslesen

Fülleffekt per VBA auslesen
05.09.2013 18:55:30
Nico
Hallo zusammen,
vielleicht kann mir irgendjemand helfen. Ich möchte gerne per VBA den Fülleffekt(also Hintergrundfarbe, Farbverlauf usw.) einer Zelle per Button in einer User-Form auf eine andere Zelle übernehmen. Der Knackpunkt dabei ist allerdings, das der User den Fülleffekt und die Farbe in der ich sag's mal "Musterzelle" selber festlegen kann. Wenn der Button gedrückt wird müssen quasi die Farbeigenschaften der Musterzelle ausgelesen werden und anschließend der gewünschten Zelle zugeordnet werden.
Wie kann ich per VBA diese Fülleffekte einer Zelle auslesen? Ich komme irgendwie nicht dahinter.
Vielen Dank schon mal für Eure Hilfe
Gruß, Nico

Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fülleffekt per VBA auslesen
05.09.2013 19:10:49
Hajo_Zi
Hallo Nico,
zeichne es mit dem Makrorecorder auf, Format übertragen.

AW: Fülleffekt per VBA auslesen
05.09.2013 19:18:28
Nico
Hallo Hajo,
das habe ich schon gemacht. Da kommt dann sowas raus:
With Selection.Interior
.Pattern = xlPatternRectangularGradient
.Gradient.RectangleLeft = 0.5
.Gradient.RectangleRight = 0.5
.Gradient.RectangleTop = 0.5
.Gradient.RectangleBottom = 0.5
.Gradient.ColorStops.Clear
End With
With Selection.Interior.Gradient.ColorStops.Add(0)
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
With Selection.Interior.Gradient.ColorStops.Add(1)
.ThemeColor = xlThemeColorDark1
.TintAndShade = -0.349009674367504
End With
oder sowas:
With Selection.Interior
.Pattern = xlPatternRectangularGradient
.Gradient.RectangleLeft = 0.5
.Gradient.RectangleRight = 0.5
.Gradient.RectangleTop = 0.5
.Gradient.RectangleBottom = 0.5
.Gradient.ColorStops.Clear
End With
With Selection.Interior.Gradient.ColorStops.Add(0)
.ThemeColor = xlThemeColorDark1
.TintAndShade = 0
End With
With Selection.Interior.Gradient.ColorStops.Add(1)
.Color = 13408767
.TintAndShade = 0
End With
Dies sind ja festgelegte Werte, die der User ja dann nicht mehr ändern kann. Wenn er sich als "Musterfarbe" nun Rot statt Blau auswählt, würde mein vom Makrorecorder aufgezeichneter Code keinen Sinn mehr machen.
Ich müsste das Ganze jetzt quasi umdrehen, nur wie?
Danke und Gruß

Anzeige
AW: Fülleffekt per VBA auslesen
05.09.2013 19:24:23
Hajo_Zi
also, wenn ich das aufzeichne kommt da bereinigt anderer Code raus. Keine ahnung was Du auzfgezeuchnet hast.
Selection.Copy
Range("C16").PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False
Gruß Hajo

Anzeige
AW: Fülleffekt per VBA auslesen
05.09.2013 19:31:51
Nico
Was ich aufgezeichnet habe, sind sozusagen die Werte, wenn ich die Zelle mit einem bestimmten Fülleffekt formatiere.
Aber jetzt weiß ich was Du meinst. Ich soll also einfach das Format der Musterzelle per VBA kopieren. An sowas hatte ich auch schon gedacht, dachte jedoch, es gäbe eine Möglichkeit, die vom Recorder aufgezeichneten Werte auch irgendwie auszulesen. Das fände ich etwas eleganter.
Kann ich mit Deiner Version eigentlich auch nur den Fülleffekt (also Farbe und Verlauf) kopieren, ohne Rahmeneinstellungen usw.?
Gruß, Nico

Anzeige
AW: Fülleffekt per VBA auslesen
05.09.2013 19:33:59
Hajo_Zi
Hallo Nico,
Nein es ist alles Format, was Du willst ist mir nicht klar.
Es gin um das Format übertragen, nicht erstellen.
Gruß Hajo

AW: Fülleffekt per VBA auslesen
05.09.2013 19:44:39
Nico
Also nochmal.
Im Tabellenblatt1 in der Zelle A1 ist als Hintergrundfarbe "Rot" mit farbverlauf usw. hinterlegt
Über eine Userform mit einem Button (mal als Beispiel) soll der Fülleffekt (Farbe, Verlauf) auf die Zelle A2 im Tabellenblatt2 übertragen werden. Die Rahmeneinstellungen sollen nicht übertragen werden.
Der Benutzer kann und darf die Hintergrundfarbe in A1 von "Rot" auf "Blau" ändern. Jetzt muss natürlich die blaue Farbe übertragen werden, und nicht die rot. Von daher war mein Gedanke bei betätigen des Buttons die Fülleffekteigenschaften der Zelle A1 auszulesen und die Eigenschaft auf die Zelle A2 zu übertragen. Normale Farbwerte lassen sich recht gut auslesen, jedoch tu ich mich mit den Effekten wie Verlauf usw. etwas schwer. War das verständlicher.
VG
Nico

Anzeige
AW: Fülleffekt per VBA auslesen
05.09.2013 19:47:54
Hajo_Zi
Hallo Nico,
wie macht man einen Farbverlauf, ich kennne das nur über bedingte Formatierung.
Übertrage die Formel für die Bedingte Formatierung.
Mir ist das jertzt zu aufwendig.
Gruß Hajo

Anzeige
AW: Fülleffekt per VBA auslesen
05.09.2013 19:53:45
Nico
Zelle markieren
rechts klicken
Zelle formatieren
Reiter "Ausfüllen" wählen
Fülleffekte
Farbe auswählen usw.
Das hat nix mit bedingter Formatierung zu tun.
Gruß, Nico

AW: Fülleffekt per VBA auslesen
05.09.2013 19:57:09
Hajo_Zi
das ist auch in VBA aufwendig, ich würde Format übertragen und dann das Löschen was stört, also Rahmen. Das ist einfacher.
Gruß Hajo

Anzeige
AW: Fülleffekt per VBA auslesen
05.09.2013 20:00:26
Nico
Dachte ich mir schon. Schade eigentlich... Na gut, kann man nix machen. Danke trotzdem.
Gruß, Nico

AW: Fülleffekt per VBA auslesen
08.09.2013 21:49:32
Tino
Hallo,
obwohl der Thread schon geschlossen ist hier mal ein Versuch dein oben genanntes Problem relativ einfach zu lösen. Eigentlich brauchst du dir nur die Eigenschaften des Interior - Objektes genauer ansehen. Frage alle Ereignisse ab und schreibe sie in eine Variabel.
Abgesehen davon halte ich den dir vorgeschlagenen Weg von Hajo_Zi für den Besserer, da er sicher schneller ist und du nicht Unmengen Variabeln bereitstellen musst.
Der Code ist nur ein schnelles Beispiel. Es fehlt jegliche Funktionalität zum Fehlerabfang.

Sub Zellfarbeuebertragen()
Dim vFarbe1 As Variant, oFüllmuster As Variant, iWinkel As Integer
Dim vFarbe2 As Variant, sgVerlauf1 As Single, sgVerlauf2 As Single
With Selection.Interior
oFüllmuster = .Pattern
iWinkel = .Gradient.Degree
End With
With Selection.Interior.Gradient.ColorStops.Add(0)
vFarbe1 = .ThemeColor
sgVerlauf1 = .TintAndShade
End With
With Selection.Interior.Gradient.ColorStops.Add(1)
vFarbe2 = .ThemeColor
sgVerlauf2 = .TintAndShade
End With
With ActiveSheet.Cells(2, 4).Interior
.Pattern = oFüllmuster
.Gradient.Degree = iWinkel
.Gradient.ColorStops.Clear
End With
With ActiveSheet.Cells(2, 4).Interior.Gradient.ColorStops.Add(0)
.ThemeColor = vFarbe1
.TintAndShade = sgVerlauf1
End With
With ActiveSheet.Cells(2, 4).Interior.Gradient.ColorStops.Add(1)
.ThemeColor = vFarbe2
.TintAndShade = sgVerlauf2
End With
End Sub

Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Fülleffekt per VBA auslesen und übertragen


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und die VBA-Entwicklungsumgebung:

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  2. Erstelle ein neues Modul:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsm)" und wähle "Einfügen" → "Modul".
  3. Füge den VBA-Code ein:

    • Kopiere den folgenden VBA-Code und füge ihn in das Modul ein:
    Sub Zellfarbeuebertragen()
       Dim vFarbe1 As Variant, oFüllmuster As Variant, iWinkel As Integer
       Dim vFarbe2 As Variant, sgVerlauf1 As Single, sgVerlauf2 As Single
    
       With Selection.Interior
           oFüllmuster = .Pattern
           iWinkel = .Gradient.Degree
       End With
    
       With Selection.Interior.Gradient.ColorStops.Add(0)
           vFarbe1 = .ThemeColor
           sgVerlauf1 = .TintAndShade
       End With
    
       With Selection.Interior.Gradient.ColorStops.Add(1)
           vFarbe2 = .ThemeColor
           sgVerlauf2 = .TintAndShade
       End With
    
       With ActiveSheet.Cells(2, 4).Interior
           .Pattern = oFüllmuster
           .Gradient.Degree = iWinkel
           .Gradient.ColorStops.Clear
       End With
    
       With ActiveSheet.Cells(2, 4).Interior.Gradient.ColorStops.Add(0)
           .ThemeColor = vFarbe1
           .TintAndShade = sgVerlauf1
       End With
    
       With ActiveSheet.Cells(2, 4).Interior.Gradient.ColorStops.Add(1)
           .ThemeColor = vFarbe2
           .TintAndShade = sgVerlauf2
       End With
    End Sub
  4. Führe den Code aus:

    • Wähle die Zelle mit dem gewünschten Fülleffekt aus und führe das Makro aus, um die Farbeigenschaften zu übertragen.

Häufige Fehler und Lösungen

  • Fehler: "Objektvariable nicht festgelegt"

    • Lösung: Stelle sicher, dass die Zelle, von der du die Fülleffekte auslesen möchtest, korrekt ausgewählt ist.
  • Fehler: Der Fülleffekt wird nicht richtig übertragen

    • Lösung: Überprüfe, ob der Fülleffekt der Zelle tatsächlich ein Farbverlauf ist und dass der Code die richtigen Eigenschaften abruft.

Alternative Methoden

Eine alternative Methode, um den Fülleffekt zu übertragen, besteht darin, die Formatübertragung zu verwenden und unerwünschte Formate manuell zu entfernen. Du kannst dafür den Copy-Befehl in Kombination mit PasteSpecial nutzen, um nur die Formate zu kopieren, ohne die Rahmeneinstellungen:

Selection.Copy
Range("A2").PasteSpecial Paste:=xlPasteFormats
Application.CutCopyMode = False

Praktische Beispiele

  1. Beispiel für die Übertragung eines Farbverlaufs:

    • Wenn in Zelle A1 ein blauer Farbverlauf hinterlegt ist, wird dieser auf Zelle A2 übertragen, wenn du das Makro ausführst.
  2. Beispiel für das Ändern der Farbe:

    • Ändere die Hintergrundfarbe in A1 und führe das Makro erneut aus, um die neue Farbe auf A2 zu übertragen.

Tipps für Profis

  • Nutze die Interior-Eigenschaft, um detaillierte Informationen über Fülleffekte auszulesen.
  • Achte darauf, die ThemeColor-Eigenschaft wie .ThemeColor = xlThemeColorDark1 zu verwenden, um spezifische Farben zuzuweisen.
  • Teste deinen Code gründlich, um sicherzustellen, dass er mit verschiedenen Fülleffekten funktioniert.

FAQ: Häufige Fragen

1. Wie kann ich den Fülleffekt einer Zelle manuell ändern? Du kannst den Fülleffekt ändern, indem du die Zelle markierst, mit der rechten Maustaste darauf klickst und "Zelle formatieren" auswählst. Wähle dann den Reiter "Ausfüllen".

2. Kann ich den Fülleffekt auch mit bedingter Formatierung erreichen? Ja, du kannst eine bedingte Formatierung erstellen, um verschiedene Fülleffekte basierend auf bestimmten Bedingungen anzuwenden, allerdings wird dies nicht direkt über VBA ausgelesen.

3. Was ist der Unterschied zwischen Fülleffekt und bedingter Formatierung? Der Fülleffekt bezieht sich auf die Hintergrundfarbe einer Zelle, während die bedingte Formatierung auf Regeln basiert, die das Aussehen der Zelle ändern, wenn bestimmte Bedingungen erfüllt sind.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige