Diagramm verändern mit VBA

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Label
Bild

Betrifft: Diagramm verändern mit VBA
von: Michael Rapp
Geschrieben am: 21.09.2003 00:12:44

Hallo Excel Freunde,

meine Versuche, bei einem Ring Diagramm das Erscheinungsbild per VBA zu ändern, sind auf Grund gelaufen.

Folgendes Problem: Ich bestimme verschiedene Teile des Diagramms von zuvor berechneten Zellen eines Tabellenblatts. Darunter die Eigenschaft .Border des Diagrammtextes. Da ich nicht bei allen Punkten einen Rahmen haben möchte, es aber keine unsichtbare Farbe gibt, schalte ich zusätzlich über .Boder.LineStyle mit True/False den Rahmen ein und aus. Das funktioniert.
Jetzt möchte ich das Gleiche mit der Eigenschaft Interior.Colorindex - also der Hintergrundfarbe des Textes - machen. Das funktioniert jedoch nicht. Vielleicht deshalb nicht, da hier der true/false Schalter der gleiche ist wie die Bestimmung der Farbe selbst. Folgendes passiert: Die Farbe aller einzelnen Diagrammpunkte wird bestimmt und bei dem zweiten Druchgang schalte ich die nicht benötigten Hintergründe aus, die übrigen haben jedoch erhalten dann die Standard Fabe Schwarz und nicht die vorher zugeordnete.
Sorry, ist etwas komliziert zu erklären.

Eine andere Besonderheit habe ich bei dem True/False Schalter festgestellt. Der funktioniert nur, wenn ich die Werte vorher als Boolean einlese und nicht wenn ich z.B. "True" direkt als String einlese. Gibt es da einen Trick?

Danke für Eure Mühe.
Michael


Hier der verwendete Code:


Sub ChangeDiagram()
Dim i As Integer                    'Zähler
 Dim intRow As Integer               'Zeilennummer auf dem Tabellenblatt
 Dim chtAnimals As Chart             'Diagramm
 Dim boolLineStyle(48) As Boolean    'True/False des Rahmens
 Dim boolColorIndex(48) As Boolean   'True/False des Texthintergrundes
    Set chtAnimals = Sheet29.ChartObjects("Chart 1").Chart
    intRow = 146
        
    For i = 1 To 48
    boolLineStyle(i) = Sheet27.Range("EF" & intRow)           'Sichtbarkeit des Rahmens einlesen
    boolColorIndex(i) = Sheet27.Range("EG" & intRow)          'Sichtbarkeit des Hintergrunds einlesen
    With chtAnimals.SeriesCollection(7).Points(i).DataLabel
         .Characters.Text = Sheet27.Range("EH" & intRow)     'Buchstaben der Tiere
         .Font.ColorIndex = Sheet27.Range("EI" & intRow)     'Farbe der Tiere
         .Border.ColorIndex = Sheet27.Range("EA" & intRow)   'Farbe des Rahmens
         .Border.LineStyle = boolLineStyle(i)                'Abschalten der nicht benötigten Rahmen funktioniert gut
         .Interior.ColorIndex = Sheet27.Range("EB" & intRow) 'Farbe der Füllung
         .Interior.ColorIndex = boolColorIndex(i)            'Abschalten der nicht benötigten Hintergrundfarbe funktioniert nicht
    End With
    intRow = intRow + 1
    Next i
End Sub

Bild


Betrifft: AW: Diagramm verändern mit VBA
von: Ramses
Geschrieben am: 21.09.2003 11:30:43

Hallo

soweit ich das auf die Reihe kriege ist hier ein kleiner Logikfehler drin

Das erste:

Du definierst ein dimensioniertes Array "As Boolean".
Demzufolge musst du natürlich auch jeden Wert einzeln einlesen und zuweisen.
Ein String "True" ist nicht das gleiche wie TRUE als Wahrheitswert deklariert.

Das zweite:
Meines Wissens nach, kann man die Hintergrundfarbe nicht mit WAHR oder TRUE ab- bzw. einschalten.
Du müsstest das so lösen

If boolColorIndex = False Then
Selection.Interior.ColorIndex = xlNone
End If

Die Zuweisung der Farbe erfolgt ja bereits vorher, so dass eine Änderung des Diagramms oder ein Neuaufbau dann immer die Farbe bringen sollte

Gruss Rainer


Bild


Betrifft: AW: Diagramm verändern mit VBA
von: Michael Rapp
Geschrieben am: 22.09.2003 01:35:00

Hallo Rainer,

klappt prima! Vielen Dank. Habe deinen Vorschlag etwas modfiziert, indem ich die Farbe 2 im Makro in den Ausdruck "xlNone" umwandle und benutze nun untenstehenden Code: Einziges Manko ist die lange Laufzeit (durch die doppelte If Abfrage?).

Danke für die Lösung.
Michael


Sub ChangeDiagram()
 Dim objData As Object               'Blatt Tabellen
 Dim i As Integer                    'Zähler
 Dim intRow As Integer               'Zeilennummer auf dem Tabellenblatt
 Dim chtAnimals As Chart             'Diagramm
 Dim boolLineStyle(48) As Boolean    'Ja/nein des Rahmens
 Dim intColorIndex(48) As Integer    'Farbe des Hintergrunds (2=keine Farbe)
    Set objData = Sheet27
    Set chtAnimals = Sheet29.ChartObjects("Chart 1").Chart
    intRow = 146
        
For i = 1 To 48
    boolLineStyle(i) = objData.Range("EG" & intRow)          'Sichtbarkeit des Rahmens
    intColorIndex(i) = objData.Range("EF" & intRow)          'Farbe des Hintergrunds (2=keine Farbe)
    With chtAnimals.SeriesCollection(7).Points(i).DataLabel
            .Characters.Text = objData.Range("EH" & intRow)     'Buchstaben der Tiere
            .Font.ColorIndex = objData.Range("EI" & intRow)     'Farbe der Tiere
            .Border.ColorIndex = objData.Range("EA" & intRow)   'Farbe des Rahmens
            .Border.Weight = 3
            .Border.LineStyle = boolLineStyle(i)
     End With
     If intColorIndex(i) = 2 Then chtAnimals.SeriesCollection(7).Points(i).DataLabel.Interior.ColorIndex = xlNone   'bei Farbe 2 Umwandlung in keine Farbe
     If Not intColorIndex(i) = 2 Then chtAnimals.SeriesCollection(7).Points(i).DataLabel.Interior.ColorIndex = intColorIndex(i)  'bei anderer Farbe die Farbnummer
    intRow = intRow + 1
Next i
End Sub



Bild


Betrifft: AW: Diagramm verändern mit VBA
von: Ramses
Geschrieben am: 22.09.2003 07:52:42

Hallo Michael

verwende statt "If" mal "Select Case"

Select Case intColorIndex(i)
Case 2
chtAnimals.SeriesCollection(7).Points(i).DataLabel.Interior.ColorIndex = xlNone
Case Else
chtAnimals.SeriesCollection(7).Points(i).DataLabel.Interior.ColorIndex = intColorIndex(i)
End Select

Gruss Rainer


Bild


Betrifft: AW: Diagramm verändern mit VBA
von: Michael Rapp
Geschrieben am: 22.09.2003 12:06:33

Hallo Rainer,

Select Case ist viel eleganter, aber leider nicht schneller. Habe es eingebaut.

Danke für deine Hilfe.

Michael


 Bild

Beiträge aus den Excel-Beispielen zum Thema " Diagramm verändern mit VBA"