Das Archiv des Excel-Forums
Diagramm verändern mit VBA
Informationen und Beispiele zu den hier genannten Dialog-Elementen:
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

 |
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
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

 |
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
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
Excel-Beispiele zum Thema " Diagramm verändern mit VBA"