Anzeige
Archiv - Navigation
312to316
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
312to316
312to316
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Diagramm verändern mit VBA

Diagramm verändern mit VBA
21.09.2003 00:12:44
Michael Rapp
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

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Diagramm verändern mit VBA
21.09.2003 11:30:43
Ramses
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
Anzeige
AW: Diagramm verändern mit VBA
22.09.2003 01:35:00
Michael Rapp
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

Anzeige
AW: Diagramm verändern mit VBA
22.09.2003 07:52:42
Ramses
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
AW: Diagramm verändern mit VBA
22.09.2003 12:06:33
Michael Rapp
Hallo Rainer,

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

Danke für deine Hilfe.

Michael

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige