Information & Dokumentation zum VBA Makro wbTag
Inhalt
wbTag – Generelle Funktionsweise
wbTag Variablen
wbTag Funktionen
wbTag Call
wbTag_installer – Generelle Funktionsweise
wbTag – Generelle Funktionsweise
In einem sequentiellen Ablauf ist die Funktionsweise von wbTag straight forward.
- Performt der Arbeitsmappen-Nutzer ein Excel-Event (Speichern, SheetChange, Öffnen, Neues Sheet) wird die funktion des wbTags unter Übergabe des Event-Type Parameters über eine Call Funktion gestartet.
- Die wbTag-Funktion erstellt ein Array mit Informationen zum Event und zum User. Dazu zählen z.B. das aktive Sheet, ein Timestamp, Betriebssystem des Nutzers.
- Das wbTag ruft dann die Datenbank-Handler Funktion und übergibt das generierte Array an die Funktion.
- Der Datenbank-Handler schreibt die Informationen in das vorher definierte _wbtagDB-Sheet in die jeweils nächste leere Zeile und kreiert so eine Art Mini-Datenbank.
- Die Mini-Datenbank kann als Pivot oder Datenquelle zu Analyse-Zwecken verwendet werden.
wbTag Variablen
Weil für die _wbtagDB eine Reihe von Dimensionen und Metriken benötigt werden, gibt es innerhalb des Moduls eine Reihe Variablen, die hier aufgeführt werden.
Variable | Type | Beschreibung |
---|---|---|
Count | Integer | Konstante Variable, die für jeden Datensatz 1 ist und somit SUM() Funktionen in der Analyse ermöglicht. |
dataLine | Array / Variant | Array, das alle Tracking-Dimensionen und -Metriken sammelt, um sie an die Database-Funktion zu übergeben. |
dataset | Array / Variant | Parameter der wbTag2Database() Funktion. Wird im Fall von wbTag mit dem dataLine-Array gefüllt. |
datasetLength | Integer | Hilfsvariable zur Bestimmung der Anzahl der dataLine Array Items. Beendet den Loop beim Schreiben des Datenbank-Items. |
eventType | String | Dimension, die den Typ eines getrackten Events beinhaltet. Enthält save, open, pageview, newpage. |
events | Integer | Metrik, die den Wert 0 oder 1 pro Event hat. Wird = 1, wenn der EventType = „event“. |
i | Integer | Hilfsvariable für den Loop, der das dataLine Array in die _wbtagDB schreibt. |
ID | String | Versucht eine einzigartige ID für jedes Event zu erheben, um ANZAHL() Funktionen in der Analyse zu enablen. Setzt sich zusammen aus dem Timestamp im Format „YYYYMMDDhhmmss“ und dem ersten Buchstaben des eventType. |
lastRow | Integer | Hilfsvariable, die die letzte Reihe im _wbtagDB Sheet definiert, um die nächste beschreibbare Zeile daraus abzuleiten. |
nextRow | Integer | Hilfsvariable, die die nächste Reihe im _wbtagDB Sheet basierend auf der letzten nicht-leeren Reihe definiert, um darin weitere Zeilen schreiben. |
opens | Integer | Metrik, die für den eventType = „open“ die Anzahl 1 annimmt. Erlaubt mehr-dimensionale Auswertungen in Pivot. |
OS | String | Variable für das Betriebssystem des Nutzers. Wird aus der VBA-Funktion Application.OperatingSystem bezogen. |
pageAdd | Integer | Metrik, die für den eventType = „pageAdd“ die Anzahl 1 annimmt. Erlaubt mehr-dimensionale Auswertungen in Pivot. |
pageviews | Integer | Metrik, die für den eventType = „pageview“ die Anzahl 1 annimmt. Erlaubt mehr-dimensionale Auswertungen in Pivot. |
saves | Integer | Metrik, die für den eventType = „save“ die Anzahl 1 annimmt. Erlaubt mehr-dimensionale Auswertungen in Pivot. |
Timestamp | Date | Metrik zur Definition des Event-Zeitpunktes. Wird im Format „YYYYMMDDhhmmss“ mit Uhrzeit übergeben. |
TheNow | Date | Variable zur einmaligen Erhebung der aktuellen Uhrzeit zum Event-Zeitpunkt. Wird zur Kalkulation des Timestamps und der ID verwendet. |
thisWorkbook | Workbook | Workbook-Variable zur einmaligen Generierung des aktuell geöffneten Workbooks. Wird verwendet zur Bestimmung der URL / Sheetname Variable. |
URL | String | Variable zur Bestimmung des zum Event-Zeitpunkt aktiven Arbeitsblattes. Es wird ein Slash „/“ als Prefix verwendet, um es einer Webapplikaiton ähnlicher zu machen. Außerdem werden Leerzeichen in Sheet-Namen mit Bindestrichen ersetzt. |
User | String | Variable für den System-Nutzernamen des Nutzers. Wird aus der VBA-Funktion Application.UserName bezogen. Nutzernamen sind nicht immer Klarnamen, sondern können auch Gerätebezeichnungen oder Domainnamen sein. |
wbtagDB | Worksheet | Worksheet-Variable, die den Pfad des _wbtagDB-Sheet für weitere Funktionen vorhält. |
wbTag Funktionen
Das wbTag-Modul hat vier Kern-Funktionen, die innerhalb des Subs erledigt werden.
- Erhebung der Event- und Nutzer-Variablen
- Kalkulation der Eventtype basierten Metriken zur Erweiterung der Pivot-Analyse-Funktionalität
- Paketierung der Kennzahlen als Array
- Einfügen des Datasets in die Mini-Datenbank mithilfe der wbTag2Database Funktion
Erhebung der Event- und Nutzer-Variablen
'Define variables to be used
eventType = usageType
Timestamp = Format(TheNow, "DD.MM.YYYY hh:mm:ss")
Url = "/" & Replace(ActiveSheet.Name, " ", "-")
ID = Format(TheNow, "YYYYMMDDhhmmss") & Left(eventType, 1)
Count = 1
User = Application.UserName
OS = Application.OperatingSystem
Kalkulation der Eventtype basierten Metriken zur Erweiterung der Pivot-Analyse-Funktionalität
'Calculate numeric / sum values for datamodel / I hate Pivot Tables
If eventType = "pageview" Then pageviews = 1
If eventType = "event" Then events = 1
If eventType = "open" Then opens = 1
If eventType = "save" Then saves = 1
If eventType = "newpage" Then pageAdd = 1
Paketierung der Kennzahlen als Array
'Bundle the acquired information in an array
dataLine = Array(ID, Timestamp, eventType, Url, Count, User, OS, pageviews, events, opens, saves, pageAdd)
Einfügen des Datasets in die Mini-Datenbank mithilfe der wbTag2Database Funktion
'print dataset to last row in wbTagDB table
For i = 0 To datasetLength
wbTagDB.Cells(nextRow, i + 1).Value = dataset(i)
Next i
wbTag Call
Das Tracking-Pixel des wbTag Moduls ist ein einfacher „Call“ eines Subs in Excel VBA. Wichtig ist, dass der Call innerhalb eines Built-In-Events in Excel eingefügt wird. So beginnt, das Private Sub Workbook_SheetActivate(ByVal Sh As Object) z.B. an zu arbeiten, wenn der Nutzer das Sheet wechselt.
Wichtig innerhalb des Call ist, dass ein String mit einem beliebigen Event-Type als Parameter hinterlegt wird.
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Call workbookTag("pageview")
End Sub
' Beispiel des pageview-Calls für den Wechsel eines Sheets innerhalb einer Arbeitsmappe
wbTag_installer – Generelle Funktionsweise
Das Installer-Modul von wbTag funktioniert wie folgt:
- Der Nutzer startet das Sub aus dem VBA-Editor.
- Das Skript prüft alle Tabellenblätter der Arbeitsmappe, ob ein Sheet mit dem Namen „_wbtagDB“ vorhanden ist.
- Ist noch kein Sheet vorhanden wird ein neues Sheet mit dem Namen „_wbtagDB“ erstellt.
- Dann wird die erste Zeile des neuen Sheets mit den Default Dimensionen befüllt und die erste Zeile zudem visuell angepasst, um sich von den Datensätzen abzuhaben.
- Der Nutzer erhält eine Meldung über die erfolgreiche Installation.
- Sollte bereits ein Sheet mit dem Namen „_wbtagDB“ vorhanden sein, wird der Installer abgebrochen.
- Der Nutzer erhält dann eine Meldung über den Abbruch und das Vorhandensein des Arbeitsblattes.
wbTag_installer – Variablen
Die folgenden Variablen werden im wbTag_installer Modul verwendet:
Variable | Type | Beschreibung |
---|---|---|
addedDB | Worksheet | Sheet-Objekt, das als Variable zum Einfügen und Benennen des _wbtagDB-Sheets verwendet wird und als Referenz zum Einfügen der Headline und dem Umstyling verwendet wird. |
Headlines | Array / Variant | Array, das alle Spalten-Überschriften des _wbtagDB-Sheets als Default-Werte beinhaltet. |
HeadlinesLength | Integer | Länge des Headlines-Arrays, zur Beendigung des Loops, der die Überschriften in das _wbtagDB-Sheet einfügt. |
i | Integer | Hilfsvariable für den Loop, der die Überschriften in das _wbtagDB-Sheet einfügt. |
installed | Boolean | Status-Variable, die protokolliert, ob das_wbTagDB-Sheet bereits vorhanden ist. Entscheidet somit über Fortgang oder Abbruch des Installationsprozesses. Default-Wert: False. Vor der Initiierung der Prüfung. |
installerObsolete | String | Text, der in der MsgBox angezeigt wird, wenn die Installation nicht durchgeführt wurde, weil das Worksheet „_wbtagDB“ bereits in der Arbeitsmappe vorhanden ist. |
installerSuccess | String | Text, der in der MsgBox nach einer erfolgreichen Installation von wbTag angezeigt wird. |
pagesheet | Worksheet | Hilfsvariable zur Erstellung eines Sheet-Elements im For-Each-Loop. |
sheetCount | Integer | Hilfsvariable, die den Loop zur Prüfung auf Vorhandensein des _wbtagDB-Sheets beendet. |
thisWorkbook | Workbook | Workbook-Variable zur einmaligen Generierung des aktuell geöffneten Workbooks. Wird verwendet zur Erstellung des neuen Datenbank-Sheets und Katagolisierung aller Sheets im Workbook. |
wbTag_installer – Funktionen
Die Kern-Funktionen innerhalb des wbTag_installer Moduls sind
- Die Prüfung auf Vorhandensein des _wbtagDB-Sheets in der aktuellen Arbeitsmappe
- Das Hinzufügen des _wbtagDB-Sheets und die Vorbelegung bzw. farbliche Anpassung
- Die Rückmeldungen an den Nutzer nach Beendidung des Installationsassistenten
Prüfung auf Vorhandensein des _wbtagDB-Sheets in der aktuellen Arbeitsmappe
Loope durch jedes Sheet in der Arbeitsmappe. Wenn _wbtagDB bereits vorhanden ist, beende die Installation.
'loop through each sheet to see wether there is a _wbTagDB sheet
For Each pageSheet In thisWorkbook.Worksheets
'if the sheet is althisready there set installed to true and prompt the user
If pageSheet.Name = "_wbTagDB" Then
installed = True
MsgBox installerObsolete
'Exit installer if DB-sheet is already present
Exit Sub
End If
Next pageSheet
Hinzufügen, Schreiben und Stylen des _wbtagDB-Sheet
Füge eine Sheet mit dem Namen wbtagDB am Ende des Workbooks ein, belege die erste Tabellenzeile mit Spaltenüberschriften und mache die erste Zeile optisch unterschiedlich zu den anderen (Bold, Backgroung = grey).
'if the check reveals that there is no _wbTagDB sheet ad it an pre-fill the column headlines
If installed = False Then
Set addedDB = thisWorkbook.Sheets.Add(, thisWorkbook.Sheets(sheetCount))
addedDB.Name = "_wbTagDB"
addedDB.Cells(1, 1).EntireRow.Font.Bold = True
addedDB.Cells(1, 1).EntireRow.Interior.ColorIndex = 15
For i = 0 To HeadlinesLength
addedDB.Cells(1, i + 1).Value = Headlines(i)
Next i
'Prompt user for end of installation.
MsgBox installerSuccess
End If
Die Rückmeldungen an den Nutzer nach Beendidung des Installationsassistenten
Es gibt Outcomes für das Ende des Installers.
Sag dem Nutzer die Installation war erfolgreich und ist nun abgeschlossen.
'Prompt user for end of installation.
MsgBox installerSuccess
Sag dem Nutzer die Installation wurde beendet, weil sie nicht erforderlich war.
'Prompt user for end of installation.
MsgBox installerSuccess