VBA
Inhaltsverzeichnis
VBA
Ein weiteres Akronym Namens VBA geistert seit längerer Zeit in der Welt der IT, aber auch im Büroalltag umher.
Besonders Büroangestellte nutzen VBA häufig in Kombination mit den Microsoft Office Produkten, teilweise auch ohne es aktiv zu wissen.
Doch was ist dieses VBA „Ding“ denn nun, wofür wurde es erfunden und was macht man damit genau?
Was ist VBA?
VBA ist wie oben schon eingängig erwähnt ein Akronym, also eine Abkürzung für die Wörter „Visual Basic for Applications„.
Was irgendwie nach einer Art Brillenputzmittel, bzw. Auflage auf Brillen klingt, ist in Wahrheit eine Skriptsprache.
Diese Skriptsprache wurde von der Firma Microsoft unterstützend zu vielen Ihrer Office Produkte, wie z. B. Excel und Word entwickelt.
Wofür VBA?
Da wir nun verstanden haben wo VBA eingesetzt wird, also bei bestehenden Produkten wie z. B. Microsoft Excel, schauen wir uns nun dessen Verwendung an.
Meiner persönlichen Erfahrung nach, denken viele Kenner sofort an Excel, wenn sie das Stichwort „VBA“ hören, nicht ohne Grund.
Auch wenn die Microsoft Office Produktfamilie natürlich über einen sehr großen Funktionsumfang verfügt, hat man häufig individuelle Wünsche.
Neben den individuellen Wünschen spielt natürlich auch z. B. die Automatisierung von gewissen Prozessen eine große Rolle.
Wer hat schon Lust, die häufig an Praktikanten verteilte Arbeit zu übernehmen und sich dumm und dusselig zu klicken.
Dafür könnte man sich einige kleine Skripte in VBA bauen, Die einem dann diese unangenehme Arbeit abnehmen, oder zumindest erleichtert.
Was ist nun das VB in VBA?
Nun kommst Du ggf. mit deinen Englischkenntnissen an den Punkt, wo Du die Bedeutung des „..for Applications“ verstanden hast.
Denn wie erklärt, erweitert man bestehende Office-Programme durch VBA um seine individuell gewünschten Programm–Funktionen.
Was dabei allerdings noch offen bleibt ist dieser Teil namens „Visual Basic“ in VBA.
Visual Basic (Classic) – oder auch kurz „VB“ – ist die Programmiersprache worauf VBA letztendlich basiert.
Sie ist der Vorreiter für die Sprache, weshalb diese Webseite vor vielen Jahren überhaupt entstanden ist – Visual Basic NET.
Einsatzbeispiel für VBA
Wie oben bereits erwähnt gibt es teilweise Situationen in denen man sich gerne ein Skript für wiederkehrende Arbeiten erstellen möchte.
Damit könnte man nach initial investierter Zeit, zukünftig ein Vielfaches dieser Arbeitszeit und Arbeitskraft sparen und vereinfachen.
Schauen wir uns dafür in diesem Abschnitt einmal ein kleines Beispiel an, wo wir so eine individuelle Erweiterung genauer betrachten.
Das Beispiel in all seinen vollständigen Details findest Du im Beitrag „Serienbrief mit Ecxel„, ich werde hier die wesentlichen Schritte wiederholen.
Dabei ergänze ich einige Sachen, Welche zu diesem Beitrag hier besser passen und daher einfacher nachvollziehbar sind.
Das Dilemma mit den Adressen
Jeder der schonmal in seinem Leben mit Adress-Daten gearbeitet hat, kennt das dahinter steckende Dilemma.
Mal werden Postleitzahl und Ort vertauscht, hier und da ein Leerzeichen zu viel und und und.
Manchmal fragt man sich wirklich, wie Diese herauskommenden Daten letztendlich zustande kommen.
Ich selbst kenne das aufgrund einer ehemaligen Arbeitskollegin aus einen vergangenen Job sehr gut.
Monkey Work als Beispiel – Kein Einzelfall
Sie war den ganzen Arbeitstag (!) damit beschäftigt, Adressen zu korrigieren und aufzuarbeiten – schrecklich.
Leider ist das absolut kein Einzelfall, auch bei einem ehemaligen Kunden kannte ich Mitarbeiter, die dieser Arbeit nachkamen.
Oftmals ist es in solchen Unternehmen leider die Folge von fehlendem Budget für individuelle Entwicklungen.
Manchmal meint man auch, man könne sich dafür keine Zeit nehmen „..ich muss schließlich mein Tagesgeschäft fortführen..“.
Fangen wir lieber nicht die mentale Debatte an, ob diese Vorgehensweisen so sinnvoll waren..
Fokussieren wir uns stattdessen lieber auf das ursprüngliche Problem, eine kleine Funktionalität zur Korrektur von Adressen zu erstellen.
Natürlich werde ich hier nur ein kleines Beispiel machen, da es nicht um die Funktionalität geht.
Mir geht es hier besonders um das Verständnis über die Einsatzmöglichkeiten von VBA.
Tabellenstruktur & Beispieldaten
Schaue Dir am besten einfach mal folgende Tabellenstruktur und die darin befindlichen Daten an:
Dir fällt sehr wahrscheinlich der falsche Datensatz in der dritten Zeile auf.
Dort wurde bei der Eingabe (aus welcher Quelle auch immer), leider die Postleitzahl mit dem Ort vertauscht.
Natürlich könnten wir bei diesen wenigen Einträgen auch eine manuelle Korrektur durchführen.
Wenn ich allerdings an den erwähnten Kunden denke, dann hatte man mit ungefähr 200 Bestellungen am Tag ein Problem.
Lösungsansatz
Wenn wir nun über einen möglichen Lösungsansatz nachdenken, könnte man wie folgt vorgehen.
Man geht das aktive Tabellenblatt bei z. B. einem Klick eines Buttons mit einer Schleife durch.
In jedem Schleifendurchlauf prüft man, ob z. B. im Ort Zahlen enthalten sind.
Vermutlich gibt es hier noch andere Ansätze, allerdings reicht das für unser Beispiel aus.
Meine Gedanken dabei waren, dass in einem Ort definitiv keine Zahlen vorkommen und eine Postleitzahl soweit ich weiß in einigen Gebieten auch Buchstaben enthalten kann.
Im Endeffekt kann man das ja je nach individuellem Wunsch anpassen, bzw. verändern.
Code
In diesem Abschnitt schauen wir uns den möglichen Code für die oben genannte Variante an.
Der erste Bestandteil ist wie erwähnt das Durchlaufen der Zeilen, des aktiven Tabellenblatts:
Dim rowRange As Range For Each rowRange In ActiveSheet.UsedRange.Rows ' mach was mit der Range namens rowRange Next
Danach könnten wir einstellen, dass die Reihe nur verarbeitet wird, wenn beide notwendigen Datenfelder ausgefüllt sind.
Dazu benutze ich wie immer gerne, ein so genanntes „Early Return„, ich weise die Schleife in den nächsten Durchlauf, statt If-Konstrukte tief zu verschachteln:
Dim zipText As String zipText = ActiveSheet.Cells(rowRange.Row, 1).Text Dim hasNoZip As Boolean hasNoZip = zipText = "" Dim cityText As String cityText = ActiveSheet.Cells(rowRange.Row, 2).Text Dim hasNoCity As Boolean hasNoCity = cityText = "" If hasNoZip Or hasNoCity Then Continue For End If
Zum Schluss können wir dann unsere Prüfung und die Tausch-Arbeit selbst durchführen.
Dazu könnten wir auf komplizierte „Regular Expressions“ zurückgreifen, jedoch bin ich ein Fan von „KISS„, daher verwenden wir einfach den „Like“-Operator:
Dim cityContainsNoNumber As Boolean cityContainsNoNumber = cityText Not Like "*[0-9]*" If cityContainsNoNumber Then ' wieder early return / Continue Continue For End If
Im letzten Schritt folgt der Tausch der Werte:
ActiveSheet.Cells(rowRange.Row, 1).Text = cityText ActiveSheet.Cells(rowRange.Row, 2).Text = zipText
Kompletter Code
Hier findest Du noch einmal den vollständigen Code, um die PLZ mit dem Ort/der Stadt zu tauschen, wenn die Stadt eine Zahl enthält:
Dim rowRange As Range For Each rowRange In ActiveSheet.UsedRange.Rows Dim zipText As String zipText = ActiveSheet.Cells(rowRange.Row, 1).Text Dim hasNoZip As Boolean hasNoZip = zipText = "" Dim cityText As String cityText = ActiveSheet.Cells(rowRange.Row, 2).Text Dim hasNoCity As Boolean hasNoCity = cityText = "" If hasNoZip Or hasNoCity Then Continue For End If Dim cityContainsNoNumber As Boolean cityContainsNoNumber = cityText Not Like "*[0-9]*" If cityContainsNoNumber Then Continue For End If ActiveSheet.Cells(rowRange.Row, 1).Text = cityText ActiveSheet.Cells(rowRange.Row, 2).Text = zipText Next
Wo den Code unterbringen?
Damit Du den Code von oben verwenden kannst, muss er natürlich irgendwo untergebracht werden, damit er auch ausgeführt wird.
Das passiert in Excel z. B. häufig durch sogenannte Makros, wie Du auch in diesen Beiträgen erfahren konntest: Excel Makros erstellen, oder Excel Makro Button.
Fazit – VBA
In diesem Beitrag hast Du gelernt, wie Du dein Erlebnis von Office Produkten wie z. B. Excel verbessern kannst.
Dies geschieht durch die auf der Visual Basic (Classic) basierenden Skriptsprache namens Visual Basic for Applications, oder kurz „VBA„.
Diese Verbesserungen können in Form von zusätzlichen Funktionen, oder auch in Form von konkreten arbeitserleichternden Mitteln existieren.