Das Archiv des Excel-Forums

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

Excel-Beispiele zum Thema " Diagramm verändern mit VBA"

Diagramm in Userform download Export von Diagrammen im Grafikformat download
Diagramm aus Arbeitsblatt in Diagrammblatt übertragen download Balkendiagramm simulieren download
Diagramm aus Daten einer Bandbreite bilden download Diagramm-Datenreihen blinken lassen und Linie langsam zeichnen download
Diagramm exportieren und in Tabellenblatt importieren download Eine Serie von Diagrammen erstellen und Druckansicht zeigen download
Diagramm-Datenbereich über Schaltfläche festlegen download Mit einer Diagramm-Bildlaufleiste durch Tabelle bewegen download
Gleiche Zufallszahlen zählen und in Diagramm anzeigen download Diagrammdatenreihe mit VBA ändern download
Diagramm erstellen, in UserForm anzeigen und drucken download Dynamisches Diagramm download
Diagramm dynamisch erstellen download Hyperlink zu einem Diagrammblatt. download
Diagramm zu PowerPoint-Präsentation konvertieren und aufrufen download Bei Rechtsklick auf Diagramm MessageBox-Aufruf download