Supportnet / Forum / Tabellenkalkulation
Diagramm erstellen mit VBA
Frage
Hallo liebe Experten,
ich möchte ein Säulendiagramm erstellen, das je nach Auswahl der benannten Bereiche aus einer ComboBox die Daten ändern kann. Die ComboBox gibt die Namen in eine Zelle aus. Den Namen aus dieser Zelle möchte ich in meinem Makro verwerten. Wie lautet bitte der VBA-Code dafür.
Herzlichen Dank schon einmal im Voraus.
Antwort 1 von fürLau
Hallo
Das könnte so funktionieren:
unter der Voraussetzung daß "C5" von Deiner ComboBox gesteuert wird. Alternativ auch wenn ComboBox1 die Auswahl der bennanten Bereiche macht:
Gruß[h3]{[h1]Ó¤[sup...fürLau
Signatur wurde ganz und gar ohne SNTool erstellt.
Das könnte so funktionieren:
dim ch as chart
Set ch = ActiveSheet.ChartObjects(1).Chart
ch.SetSourceData Source:=ActiveWorkbook.Names(Range("C5").Value).RefersToRange
ch.HasTitle = True
ch.ChartTitle.Characters.Text = Range("C5").Value
Set ch = Nothingunter der Voraussetzung daß "C5" von Deiner ComboBox gesteuert wird. Alternativ auch wenn ComboBox1 die Auswahl der bennanten Bereiche macht:
Private Sub ComboBox1_Change()
Dim ch As Chart
Set ch = ActiveSheet.ChartObjects(1).Chart
Debug.Print ch.Name
ch.SetSourceData Source:=ActiveWorkbook.Names(ComboBox1.Value).RefersToRange
ch.HasTitle = True
ch.ChartTitle.Characters.Text = ComboBox1.Value
Set ch = Nothing
End SubGruß[h3]{[h1]Ó¤[sup...fürLau
Signatur wurde ganz und gar ohne SNTool erstellt.
Antwort 2 von fürLau
Nachtrag:
Sollten mehr als ein Diagramm vorhanden sein, so muß natürlich der index des ChartObjects im Beispiel (1) entsprechend geändert werden.
Sollten mehr als ein Diagramm vorhanden sein, so muß natürlich der index des ChartObjects im Beispiel (1) entsprechend geändert werden.
Antwort 3 von Oma
Hallo Lau,
erstmal danke für die Ideen. Leider erzeugt das 1. Makro von Dir bei mir eine Fehlermeldung. Beim Debuggen bleibt es an dieser Stelle hängen
Set ch = ActiveSheet.ChartObjects(1).Chart
und die Fehlermeldung lautet
"Die ChartsObjekcts-Eigenschaft des Chart-Objektes kann nicht zugeordnet werden."
Bei den Beispielen, die ich aus einem Buch habe, ist nie eine Variable als Chart definiert, sondern immer nur der Datenbereich als Range bzw. der Titel als String. Leider ist nirgendwo beschrieben, wie ich den Namen des benannten Bereichs aus der Zelle bekomme.
Dein 2. Makro habe ich noch nicht ausprobiert. Ich muss jetzt auch weg und habe erst heute abend wieder Zeit.
Grüße und einen schönen Tag
erstmal danke für die Ideen. Leider erzeugt das 1. Makro von Dir bei mir eine Fehlermeldung. Beim Debuggen bleibt es an dieser Stelle hängen
Set ch = ActiveSheet.ChartObjects(1).Chart
und die Fehlermeldung lautet
"Die ChartsObjekcts-Eigenschaft des Chart-Objektes kann nicht zugeordnet werden."
Bei den Beispielen, die ich aus einem Buch habe, ist nie eine Variable als Chart definiert, sondern immer nur der Datenbereich als Range bzw. der Titel als String. Leider ist nirgendwo beschrieben, wie ich den Namen des benannten Bereichs aus der Zelle bekomme.
Dein 2. Makro habe ich noch nicht ausprobiert. Ich muss jetzt auch weg und habe erst heute abend wieder Zeit.
Grüße und einen schönen Tag
Antwort 4 von fürLau
Hallo @Oma ;-)
Ja ne, iss klar.
Bei den oben genannten Beispielen bin ich davon ausgegangen, daß bereits ein Diagramm exisistiert, dessen Wertebereich abhängig von der Auswahl der ComboBox verändert werden soll.
Ein Diagramm erzeugst Du, indem Du folgende Prozedur (in einem Modul) ausführst:
und diese Prozedur (im Codebereich des Tabellenblattes) steuert dann den Wertebereich des Diagramms über das Kombinationsfeld:
Gruß[h3]{[h1]Ó¤[sup...fürLau
Signatur wurde ganz und gar ohne SNTool erstellt
Ja ne, iss klar.
Bei den oben genannten Beispielen bin ich davon ausgegangen, daß bereits ein Diagramm exisistiert, dessen Wertebereich abhängig von der Auswahl der ComboBox verändert werden soll.
Ein Diagramm erzeugst Du, indem Du folgende Prozedur (in einem Modul) ausführst:
Sub Diagramm_erstellen()
Dim ch As Chart
ActiveSheet.ChartObjects.Add Left:=60, Top:=90, Width:=400, Height:=220
Set ch = ActiveSheet.ChartObjects(1).Chart
ch.ChartType = xl3DColumnClustered
ch.SetSourceData Source:=ActiveWorkbook.Names(ActiveSheet.ComboBox1.Value).RefersToRange
ch.HasTitle = True
ch.ChartTitle.Characters.Text = ActiveSheet.ComboBox1.Value
Set ch = Nothing
End Subund diese Prozedur (im Codebereich des Tabellenblattes) steuert dann den Wertebereich des Diagramms über das Kombinationsfeld:
Private Sub ComboBox1_Change()
Dim ch As Chart
Set ch = ActiveSheet.ChartObjects(1).Chart
Debug.Print ch.Name
ch.SetSourceData Source:=ActiveWorkbook.Names(ComboBox1.Value).RefersToRange
ch.HasTitle = True
ch.ChartTitle.Characters.Text = ComboBox1.Value
Set ch = Nothing
End SubGruß[h3]{[h1]Ó¤[sup...fürLau
Signatur wurde ganz und gar ohne SNTool erstellt
Antwort 5 von Oma
Hallo fürLau,
ich seh schon, Du hast gemerkt, dass ich noch Anfänger bin. Gute Idee, das Programm erst zu erstellen und dann immer nur den Wertebereich zu ändern. Ich bin immer noch am probieren. Die zweite Variante von Dir heißt, das Diagramm wird erstellt und dann suche ich mir die Werte aus der Combobox aus?! Ich werde es ja sehen. Ich melde mich wieder. Entweder mit Erfolgsmeldung oder neuem Problem. Danke, bis bald.
ich seh schon, Du hast gemerkt, dass ich noch Anfänger bin. Gute Idee, das Programm erst zu erstellen und dann immer nur den Wertebereich zu ändern. Ich bin immer noch am probieren. Die zweite Variante von Dir heißt, das Diagramm wird erstellt und dann suche ich mir die Werte aus der Combobox aus?! Ich werde es ja sehen. Ich melde mich wieder. Entweder mit Erfolgsmeldung oder neuem Problem. Danke, bis bald.
Antwort 6 von Oma
Hallo fürLau,
herzlichen Dank für Deine kompetente Hilfe. Dein Hinweis, dass ich erst ein Diagramm erstellen muss, war Gold wert und ich habe den Unterschied in den Makros begriffen. Nachdem ich ein Diagramm erstellt hatte, hat die erste Variante wunderbar funktioniert. Ich bin begeistert.
Die zweite Variante direkt über die ComboBox ist wahrscheinlich die elegantere und funktioniert sicher genauso gut. Dieses Mal habe ich mich für die erste Variante entschieden. Die zweite baue ich beim nächsten Mal ein.
Viele Grüße von Oma
herzlichen Dank für Deine kompetente Hilfe. Dein Hinweis, dass ich erst ein Diagramm erstellen muss, war Gold wert und ich habe den Unterschied in den Makros begriffen. Nachdem ich ein Diagramm erstellt hatte, hat die erste Variante wunderbar funktioniert. Ich bin begeistert.
Die zweite Variante direkt über die ComboBox ist wahrscheinlich die elegantere und funktioniert sicher genauso gut. Dieses Mal habe ich mich für die erste Variante entschieden. Die zweite baue ich beim nächsten Mal ein.
Viele Grüße von Oma
Antwort 7 von fürLau
gerngeschehen und Danke für die Rückmeldung.

