Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Shape-Objekte formatieren ?

Shape-Objekte formatieren ?
Stefan
Hallo zusammen,
ich habe ein kleines Problem bei der Formatierung von selbstgebauten Auswahlbuttons.
Nach dem draufklicken soll sich der jeweilge Button verfärben und so die Auswahl signalisieren.
Das mit der Farbe geht auch, nur bei der Änderung der Schriftfarbe bekomme ich eine Fehlermeldung.
Also alles, was in dem unten stehenden Code mit .Fill beginnt funktioniert, alles was mit .Font beginnt produziert einen Fehler. Könnt Ihr mir bitte bei der korrekten Schreibweise behilflich sein ?
With ActiveSheet.Shapes.Range(Array("AutoShape 975", "AutoShape 976", _
"AutoShape 977", "AutoShape 978"))
.Fill.Visible = msoTrue
.Fill.ForeColor.SchemeColor = 22
.Fill.BackColor.SchemeColor = 9
.Fill.TwoColorGradient msoGradientHorizontal, 3
.Font.ColorIndex = xlAutomatic
.Font.Underline = xlUnderlineStyleNone
.Font.Size = 11
End With
Vielen Dank im Voraus.
Gruß
Stefan
Anzeige

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

Betreff
Benutzer
Anzeige
AW: Shape-Objekte formatieren ?
03.08.2010 11:04:53
Ramses
Hallo
Der Makrorekorder offenbart es
With Selection.Characters(Start:=1, Length:=17).Font
.Name = "Arial"
.FontStyle = "Standard"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = 3
End With
Gruss Rainer
Anzeige
AW: Shape-Objekte formatieren ?
03.08.2010 11:08:58
Stefan
Hallo Rainer,
danke für die Rückmeldung. Ich will auf jeden Fall 'Select' vermeiden, daher mein Versuch mit dem Shape.Range. ...
Meinst Du, die Formatierung des Textes geht nicht ohne Select ?
Gruß
Stefan
AW: Shape-Objekte formatieren ?
03.08.2010 11:12:50
Ramses
Hallo
Es geht doch nicht um "Select",.... sondern das was ich FETT dargestellt habe.
Gruss Rainer
Anzeige
AW: Shape-Objekte formatieren ?
03.08.2010 11:30:53
Stefan
Du hast schon meinen VBA-Status gesehen ?
Was bedeutet denn das Characters ? Worauf bezieht sich das denn (1 - 17) ?
So, wie Du das geschrieben hast, wurde doch vorher etwas selektiert !?
Ich mag mich ja ein wenig schusselig anstellen, aber vielleicht gibst Du mir trotzdem noch ein wenig Starthilfe :-)
Besten Dank.
Gruß
Stefan
Anzeige
AW: Shape-Objekte formatieren ?
03.08.2010 11:53:02
Ramses
Hallo
Dein VBA-Status interessiert mich nicht, wenn du solche Codes mit Shape-Array's hier reinstellst.
Auch entbindet dein VBA -Status dich nicht, dein Gehirn einzuschalten und nachzudenken :-)
Ich habe dich auch darauf hingewiesen, dass es um das FETT-Geschriebene in meinem Beitrag geht.
Wenn du wie in deinem Beispiel nur mit ".Font" arbeitest, weiss EXCEL doch nicht was es machen soll, d.h. WELCHEN Text es verändern soll. Ausserdem kann es das Object so gar nicht ansprechen. Dies funktioniert eben nur mit Select, wenn du die Farbe global verändern willst
With ActiveSheet.Shapes.Range(Array("AutoShape 975", "AutoShape 976", _
"AutoShape 977", "AutoShape 978"))
.Fill.Visible = msoTrue
.Fill.ForeColor.SchemeColor = 22
.Fill.BackColor.SchemeColor = 9
.Fill.TwoColorGradient msoGradientHorizontal, 3
.Characters(Start:=1, Length:=17).Font.ColorIndex = xlAutomatic
.Characters(Start:=1, Length:=17).Font.Underline = xlUnderlineStyleNone
.Characters(Start:=1, Length:=17).Font.Size = 11

End With
oder etwas einfacher vielleicht
With ActiveSheet.Shapes.Range(Array("AutoShape 975", "AutoShape 976", _
"AutoShape 977", "AutoShape 978"))
.Fill.Visible = msoTrue
.Fill.ForeColor.SchemeColor = 22
.Fill.BackColor.SchemeColor = 9
.Fill.TwoColorGradient msoGradientHorizontal, 3
With .Characters(Start:=1, Length:=17)
.Font.ColorIndex = xlAutomatic
.Font.Underline = xlUnderlineStyleNone
.Font.Size = 11
End With

End With
Wenn es um die globale Textfarbe für den gesamten Text in der Box geht, kann man das auch so lösen
With ActiveSheet.Shapes.Range(Array("AutoShape 975", "AutoShape 976", _
"AutoShape 977", "AutoShape 978"))
.Fill.Visible = msoTrue
.Fill.ForeColor.SchemeColor = 22
.Fill.BackColor.SchemeColor = 9
.Fill.TwoColorGradient msoGradientHorizontal, 3
With .OLEFormat.Object
.Font.ColorIndex = xlAutomatic
.Font.Underline = xlUnderlineStyleNone
.Font.Size = 11
End With

