BackColor und BorderColor in Frame wechseln VBA

Hallo

Ich wollte in einem Formular mehrer Frames(Rahmen) die Farbe wechseln. Aber irgendwie gestalltet sich das ziemlich schwierig. Habe eine Schleife für die Frames und ein Array für Back-,Border- und ForeColor.
Ich weis nur nicht wie ich es in:
UserSurface.Frame?.??? = RGB(100,100,100) bringe.
Mein Code sieht bis jetzt so aus.

Dim intIndex1 As Integer
Dim i, intCount, iFrame
Dim Color()
Color = Array(„BackColor“, „BorderColor“, „ForeColor“)

For i = 1 To 6

iFrame = „Frame“ & i

For intIndex1 = LBound(Color) To UBound(Color)
intCount = intCount + 1

'Debug.Print „UserSurface.“; iFrame; „.“; (Color(intIndex1)); " = RGB(100, 100, 100)"
'UserSurface("" & Trim(Str(iFrame))).BackColor = RGB(100, 100, 100)
'UserSurface („Frame“ & Trim(Str(i))) & Trim(Str(Color(intIndex1))) = RGB(100, 100, 100)

Color(intIndex1) = intCount

Next
Next

Nur irgendwie geht das nicht.
Ich hoffe mir kann jemand bei dem Problem helfen.

Danke

Gruß David

Hallo David

meine Excel-Zeit ist schon eine Weile her (Profil ist etwas veraltet), deshalb nur ein kleiner Tipp.

Versuch mal für die Rahmen:
xxx.Borders(xlEdgeRight).Colors = RGB(100, 100, 100)
xxx.Borders.Color = RGB(100, 100, 100)

Falls Du den Rahmen einer Zelle einfärben möchtest, musst Du erst die automatische Farbgebung deaktivieren, indem Du einer Zelle eine beliebige Farbe, aber nicht „automatisch“ zuweist.
(Format/Zelle/Rahmen Linien…)

Vielleicht musst Du bei Deinem Problem ähnlich vorgehen.

Sonst:
Kannst Du Dein Vorhaben manuell in der normalen Excel-Oberfläche durchführen?
Dann könntest Du den Makro-Rekorder mitlaufen lassen (Extras/Makros/Aufzeichnen) und später nachvollziehen, wie Excel das dann so gemacht hat.

Hoffe zumindest Anregungen geliefert zu haben,

Gruß, Jens

Hallo Jens

ich möchte ja mehrer mit einmal ansprechen und nicht alle einzeln auflisten, deswegen die Schleife und das Array.
Richtig heißen muß es ja:
UserSurface.Frame1.BackColor = RGB(100,100,100)
möchte aber das 1 in Schleife ist um 10 Frames gleichzeitig anzusprechen und BackColor in Array damit ich auch noch BorderColor und ForeColor ansprechen kann.

Danke

Ok, Problem verstanden.
Hatte das auch mal, habe aber auch keine direkte Lösung gefunden.
ABER: Ich meine, ich hätte damals eine erfolgreiche Behelfslösung gefunden. Das Programm habe ich auf der Arbeit, werde morgen mal nachschauen.
Melde mich morgen Abend wieder.

Hallo David

diesen Code-Schnipsel habe ich aus meinem funktionierendem Programm kopiert. Vielleicht hilft er Dir.
Prinzip: Objekt selbst erzeugen und benennen, damit hast Du die volle Kontrolle über den Namen.

LeftPos, TopPos, Breite, Höhe: integer

For i = 1 To 4
Name = „R“ & i
Worksheets(„Tabelle1“).Shapes.AddShape(msoShapeRectangle, LeftPos, TopPos, Breite, Höhe).Name = Name1
Worksheets(„Tabelle1“).Shapes(Name1).Line.Visible = msoTrue
Worksheets(„Tabelle1“).Shapes(Name1).Line.ForeColor.SchemeColor = 23
Worksheets(„Tabelle1“).Shapes(Name1).Line.Weight = 1.2
Next i

Gruß, Jens

Hi Jens

danke erst mal für die schnelle Antwort.
Werde es dann mal ausprobieren.

Danke

War im Urlaub!

habe schon ewig nichts mehr im VB gemacht, aber nun gut:
'Frame1…6 anlegen
'Oder besser Frame1 mit Index(0…5) anlegen!

Private Sub Form_Load()
Dim Color_A As Variant
Dim i As Integer

'Farben festlegen
Color_A = Array(RGB(100, 100, 100), RGB(150, 150, 150), RGB(200, 200, 200))

For i = 0 To 5 Step 1
Frame1(i).BackColor = Color_A(0)
'Frame1(i).BorderColor = Color_A(1) === Die Eigenschaft ‚BorderColor‘ existiert bei Frames leider nicht. Da hilft nur Rahmen vom Frame deaktivieren und selbst einen Rahmen mittels ‚Line‘ o. Ä. zeichnen.
Frame1(i).ForeColor = Color_A(2)
Next i
End Sub

MfG

Dim X As Control
For Each X In UserForm1.Controls
If TypeOf X Is MsForms.Frame Then
X.BackColor = RGB(255, 0, 0)
End If
Next X