Das graphomate charts für Excel Add-in unterstützt das Scripting mit Visual Basic, wodurch es möglich ist, die Diagramme interaktiv zu nutzen. Beispielsweise können neue Daten gesetzt, Formatierungen bearbeitet oder Skalierungen gesetzt werden. Die technischen Bezeichnungen der Properties, die in Visual Basic verwendet werden können, lassen sich in den Basic Properties ablesen, wenn eine Property ausgewählt wird. Es erscheint dann am unteren Rand eine Box, in der der VBA-Skript-Name sowie der Datentyp nachzulesen ist.
Adressierung der Charts aus VBA
Um ein Chart per Skript ansteuern zu können, muss zuerst eine Verbindung zum Add-in erstellt werden. Dies geschieht mit folgendem Code-Snippet:
Dim addIn As COMAddIn
Dim automationObject As Object
Set addIn = Application.COMAddIns("graphomate.charts")
Set automationObject = addIn.Object
Mit der Variable automationObject lassen sich dann die einzelnen Charts ansprechen. Zum Auslesen oder Ändern von Properties eines Charts existieren die beiden folgenden Befehle:
Je nach Datentyp der zu setzenden Property müssen unterschiedliche Formate beachtet werden.
boolean
Wahrheitswert, entweder true oder false
string
Zeichenkette, z.B. Nordwest
integer
Ganzzahlen, z.B. 0 oder 16
float
Kommazahlen, z.B. 0.5 oder 12.8
In den Basic Properties müssen Kommazahlen mit Komma (,) getrennt werden, in VBA-Skripten hingegen muss der Punkt (.) als Dezimaltrennzeichen verwendet werden.)
Der Parameter newValue ist in der Regel ein String. Im Falle von Float- oder Integer-Properties können jedoch auch diese Datentypen übergeben werden, einen Unterschied macht es jedoch nicht. Die folgenden Aufrufe sind äquivalent:
Das folgende Beispiel-Skript liest den Chart-Typen eines Diagramms aus, speichert ihn in einer Variable zwischen und setzt diesen Chart-Typen dann auf einem zweiten Diagramm um:
Sub Schaltfläche1_Klicken()
' Verbindung zum Add-in herstellen
Dim addIn As COMAddIn
Dim automationObject As Object
Set addIn = Application.COMAddIns("graphomate.charts")
Set automationObject = addIn.Object
' Variable c mit dem Wert der Property "chartType" von chart1 setzen
Dim c As String
c = automationObject.getProperty("chart1", "chartType")
' ausgelesenen Chart-Typen auf chart2 setzen
Call automationObject.setProperty("chart2", "chartType", c)
End Sub
Zum Setzen von Daten können die Properties series1, series2 ... series10 angesprochen werden:
Sind im Zellbereich Kategoriebeschriftungen enthalten, wird dies vom Add-in entsprechend interpretiert (siehe hierzu Datenselektion). Hierbei ist zu beachten, dass sich die Selektion immer auf das Worksheet bezieht, in dem das das Skript ausführende Element eingebettet ist. Um sicherzugehen, dass immer derselbe Zellbereich referenziert wird, sollte das Worksheet mit in die Adressierung aufgenommen werden:
Sollte es vorkommen, dass sich ein Chart nicht automatisch aktualisiert (z.B. weil Daten-Updates von Analysis for Office nicht rechtzeitig ankommen), kann dieses Chart auch per VBA aktualisiert werden. Die Funktionalität dieses Skript-Befehls ist identisch mit derjenigen des Refresh-Knopfes im Ribbon-Menü.
Call automationObject.refreshChart("chart1")
Adressierung der Charts aus VBA mittels Helferskript
Der oben beschriebene Mechanismus zur Adressierung der Charts hat leider zu Problemen geführt. Bisher war es nicht möglich zwei Charts mit gleichem Namen weder im Gleichen noch in unterschiedlichen Workbooks zu erstellen. Das Addon hat dann darauf hingewiesen und es musste ein Chart umbenannt werden. Da sich dieses zum Teil sehr umständlich gestaltet hat, haben wir den Mechanismus verändert. Nun müssen nur noch die Charts innerhalb eines Workbooks einzigartige Namen besitzen. Dafür muss jetzt aus dem VBA der Name des betreffenden Workbooks mit übermittelt werden, um die Zuordnung sicherzustellen, denn leider existiert im Addon nicht die Möglichkeit festzustellen, aus welchem Workbook das VBA-Skript ausgeführt wurde… Allerdings haben wir als zusätzliche Hilfe einen Button (Add VBA Module) eingebaut, der auf Wunsch VBA-Helferskripte in das aktuelle Workbook einfügt, sodass der Designer nur noch folgende Subs/Funktionen aufrufen muss:
Sub SetChartProperty(chartName As String, propertyName As String, value As String) …
Function GetChartProperty(chartName As String, propertyName As String)…
Der bisher nötige Skript-Teil des Ermittelns des Addon-Automation-Objektes wird nun innerhalb des Helferskriptes erledigt. Die Aufrufe gestalten sich beispielhaft wie folgt:
Die Nutzung der Helferskripte ermöglicht allerdings nur die Ausführung von VBA-Skript im aktuellen Workbook. Bitte bedenken Sie dieses bei der Entwicklung ihrer VBA-Skripte!