Versions Compared
Key
- This line was added.
- This line was removed.
- Formatting was changed.
Image RemovedDas graphomate charts für for Excel Add-in 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.
Center |
---|
Image Added |
Adressierung der Charts aus VBA
Um ein Chart per Skript ansteuern zu können, muss zuerst eine Verbindung zum Add-in In erstellt werden. Dies geschieht mit folgendem Code-Snippet:
Code Block | ||
---|---|---|
| ||
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:
Code Block | ||
---|---|---|
| ||
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 |
Info |
---|
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:
Code Block | ||
---|---|---|
| ||
Call automationObject.setProperty ("chart1", "pinWidth", 4) Call automationObject.setProperty ("chart1", "pinWidth", "4") |
Code Block | ||
---|---|---|
| ||
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:
Code Block | ||
---|---|---|
| ||
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:
Code Block | ||
---|---|---|
| ||
Call automationObject.setProperty("chart1", "series1", "$D$1:$F$21") |
Sind im Zellbereich Kategoriebeschriftungen enthalten, wird dies vom Add-in 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:
Code Block | ||
---|---|---|
| ||
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ü.
Code Block | ||
---|---|---|
| ||
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 Um die Verwendung unter VBA zu vereinfachen, haben wir als zusätzliche Hilfe einen Button (Add VBA ModuleSkripting Helper) eingebaut, der auf Wunsch VBA-Helferskripte in das aktuelle Workbook einfügt, sodass der Designer nur noch folgende Subs/Funktionen aufrufen muss:
Code Block | ||
---|---|---|
| ||
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:
Code Block |
---|
Call SetChartProperty("Tabelle1---Chart 1", "rotated", "true") MeineVariable = GetChartProperty("Tabelle1---Chart 1", "rotated") |
Info |
---|
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 |
. |