End With
Gruss Rainer
Anzeige
Sorry...
03.08.2010 11:54:34
Ramses
Hallo
... kommt vielleicht härter rüber als gewollt :-)
Gruss Rainer
AW: Sorry...
03.08.2010 12:19:22
Stefan
Hallo Rainer,
ich bin ja kein Mädchen...
So wie in Beispiel 3 (globale Textfarbe) kann ich das nachvollziehen. Hier fehlt ja jetzt auch das Select wieder. Leider macht er bei 'With .OLEFormat.Object' die Fehlermeldung 'Objekt unterstützt diese Eigenschaft oder Funktion nicht'. Hm....
Ich frag auch ganz leise... hast Du eine Idee, woran das liegt ? :-)
Danke für Deine Mühe, hab wieder ein Stückchen dazu gelernt.
Gruß
Stefan
Anzeige
AW: Sorry...
03.08.2010 13:45:45
Ramses
Hallo
"..Hier fehlt ja jetzt auch das Select wieder...:"
Das ist in beiden oberen Beispielen auch schon nicht mehr da.
Woran das liegt ? Keine Ahnung. Höchstens dass dies im Array nicht funktioniert, sondern du jedes Shape einzeln ansprechen müsstest.
Schleife durch das Array und zuweisen. Mal probieren. Alternativ die Datei mal hochladen mit anonymisierten Daten
Gruss Rainer
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Shape-Objekte in Excel formatieren


Schritt-für-Schritt-Anleitung

  1. Öffne Excel und erstelle ein neues Arbeitsblatt oder öffne ein bestehendes.

  2. Füge ein AutoShape hinzu: Gehe zu „Einfügen“ > „Formen“ und wähle eine Form aus, z.B. ein Rechteck.

  3. Benenne das AutoShape: Klicke mit der rechten Maustaste auf die Form und wähle „Form formatieren“. Gehe zu „Größe und Eigenschaften“ und gib der Form einen Namen, z.B. „AutoShape 975“.

  4. Öffne den VBA-Editor: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  5. Füge ein neues Modul hinzu: Gehe zu „Einfügen“ > „Modul“.

  6. Füge den folgenden Code ein:

    Sub FormatShapes()
       With ActiveSheet.Shapes.Range(Array("AutoShape 975"))
           .Fill.ForeColor.SchemeColor = 22
           .Fill.BackColor.SchemeColor = 9
           .Characters(Start:=1, Length:=17).Font.ColorIndex = xlAutomatic
           .Characters(Start:=1, Length:=17).Font.Size = 11
       End With
    End Sub
  7. Führe das Makro aus: Schließe den VBA-Editor und gehe zurück zu Excel. Drücke ALT + F8, wähle „FormatShapes“ und klicke auf „Ausführen“.


Häufige Fehler und Lösungen

  • Fehlermeldung bei .Font-Änderungen: Wenn Du eine Fehlermeldung erhältst, während Du versuchst, die Schriftart zu ändern, stelle sicher, dass Du .Characters oder .OLEFormat.Object korrekt verwendest.

    With ActiveSheet.Shapes.Range(Array("AutoShape 975"))
      .Characters(Start:=1, Length:=17).Font.ColorIndex = xlAutomatic
    End With
  • Objekt unterstützt diese Eigenschaft oder Funktion nicht: Diese Meldung tritt häufig auf, wenn Du versuchst, die Formatierung auf ein Shape anzuwenden, das nicht korrekt angesprochen wird. Überprüfe die Namen der Shapes im Array.


Alternative Methoden

  • Direktes Ansprechen der Shapes: Wenn Du globale Änderungen ohne .Select durchführen möchtest, kannst Du die Shapes direkt ansprechen. Eine Möglichkeit ist, eine Schleife zu verwenden:

    Dim shp As Shape
    For Each shp In ActiveSheet.Shapes
       With shp
           .Fill.ForeColor.SchemeColor = 22
           .Characters(Start:=1, Length:=Len(.TextFrame.Characters)).Font.ColorIndex = xlAutomatic
       End With
    Next shp
  • Nutzung des Makrorekorders: Der Makrorekorder kann Dir helfen, den richtigen VBA-Code zu generieren, um die Formatierungen zu verstehen.


Praktische Beispiele

  • Beispiel zur Farbänderung: Um die Farbe eines AutoShapes zu ändern und den Text zu formatieren, verwende den folgenden Code:

    With ActiveSheet.Shapes("AutoShape 975")
       .Fill.ForeColor.SchemeColor = 22
       .Characters(Start:=1, Length:=17).Font.ColorIndex = 3 ' Rot
    End With
  • Text innerhalb eines Shapes formatieren: Um den gesamten Text in einem Shape zu formatieren, nutze:

    With ActiveSheet.Shapes("AutoShape 975").TextFrame
       .Characters.Font.Size = 14
       .Characters.Font.ColorIndex = 5 ' Blau
    End With

Tipps für Profis

  • Vermeide die Verwendung von Select: Statt Select zu verwenden, arbeite direkt mit den Objekten. Das macht den Code effizienter und weniger fehleranfällig.
  • Nutze die AutoShape-Funktion: Excel bietet eine Vielzahl von AutoShapes, die du leicht formatieren kannst. Experimentiere mit verschiedenen Schemen, um kreative Designs zu erstellen.
  • Verwende SchemeColor: Das Arbeiten mit SchemeColor ermöglicht eine konsistente Farbänderung basierend auf den vordefinierten Farbschemas in Excel.

FAQ: Häufige Fragen

1. Wie kann ich den Text in einem Shape formatieren?
Du kannst den Text eines Shapes formatieren, indem Du die .Characters-Methode verwendest, wie im Beispiel gezeigt.

2. Warum erhalte ich eine Fehlermeldung, wenn ich versuche, die Schriftfarbe zu ändern?
Stelle sicher, dass Du das richtige Shape angesprochen hast und die .Characters-Methode korrekt verwendest, um auf den Text zuzugreifen.

3. Kann ich mehrere Shapes gleichzeitig formatieren?
Ja, Du kannst ein Array von Shapes verwenden und die Formatierung auf alle Shapes im Array anwenden.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige