Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1868to1872
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA: Formen einfärben (RGB)

VBA: Formen einfärben (RGB)
06.02.2022 11:11:20
Chris
Hallo miteinander,
ich möchte gerne über ein Makro meine Formen einfärben. Dazu steht in Spalte A der Objekt Name der jeweiligen Formen und in Spalte C die Farbe im RGB Format, getrennt mit Kommata.
Userbild
Kann hier jemand mit einem Makro helfen?
Anbei eine Beispieldatei mit 3 Zeilen und Formen. Mein Original hat rund 100 Zeilen und Formen.
https://www.herber.de/bbs/user/150920.xlsm
Falls es das vereinfacht, kann der Farbcode auch auf drei Spalten aufgeteilt werden.
Vielen Dank vorab!
Chris

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA: Formen einfärben (RGB)
06.02.2022 11:35:49
{Boris}
Hi,
z.B. so:

Sub test()
Dim r As Long, g As Long, b As Long
Dim C As Range
For Each C In Range("A2:A4")
r = Split(C.Offset(0, 2), ",")(0)
g = Split(C.Offset(0, 2), ",")(1)
b = Split(C.Offset(0, 2), ",")(2)
Tabelle1.Shapes(CStr(C)).Fill.ForeColor.RGB = RGB(r, g, b)
Next C
End Sub
VG, Boris
AW: VBA: Formen einfärben (RGB)
06.02.2022 11:48:21
Chris
Ein Traum, das funktioniert, vielen Dank :)
Eine Anschlussfrage: Wie müsste ich das Makro anpassen, wenn ich die Tabelle1 meine Daten und in Tabelle2 die Formen habe?
Sorry, bin echt noch ein Einsteiger was Makros angeht ;)
Viele Grüße
Chris
Anzeige
2 Blätter
06.02.2022 11:52:14
{Boris}
Hi,

Sub test()
Dim r As Long, g As Long, b As Long
Dim C As Range
For Each C In Tabelle1.Range("A2:A4")
r = Split(C.Offset(0, 2), ",")(0)
g = Split(C.Offset(0, 2), ",")(1)
b = Split(C.Offset(0, 2), ",")(2)
Tabelle2.Shapes(CStr(C)).Fill.ForeColor.RGB = RGB(r, g, b)
Next C
End Sub
VG, Boris
Habt ihr beiden...
06.02.2022 20:10:44
Beverly
Hi Boris und Chris,
...mal getestet was passiert, wenn (versehentlich) ein Shape gelöscht wird? Das ergibt einen Laufzeitfehler - also solltet ihr noch eine Fehlerbehandlung einbauen.
Ist es nicht einfacher, so wie in meinem Code die Schleife über die vorhandenen Shapes zu machen und ihren Namen in Spalte A zu suchen? Falls ein Shape fehlt passiert da nämlich nichts.
Bis später
Karin

Anzeige
Fehlerbehandlung...
07.02.2022 08:55:02
{Boris}
Hi Karin,
...ist ja immer der 2. Schritt. Hier lagen konkret 3 Shapes mit ihren 3 korrekten Namen in A2:A4 vor - die Aufgabe bestand ja primär darin, wie man den Shapes die kommagetrennten RGBs verpassen kann: a) Shapes korrekt referenzieren und b) RGB trennen# und zuweisen.
Natürlich läuft das in einen Fehler, wenn irgendwas nicht existiert. Das kann aber auch einen Lerneffekt haben ;-)
Aber Du hast ja nun schon den 2. Schritt mit eingebaut, insofern hat der OP ja bereits alles, was er braucht ;-)
VG, Boris
AW: Fehlerbehandlung...
07.02.2022 10:29:54
Beverly
Hi Boris,
...sollte m.E. nicht zum 2. Schritt gehören sondern sollte unbedingt Bestandteil des 1. Schrittes sein, denn andernfalls kommt es häufig dazu, dass man einen bereits fertigen Code völlig umbauen muss - und das ist sicher nicht Sinn und Zweck der Programmierung. ;-)
Bis später
Karin

Anzeige
Sehe ich anders...
07.02.2022 10:50:12
{Boris}
Hi Karin,
...denn dann müsste man auch alle erdenklichen Fehler berücksichtigen.
Dein Code läuft z.B. auch vor die Wand, wenn der kommagetrennte RGB-Wert wegen eines Tippfehlers nicht passt (z.B. 0,78,255x).
Da hab ich keine Lust, immer alles Mögliche vorauszudenken (Ausnahme: Ereigniscodes - da gehört eine Fehlerbehandlung immer dazu).
VG, Boris
AW: VBA: Formen einfärben (RGB)
06.02.2022 11:47:37
Beverly
Hi Chris,

Sub FormFaerben()
Dim shaShape As Shape
Dim rngZelle As Range
Dim r As Long
Dim g As Long
Dim b As Long
For Each shaShape In ActiveSheet.Shapes
Set rngZelle = Columns(1).Find(shaShape.Name, lookat:=xlWhole)
If Not rngZelle Is Nothing Then
r = Split(rngZelle.Offset(0, 2), ",")(0)
g = Split(rngZelle.Offset(0, 2), ",")(1)
b = Split(rngZelle.Offset(0, 2), ",")(2)
shaShape.Fill.ForeColor.RGB = RGB(r, g, b)
End If
Next shaShape
End Sub
Bis später
Karin

Anzeige

255 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige