Visual Basic Skripte
- Tim Schauder
- Jonas Volger (Unlicensed)
- Stefanie Schröder (Unlicensed)
- graphomate Team
Das graphomate charts for 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:
getProperty (String chart, String propertyName) setProperty (String chart, String propertyName, newValue)
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:
Call automationObject.setProperty ("chart1", "pinWidth", 4) Call automationObject.setProperty ("chart1", "pinWidth", "4")
Call automationObject.setProperty ("chart1", "barWidth", 0.5) Call automationObject.setProperty ("chart1", "barWidth", "0.5")
Beispiele
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:
Call automationObject.setProperty("chart1", "series1", "$D$1:$F$21")
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:
Call automationObject.setProperty("chart1", "series1", "$D$1:$F$21|Worksheet1")
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
Um die Verwendung unter VBA zu vereinfachen, haben wir als zusätzliche Hilfe einen Button (Add VBA Skripting Helper) 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:
Call SetChartProperty("Tabelle1---Chart 1", "rotated", "true") MeineVariable = GetChartProperty("Tabelle1---Chart 1", "rotated")
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.