Einstieg in VBA und die Office Programmier Beispiel von Excel
Transcription
Einstieg in VBA und die Office Programmier Beispiel von Excel
Einführung in die Programmiersprache Visual Basic for Applications… Maik Bürschgens 13.12.2011 Firma: CAE Elektronik GmbH 1.Betreuer: Prof. Dr. Hans-Joachim Pflug 2. Betreuer: Martin Clasemann Einführung in Visual Basic for Applications 0. Vorwort Das Skript verfolgt den Zweck, dem Leser einen Einblick in die Fähigkeiten der Programmiersprache „Visual Basic for Applications“ , kurz VBA, zu liefern, um den Einstieg in die damit verbundene MSOffice Programmierung zu erleichtern. Dabei wird der Schwerpunkt nicht nur auf Syntax und Implementierung gelegt - vielmehr soll das Skript dem Leser vermitteln, welche Möglichkeiten sich im Bereich der Office Programmierung ergeben, falls man als Entwickler diese Programmiersprache beherrscht. Ein sekundäres Ziel ist es, Vorurteilen gegenüber VBA vorzubeugen sowie Motivation mitzugeben, diese Sprache zu erlernen und einzusetzen: Im Programmierumfeld häuften sich auf Grund ihrer Komplexität und Syntax in der Vergangenheit negative Vorurteile und destruktive Kritik an der Sprache, welche eigentlich unbegründet sind, wie das Skript zu demonstrieren versucht. VBA Programme können nicht direkt ausgeführt werden: Um ihre Leistungsfähigkeit und Vorteile in der Office Programmierung zu demonstrieren, bedarf es der Wahl eines Programmes aus dem Microsoft Office Paket. Im weiteren Verlauf des Skriptes wird es Excel 2007 sein. Da Excel weitreichende Anwendungsgebiete umfasst, kann ein Entwickler dort das vollständige Potential VBAs abrufen. Zusätzlich erhalten Excel-Anfänger die Möglichkeit, einen tiefgreifenden Gebrauch dieser Office Anwendung kennenzulernen. Excel ist schließlich mehr als ein reines Rechen- oder Übersichtsprogramm. Desweiteren lassen sich viele Aspekte der Programmierung mit VBA auf andere MS-Office Programme übertragen und somit verallgemeinern. Wer VBA richtig einzusetzen weiß, weiß auch um die Stärken des jeweiligen Office Programmes Bescheid. Zu guter Letzt ist darauf hinzuweisen, dass Leser des Skriptes ein gutes logisches Verständnis aufweisen sollten. Obendrein schadet es sicherlich nicht, den Sprachkern einer höheren Programmiersprache z.B. Java zu beherrschen. Dies schließt einerseits Kontrollstrukturen und andererseits das Konzept der objektorientierten Programmierung mit ein. Dem Sprachkern von VBA wurde im Skript zwar ein eigenes Kapitel zugewiesen, doch auf die logischen Konzeptabläufe im Hintergrund wird eher oberflächlich eingegangen. Vielmehr soll das erwähnte Kapitel Syntax und Anwendung des Sprachkerns veranschaulichen. Das Skript ist also mehr auf Anfänger der Programmiersprache VBA als auf Programmierneulinge ausgerichtet. Um das schnelle Begreifen von Syntax und Gebrauch dennoch auch für Einsteiger zu gewährleisten, werden die Darlegungen der Kapitel 2, 5 und 6 (Syntax und Anwendung I – III) von Tabellen und Code Beispielen untermauert. Die Anwendungsbeispiele befinden sich im gesammelt Abbildungsverzeichnis, während die Tabellen kontextabhängig bereits im Skript aufgeführt werden. Vorwort | - 2 - Inhaltsverzeichnis 1 Allgemeine Informationen zu VBA .............................................................................................. - 6 1.1 Geschichte und Anfänge der Sprache ........................................................................... - 6 1.2 Eigenschaften von VBA .................................................................................................. - 6 1.3 Verfügbarkeit / Einsatzgebiete ...................................................................................... - 7 2 Syntax und Anwendung I – Der Sprachkern ................................................................................ - 8 2.1 Allgemeines ................................................................................................................... - 8 2.2 Datentypen .................................................................................................................... - 8 2.3 Operatoren .................................................................................................................... - 9 2.4 Variablen, Konstanten und ihr Geltungsbereich ......................................................... - 10 2.5 Arrays, dynamische Arrays und Collections ................................................................ - 11 2.6 Benutzerdefinierte Datentypen .................................................................................. - 11 2.7 Unterprogrammtechnik............................................................................................... - 12 2.8 Klassen und Objektvariablen ....................................................................................... - 13 2.9 Kontrollstrukturen: Entscheidungsstrukturen & Schleifenstrukturen ....................... - 13 2.9.1 Entscheidungsstrukturen.................................................................................. - 13 2.9.2 Schleifenstrukturen .......................................................................................... - 14 2.10 Konvertierung und Manipulation von Daten ............................................................ - 14 2.11 Fehlerbehandlung...................................................................................................... - 15 3 Excel als Tabellenkalkulationsprogramm .................................................................................. - 16 3.1 Allgemeine Informationen zu Excel ............................................................................. - 16 3.2 Fähigkeiten und Bestandteile von Excel ...................................................................... - 16 3.3 Vorteile des Einsatzes von VBA ................................................................................... - 17 4 Der Arbeitsbereich von Excel und die Entwicklungsumgebung für VBA ................................... - 18 4.1 Der Arbeitsbereich von Excel ...................................................................................... - 18 4.2 Vorstellung des VBA Editors ........................................................................................ - 18 4.2.1 Projekt Explorer ................................................................................................ - 19 4.2.2 Eigenschaftenfenster ........................................................................................ - 19 4.2.3 Programmeditor ............................................................................................... - 19 4.2.4 Direktfenster..................................................................................................... - 20 4.2.5 Objektkatalog / IntelliSense ............................................................................. - 20 - Inhaltsverzeichnis | - 3 - 5 Syntax und Anwendung II – VBA im Zusammenspiel mit Excel ................................................ - 21 5.1 Allgemeine Informationen .......................................................................................... - 21 5.2 Ereignisse ..................................................................................................................... - 21 5.3 Excel Objekte ............................................................................................................... - 22 5.4 Aktionen auf Tabellenblättern und Arbeitsmappen ................................................... - 22 5.5 Manipulation von Zellen und Zellbereichen................................................................ - 23 5.6 Layout von Zellen vordefinieren.................................................................................. - 25 5.6.1 Formatierung der Schrift .................................................................................. - 25 5.6.2 Formatierung von Rahmen............................................................................... - 25 5.6.3 Formatierung der Zelle ..................................................................................... - 26 5.7 Filterfunktionen ........................................................................................................... - 26 5.8 Dialoge und Formulare zur Interaktion mit dem Benutzer ......................................... - 27 5.8.1 Integrierte Dialogfelder .................................................................................... - 27 5.8.2 Das Tabellenblatt als Formular gestalten ........................................................ - 29 5.8.3 Benutzerdefinierte Dialoge .............................................................................. - 31 5.9 Selbst implementierte Ereignisse auslösen und anwenden ........................................ - 32 6 Syntax und Anwendung III – Externe Datenquellen und Präsentation von Daten .................. - 34 6.1 I/O Operationen .......................................................................................................... - 34 6.2 SQL Abfragen und Verarbeitung der Resultate ........................................................... - 35 6.3 Ausführung von Konsolenbefehlen ............................................................................. - 35 6.4 Austausch mit anderen Office Anwendungen............................................................. - 35 6.5 Externe DLL´s einbinden und nutzen ........................................................................... - 35 6.6 Präsentation und Visualisierung mit Hilfe von Grafiken und Diagrammen ................ - 36 6.6.1 Diagrammblätter erstellen ............................................................................... - 36 6.6.2 Eingebettete Diagramme erstellen .................................................................. - 37 6.6.3 Diagrammblätter gestalten .............................................................................. - 38 6.6.4 eingebettete Diagramme gestalten.................................................................. - 39 6.6.5 Diagrammblätter und Eingebettete Diagramme verwalten ............................ - 39 7 Weitergehende Informationen zur Verwendung von VBA ....................................................... - 40 7.1 Ähnliche Konzepte und Alternativen........................................................................... - 40 7.2 Der Makro Rekorder .................................................................................................... - 40 7.3 Das Sicherheitskonzept von Microsoft ........................................................................ - 41 - Inhaltsverzeichnis | - 4 - 8 Schlusswort ............................................................................................................................... - 41 9 Abbildungsverzeichnis ............................................................................................................... - 42 9.1 Deklaration von Variablen und Konstanten ................................................................ - 42 9.2 Einsatz von Arrays ....................................................................................................... - 43 9.3 Vorstellung des Collection-Objekts ............................................................................. - 44 9.4 Benutzerdefinierte Datentypen deklarieren und ansprechen .................................... - 44 9.5 Einsatz Prozeduren und Übergabeparametern ........................................................... - 45 9.6 Funktionen und ihre Rückgabeparameter .................................................................. - 46 9.7 Klassen und Objekte .................................................................................................... - 47 9.8 Die Excel Oberfläche.................................................................................................... - 48 9.9 Der VBA Editor ............................................................................................................. - 49 9.10 Anwendungsbeispiel für I/O Operationen ................................................................ - 50 9.11 SQL Operationen und ihre Auswertung .................................................................... - 51 10 Quellenverzeichnis .................................................................................................................. - 52 11 Eidesstattliche Erklärung ......................................................................................................... - 53 - Inhaltsverzeichnis | - 5 - Einführung in Visual Basic for Applications 1 Allgemeine Informationen zu VBA Das Skript startet inhaltlich mit allgemeinen Informationen zu VBA, mit denen der Leser sich vertraut machen sollte. Es basiert darauf, dass der Leser ein gewisses Interesse an der Programmierung bzw. der Programmiersprache zeigt. Dies impliziert somit nicht nur Wissen über Syntax und Anwendung, sondern auch z.B. Eigenschaften sowie Einsatzgebiete der Sprache. Ohne Hintergrundinformationen über eine Programmiersprache artet die Entwicklung einer Applikation schnell in das blinde Auswendiglernen und Einfügen der Programmbefehle aus. 1.1 Geschichte und Anfänge der Sprache Visual Basic for Applications (kurz: VBA) ist eine eng mit den Office Programmen assoziierte Skriptsprache, welche aus dem von Microsoft entworfenen BASIC Dialekt Visual Basic entstanden ist. Sie wurde zur Steuerung von Abläufen innerhalb der Office Programme konzipiert. Die Sprache wird seit Mitte der 1990er Jahre verwendet und löste die bis dahin verwendeten verschiedenen Makro Sprachen ab. Unter dem Begriff Makro versteht man eine Abfolge von Befehlen, die sich zusammenhängend nach nur einem Aufruf ausführen lassen. Im Skript wird der Begriff Makro mit VBA-Skripten oder VBAProgrammen gleichgesetzt. 1.2 Eigenschaften von VBA VBA ist eine leistungsfähige Skriptsprache. Ihre Skripte werden zur Laufzeit interpretiert und zusätzlich vorkompiliert, um Variablen und Konstantentabellen aufzubauen sowie syntaktische Überprüfungen durchzuführen - es ist jedoch kein Kompilieren bis zu ausführbaren Maschinencode hin möglich. Die Syntax von VBA ist stark an die Syntax von Visual Basic angelehnt. Die Sprache unterstützt desweiteren keinerlei direkte Speicherzugriffe z.B. über Zeiger, Zeigerarithmetik und– manipulation. VBA ist für die modulare Programmierung konzipiert, d.h. das durch VBA Skripte zu lösende „Problem wird in einzelne Module Schnittstellenspezifikation aufweisen.“ 1 aufgeteilt, die jeweils eine genaue VBA Programme werden somit in kleinere Bestandteile zerlegt, die übersichtlich sind und einfach gewartet werden können. Eine genauere Betrachtung zum Einsatz kommender Modularten erfolgt bei der Vorstellung der Entwicklungsumgebung für VBA in Kapitel 4.2. Mit der Zeit jedoch hat sich aus einer recht einfachen Makro Sprache eine umfangreiche objektorientierte Sprache entwickelt: Klassen und Objekte können syntaktisch dargestellt und implementiert werden. Ferner beherrscht VBA das Prinzip der Datenkapselung und der Schnittstellenvererbung. Im Kontrast dazu unterstützt die Sprache jedoch keine Implementierungsvererbung. Eine direkte Ausführung der VBA Skripte ist nicht möglich – der Zugriff auf VBA (-Skripte) erfolgt über eine vom jeweiligen Wirtsprogramm bereitgestellte Programmierschnittstelle (z.B. die Entwicklungsumgebung). 1 Aus dem „Handbuch Programmiersprachen“, S.45 von Peter.A Henning und Holger Vogelsang Allgemeine Informationen zu VBA | - 6 - 1.3 Verfügbarkeit / Einsatzgebiete VBA wird standardmäßig in der Office Programmierung eingesetzt. Folglich können Entwickler die Sprache in allen MS-Office Programmen, d.h. nicht nur in Word oder Excel, sondern z.B. auch in Outlook, FrontPage oder Visio heranziehen. Es ist die am stärksten verbreitete Möglichkeit auf MS Office basierende Programme zu erstellen. VBA ist überdies in Produkten der CorelCorporation wie z.B. CorelDraw oder CorelPhoto zu finden. Darüber hinaus ist die Skriptsprache in vielen weiteren Programmen als Makrosprache verfügbar z.B. MindManager oder AutoCAD. Dies ist darauf zurückzuführen, dass Microsoft im Juni 1996 das „Microsoft Visual Basic for Applications licensing program“ einführte, sodass alle unabhängigen Softwarehersteller, welche VBA in ihre Programme integrieren wollten, Lizenzen dafür erwerben konnten. Nichtsdestotrotz entschied die Firma im Jahr 2007 jedoch Neukunden keine weiteren Lizenzen mehr anzubieten und das Lizenzprogramm auslaufen zu lassen. Bereits bestehende Kunden können allerdings noch zusätzliche VBA Lizenzen erwerben. Allgemeine Informationen zu VBA | - 7 - Einführung in Visual Basic for Applications 2 Syntax und Anwendung I – Der Sprachkern Bevor es in den weiteren Kapiteln um VBA als Skriptsprache in der Office Programmierung geht, sollte sich der Entwickler mit Syntax und Gebrauch des Sprachkerns von VBA vertraut machen. Der Sprachkern von VBA beinhaltet eine Vielzahl elementarer Anweisungen zur Steuerung von Abläufen bezüglich ihrer Programmlogik. Es wird zu Beginn auf grundlegende Anweisungen (genauer gesagt die Deklaration von Variablen oder Anwendung von Operatoren), Datentypen und wichtige Objekte eingegangen. Am Ende des Kapitels werden Unterprogrammtechnik und Fehlerbehandlung eingeführt. Wie bereits im Vorwort angesprochen, dient das Kapitel als Kurzfassung, sodass eher auf Syntax als auf tiefgreifende logische Konzepte geachtet wird. 2.1 Allgemeines Im Gegensatz zu klassischen Programmiersprachen beispielsweise C/C++ oder Java fehlen die sonst typischen Semikolons, welche das Ende einer Anweisung markieren. In VBA Skripten ist daher prinzipiell pro Zeile nur eine Anweisung erlaubt. Der Einsatz von mehrzeiligen Anweisungen wird durch das Einfügen von „ _“ (Leerzeichen + Unterstrich) am Ende einer Zeile gekennzeichnet. Hochkomma (`) leiten Zeilenkommentare ein. VBA ist „Case insensitive“, d.h. zwischen Groß- und Kleinschreibung wird bei Variablen und Methodennamen nicht unterschieden. Während in den klassischen Programmiersprachen Escape-Sequenzen zur Darstellung von Steuerzeichen helfen, bedient sich VBA sogenannter integrierter Konstanten, deren Einsatzzweck im weiteren Verlauf des Kapitels vorgestellt wird. 2.2 Datentypen VBA bietet für jeden Verwendungszweck den geeigneten Datentyp an. Die nachfolgende Tabelle enthält die wichtigsten von VBA unterstützten Datentypen, sowie deren Speicherbedarf und Wertebereich. Der Datentyp Variant ist ein universeller Datentyp, der sich automatisch den zugewiesenen Daten anpasst. Er ist jedoch sehr speicheraufwändig und nicht optimal einzusetzen. Datentyp Speicherbedarf Wertebereich und Bedeutung Boolean Byte Integer Long 2 Byte 1 Byte 2 Byte 4 Byte Single 4 Byte Double 8 Byte Date Object String Variant 8 Byte 4 Byte 10 Byte (+) 16 Byte (+) Wahrheitswert, kann den Wert „True“ oder „False“ annehmen Ganze Zahl von 0 bis 255 Ganze Zahl von -32.768 bis 32.767 Ganze Zahl von -2,1 * 10^9 bis 2,1 * 10^9 Gleitkommazahl mit einfacher Genauigkeit von ca. -3,4 * 10^38 bis ca. -1,4* 10^(-45) für negative und von ca. 1,4*10^(-45) bis 3,4 * 10^38 für positive Werte Gleitkommazahl mit doppelter Genauigkeit von ca. -1,8*10^308 bis 4,9*10^(-324) für negative und von ca. 4,9*10^(-324) bis 1,8*10^308 für positive Werte Datumsangabe zwischen 1.Januar 100 und 31.Dezember 9999 Verweis auf ein Objekt Zeichenkette mit variabler Länge Datentyp nicht explizit festgelegt (universell) Sprachkern | - 8 - 2.3 Operatoren In VBA existieren vier verschiedene Typen von Operatoren, mit denen sich Variablen verknüpfen und manipulieren lassen. Die folgende Zusammenstellung zeigt eine Auflistung der verschiedenen Operatoren. Es gibt Arithmetische, Logische, Vergleichs-, und Verkettungsoperatoren. Operator Beschreibung + * / ^ Mod Addition Subtraktion bei zwei Operanden, Negation bei einem Operand Multiplikation Division Ganzzahldivision , zuerst werden die Operanden gerundet, dann dividiert und die Nachkommastellen abgeschnitten Potenzierung Modulodivision Operator Beschreibung < <= > >= = <> Like Is Kleiner als Kleiner gleich als Größer als Größer gleich als Gleich Ungleich Stringvergleich, kann auch Platzhalter (*) auswerten Objektvergleich Operator Beschreibung Not And Negation/Nicht: Das Ergebnis ist wahr, wenn der Ausdruck falsch ist. Konjunktion/Und: Das Ergebnis ist wahr, falls beide Ausdrücke wahr sind. Disjunktion/Oder: Das Ergebnis ist wahr, falls mindestens einer von zwei Ausdrücken wahr ist. Exklusives Oder: Das Ergebnis ist wahr, falls genau ein von zwei Ausdrücken wahr ist. Äquivalenz: Das Ergebnis ist wahr, falls beide Ausdrücke True oder False sind. Implikation: ergibt false, falls aus einem wahren Ausdruck ein falscher folgt. \ Or Xor Eqv Operator Beschreibung & Verkettet numerische und alphanumerische Inhalte zu einer neuen Zeichenkette Verkettet numerische und alphanumerische Inhalte zu einer neuen Zeichenkette, kann bei numerischen Ausdrücken schnell falsch verwendet werden, Vorsicht! + Sprachkern | - 9 - 2.4 Variablen, Konstanten und ihr Geltungsbereich Variablen dienen auch in VBA als Platzhalter für Daten, die sich im weiteren Programmablauf durchaus ändern können. Sie werden durch einen Namen und einen Datentyp identifiziert. Die Deklaration und Initialisierung von Variablen erfolgt standardmäßig in zwei Schritten, die von Konstanten in einem Schritt. VBA unterscheidet zwischen expliziter und impliziter Variablendeklaration: Die explizite Deklaration erzwingt die Bekanntmachung der Variable vor ihrem Einsatz, wogegen die implizite Deklaration Variablen bei ihrer ersten Verwendung zur Laufzeit automatisch erzeugt. Letztere Einstellung kann jedoch zu schwer auffindbaren Fehlern führen: Um eine explizite Deklaration zu fordern, müssen Entwickler in einem VBA Modul die Anweisung „Option Explicit“ einsetzen. Zur verbesserten Handhabung neuer Module fügt der VBA Editor diesen Befehl standardmäßig einem gerade neu erstellten hinzu. Wird bei der Deklaration einer Variablen oder Konstanten kein expliziter Datentyp angegeben, ordnet VBA automatisch den Typ Variant zu. Zur Bekanntmachung von Variablen und Konstanten wird folgende Syntax verwendet: Lokale Variablen: o Dim [Name] (As [Datentyp]) `Deklaration o [Name] = [Wert] `Initialisierung Modulebene: Die Initialisierung erfolgt in den Prozeduren eines Moduls o (Sichtbarkeit) [Name] (As [Datentyp]) Konstanten: o (Sichtbarkeit) Const [Name] (As[Datentyp]) = [Wert] Abbildung 9.1 im Abbildungsverzeichnis liefert ein Codebeispiel, welches die einzelnen Möglichkeiten der Variablendeklaration aufzeigt. Der Geltungsbereich von Variablen unterscheidet sich je nach Deklarationsebene: Auf Prozedurebene deklarierte, lokale Variablen stehen nur in der jeweiligen Prozedur zur Verfügung, während auf Modulebene deklarierte Variablen allen Prozeduren eines Moduls zur Verfügung stehen. Ist eine Modulvariable mit dem Schlüsselwort „Public“ als öffentlich markiert, können Prozeduren anderer Module diese Variable ebenfalls nutzen, defaultmäßig ist sie allerdings „Private“ und somit nur im aktuellen Modul verwendbar. Integrierte Konstanten sind systemdefinierte Konstanten, welche vom Wirtsprogramm oder von VBA selbst bereitgestellt werden und spezielle Funktionen aufweisen, z.B. repräsentiert die Konstante vbCrLf einen Zeilenumbruch. Vorsilbe Zugehörigkeit Beispiel vb xl mso VBA Excel MS Office vbRed: Farbe Rot xlLine: Liniendiagramm msoSortOrder: Sortierreihenfolge Sprachkern | - 10 - 2.5 Arrays, dynamische Arrays und Collections In der Programmiersprache VBA können Variablen zu Feldern, den Arrays, zusammengefasst werden. Ihre Elemente werden intern durch einen fortlaufenden Index unterschieden und angesprochen. Entwickler können Arrays bei der Deklaration eine feste Feldgröße zuweisen - alternativ können sie die Felder aber auch dynamisch aufbauen. Dynamische Arrays können ihre Größe zur Laufzeit eines Programmes je nach Bedarf ändern, dennoch müssen Programmierer bei der Veränderung der Feldgröße darauf achten, dass VBA die gespeicherten Werte nicht mit Default-Werten überschreibt, was standardmäßig der Fall wäre. Die Manipulation der Feldgröße wird durch den Befehl ReDim eingeleitet. Das im Anschluss optionale Schlüsselwort Preserve verhindert das Überschreiben alter Werte. Mehrdimensionale Felder werden in VBA ebenfalls unterstützt. Syntaktisch bieten sich somit mehrere Alternativen zur Deklaration: Standardvariante: Festgelegte Größe angeben, Indizes laufen von 0 bis Größe o Dim [Name][Größe] (As [Datentyp]) Größe festlegen, aber den Laufindex beeinflussen o Dim [Name][IndexAnf] To [IndexEnd] (As [Datentyp]) Dynamisches Feld anlegen o Dim <Name>() As <Datentyp> Dynamisches Feld vergrößern: o ReDim (Preserve) [Name] [Größe]( As [Datentyp] ) In diesem Zusammenhang wird noch auf die Klasse Collection hingewiesen, welches Elemente gleichen oder verschiedenen Typs mit thematischer Verwandtschaft in einer Liste zusammenfassen kann. Ein Collection Objekt bietet mehrere Methoden zur Verwaltung dieser Liste an, z.B. Add() oder Remove() zum Hinzufügen bzw. Löschen von Werten. Ihre Elemente sind ebenfalls über einen Index ansprechbar. Die Verwendung von Arrays und Collections in einem lauffähigen Programm werden durch die Abbildungen 9.2 bzw. 9.3 im Abbildungsverzeichnis dargestellt. 2.6 Benutzerdefinierte Datentypen Benutzerdefinierte Datentypen bieten ebenfalls die Möglichkeit, als Einheit zusammengehörende Variablen zu einem größeren Datentypen zusammenzufassen - beispielsweise wenn Entwickler eine Adresse bestehend aus Postleitzahl, Ort, Straße und Hausnummer simulieren wollen. Bestandteile des neuen Datentyps können alle bekannten Datentypen sein, irrelevant ob Boolean, Array oder ein anderer benutzerdefinierter Datentyp. Im Gegensatz zum Collection Objekt wird auf jedes Attribut direkt über seinen Namen zugegriffen. Konzeptionell ähneln die benutzerdefinierten Datentypen dem vielleicht aus C/C++ bekannten „struct“. Die Erzeugung eines neuen benutzerdefinierten Datentypen erfolgt mit Hilfe des Schlüsselworts Type. Abbildung 9.4 im Abbildungsverzeichnis untermauert die Erläuterungen. Type [Name] [Variablendeklarationen] End Type Sprachkern| - 11 - 2.7 Unterprogrammtechnik: Prozeduren, Aufruf, Parameterübergabe und Optionale Argumente Parallel zur Modularität seiner Programme ist VBA als prozedurale Programmiersprache entwickelt worden, d.h. „der auszuführende Programmcode ist in kleine, unabhängige Einheiten unterteilt, die sich gegenseitig aufrufen können und Parameter zur Bearbeitung und Auswertung übergeben können. Ist die Formulierung der Einheiten allgemein genug, können sie immer wieder in unterschiedlichen Programmen benutzt werden.“.2 In VBA übernehmen diese Aufgabe Prozeduren und Funktionen. Prozeduren sind als kleinste selbstständige Einheiten eines Programms zu verstehen und beinhalten eine Gruppe von Anweisungen. Funktionen besitzen dieselbe Aufgabe, können im Gegensatz zu Prozeduren aber einen Wert an die aufrufende Prozedur als Rückgabewert zurückgeben. Dieser wird innerhalb des Funktionskörpers über die Anweisung o [Funktionsname] = [Wert] zugewiesen. In VBA können sowohl Prozeduren als auch Funktionen Parameter übergeben werden. Diese werden bei der Übergabe durch Kommata voneinander getrennt aufgelistet. Argumente können entweder o o als Kopie (Call-By-Value, Schlüsselwort „ByVal“) oder als Referenz (Call-By-Reference, Schlüsselwort „ByRef“) übergeben werden. Standardmäßig übergibt VBA alle Parameter per Referenz. Optionale Argumente werden durch das Schlüsselwort „optional“ gekennzeichnet. Analog zu Variablen können Funktionen und Prozeduren bezüglich ihrer Sichtbarkeit „Public“ oder „Private“ sein. Prozeduren werden durch den Rahmen o (Sichtbarkeit) Sub *Name+…End Sub und Funktionen durch o (Sichtbarkeit) Function*Name+ *As Datentyp+…End Function gekennzeichnet. Ein übersichtliches Beispiel zur Syntax bezüglich Deklaration von Prozeduren und Funktionen sowie dem Einsatz von Übergabeparametern befinden sich im Abbildungsverzeichnis unter Abbildung 9.5 und 9.6. 2 Sinngemäße Definition übernommen aus ftp://ftp.fernuni-hagen.de/pub/pdf/urz-broschueren/broschueren/b012.pdf Sprachkern | - 12 - 2.8 Klassen und Objektvariablen In VBA lässt sich das Prinzip der Objektorientierung leicht wie in anderen Sprachen auch durch die Erstellung und Verwendung von Klassen und ihren Methoden umsetzen. Die Deklaration und Initialisierung eines Objektes einer Klasse erfolgt ebenfalls zweistufig – letztere wird durch Verwendung des Schlüsselwortes „Set“ eingeleitet. Methoden, welche zum Setzen („Let“) und Auslesen („Get“) von Attributen verwendet werden, werden durch das Schlüsselwort „Property“ gekennzeichnet. Klassen sind flexibler als benutzerdefinierte Datentypen, welche keine Methoden besitzen und müssen – anders als die benutzerdefinierten Datentypen – in einem separaten Klassenmodul bearbeitet werden. Der Name des Klassenmoduls entspricht dem Namen der neu erzeugten Klasse. Aus diesem Grund entfallen in Klassenmodulen die beispielsweise aus C++ bekannten syntaktischen Einleitungen wie „Class XY ,… -“. Es enthält somit nur Attribute und Methoden der Klasse. Eine Deklaration mehrerer Klassen innerhalb eines Moduls ist nicht möglich. Ein Anwendungsfall, welcher im Anhang als Abbildung 9.7 gekennzeichnet ist, verdeutlicht die Handhabung von Klassen in VBA. 2.9 Kontrollstrukturen: Entscheidungsstrukturen & Schleifenstrukturen VBA bietet ebenso wie andere Programmiersprachen auch einen Pool an Kontrollstrukturen an. Diese lassen sich nach Entscheidungs – und Schleifenstrukturen differenzieren. Die folgenden Listen liefern eine Skizzierung der in VBA einsetzbaren Kontrollstrukturen: 2.9.1 Entscheidungsstrukturen: Struktur/Syntax Beschreibung If [Bedingung] Then [Anweisung] Else [Anweisung] End If Fallunterscheidung in ihrer Standardform Iif [Bedingung, Ausdruck1,Ausdruck2] Kurzform der oberen Anweisung: Ist die Bedingung wahr, wird Anweisung 1, sonst Ausdruck2 ausgeführt Select Case [Variable] Case [Ausdruck][Anweisung] Case Else [Anweisung ]End Select Einfacher und übersichtlicher als die IfAnweisung Switch (Bedingung1, Ausdruck1, *Bedingung2, Ausdruck2+,…) Wertet eine Liste von n Bedingungen aus und verarbeitet den Ausdruck der zutreffenden Bedingung Choose(Index, Ausdruck1, *Ausdruck2+,…) Gibt in Abhängigkeit von Wert eines ganzzahligen Indexes den Wert aus einer Liste der Alternativen aus, dessen Listenposition dem Indexwert entspricht Sprachkern | - 13 - 2.9.2 Schleifenstrukturen: Struktur / Syntax While [Bedingung] [Anweisung] Wend Do [While Bedingung] [Anweisung] Loop [While Bedingung] For Zähler [Anfang] To [Endwert] [Step = 1] [Anweisung] Next [Zähler] For Each [Element] in [Feld] [Anweisung] Next [Element] With [Objekt] [Anweisungen] End With Exit For / Exit Do Beschreibung Schleifenstruktur in ihrer Standardform Führt Anweisung aus, solange oder bis die Bedingung erfüllt ist, kann über Exit Do vorzeitig verlassen werden, die Prüfbedingung kann am Anfang oder am Ende der Schleife erfolgen Anzahl der Wiederholungen über einen Zähler festgelegt, Zähler inkrementiert in Höhe der Schrittweite Anzahl der Durchläufe implizit durch Größe der Gruppe festgelegt, speziell für Arrays und Auflistungen Schleife mit nur einem Durchlauf, kann mehrere Eigenschaften eines Objekts manipulieren, ohne dass jedes Mal der Objektname angegeben werden muss Ermöglichen das vorzeitige Verlassen der Schleifenstruktur 2.10 Konvertierung und Manipulation von Daten VBA bietet eine Menge Funktionen zur Manipulation von Daten an. Da hier nicht alle Funktionen vorgestellt werden sollen, bietet die folgende Zusammenstellung eine grobe Übersicht über die am häufigsten verwendeten Funktionen. Einige beschäftigen sich z.B. mit der Umwandlung und Analyse von Datentypen, während andere Funktionen wiederum Strings bearbeiten können. Funktion Vartype() CStr(), CInt(), CVar(), CDbl(),… RTrim(),LTrim(),Trim() Left(), Right(), Mid() InStr() UCase() , LCase() Split() Replace() Join() Beschreibung Liefert einen Integer Wert zurück, der Rückschlüsse auf den Datentypen zulässt: Ist die Variable vom Typ Integer ist der Rückgabewert 2, bei Double z.B. 5 Die C-XXX Methoden konvertieren beliebige Ausdrücke in den gewünschten Datentyp. Schneidet überflüssige Leerzeichen Rechts, Links bzw. an beiden Enden einer Zeichenkette ab. Lösen Teilketten der angegebenen Länge aus übergebenem String von links, rechts oder der Mitte aus heraus. Bei Mid() muss zusätzlich noch die Startposition angegeben werden. Prüft, ob der übergebene Ausdruck in der aktuellen Zeichenkette vorliegt und gibt einen Boolean-Wert zurück. Führt Umwandlungen von Klein- in Großbuchstaben (U) oder umgekehrt (L) durch. Trennt eine übergebene Zeichenkette nach dem angegebenen Muster auf. Als Rückgabewert erhält man ein Feld mit den Teilstrings (ohne Trennmuster) zurück. Ersetzt einen Ausdruck in einer Zeichenkette durch einen anderen. Führt Zeichenketten mit dem Angegebenen Trennsymbol zusammen. Sprachkern | - 14 - 2.11 Fehlerbehandlung Zur Behandlung von (Laufzeit-)Fehlern dient dem Entwickler das Schlüsselwort o On Error: [Anweisung] Nach dieser Anweisung kann man weitere Maßnahmen zur Fehlerbehandlung einleiten, z.B. die Ausgabe eines Fehlertextes mit anschließendem Programmende. Meist kombiniert man die On Error Anweisung mit der im Entwicklerumfeld eher unerwünschten Anweisung o GoTo [Marke] welche in VBA jedoch noch frequentiert zur Fehlerbehandlung eingesetzt wird. Eine Beschreibung des Fehlers erhalten Office Programmierer durch Aufruf der Eigenschaft „Description“ des Fehlerobjekts „Err“: o Err.Description Mit der Anweisung o Exit Sub kann man, falls gewünscht, eine Prozedur vorzeitig verlassen, während mit dem Befehl o Resume Next der Programmablauf nach Auftreten des Fehlers fortgesetzt werden kann. Entwickler sollten vor allem im Umgang mit I/O Operationen oder Eingabeoperationen die Fehlerbehandlung nicht unterschätzen, denn ein nicht bedachter oder übergangener Fehler kann schnell zu unerwünschten Ergebnissen führen. Sprachkern | - 15 - Einführung in Visual Basic for Applications 3 Excel als Tabellenkalkulationsprogramm Die aktuelle Passage soll Lesern, welche wenige oder keine Erfahrungen im Umgang mit Excel aufweisen, das Programm vorstellen. Vor der Einsicht in Fähigkeiten und Bestandteile werden allgemeine Informationen über das Programm vermittelt, derweil kommt am Ende des Kapitels die logische Verknüpfung zwischen Excel und VBA zustande. Eine strukturierte bzw. detaillierte Einführung der einzelnen Komponenten und Funktionen von Excel ist in diesem Kapitel aufgrund des Umfangs nicht vorgesehen: Die sich durch VBA ergebenden Möglichkeiten zur Entwicklung einer professionellen Excel Anwendung stellen diese im weiteren Verlauf des Skripts automatisch vor. Außerdem soll Excel im Rahmen des Skripts nur als Inbegriff für ein mögliches Office Programm fungieren, da sich viele Konzepte auf die Office Programmierung mit VBA verallgemeinern lassen. 3.1 Allgemeine Informationen zu Excel Excel ist ein von Microsoft entwickeltes Programm zur Tabellenkalkulation. Als Tabellenkalkulation wird „eine Software für die interaktive Eingabe und Verarbeitung von numerischen und alphanumerischen Daten in Tabellenform“ 3 bezeichnet. Es ist standardmäßig ein Teil des ebenfalls von diesem Unternehmen herausgegebenen MS Office Paketes. Die zuletzt veröffentlichte Version ist Excel 2010 und ist aktuell eines der bekanntesten Tabellenkalkulationsprogramme. Vorgängerversionen wie Excel 2007 und sogar Excel 2003 sind zurzeit noch weit verbreitet. 3.2 Fähigkeiten und Bestandteile von Excel Excel bietet dem Anwender viele Möglichkeiten zur Datenkalkulation, -analyse und deren Präsentation. Sortier- und Filterfunktionen unterstützen ihre Auswertung, während Diagramme zur graphischen Veranschaulichung solcher Informationen dienen können. Excel beherrscht diverse Zahlenformate, die den Umgang mit spezifischen Größen z.B. Datum und Uhrzeit oder Postleitzahlen, erleichtern. Die Kalkulation von Daten als Kernaufgabe von Excel wird durch den gezielten Einsatz von Formeln und Funktionen bestimmt. Die Berechnung des BMI nach Angabe von Gewicht und Körpergröße wäre ein typischer Fall für den Verwendungszweck einer Formel in Excel. Weitere Funktionen ermöglichen den Import von Daten aus externen Datenquellen z.B. CSV oder XML Dateien und Datenbanken. Die Interaktion mit dem Benutzer kann durch Einfügen von Dialogen und Formularsteuerelementen aufgewertet und belebt werden. Excel weist - genauso wie alle anderen Office Anwendungen - eine VBA-Schnittstelle zur Bearbeitung und Ausführung von VBA Makros auf. 3 http://de.wikipedia.org/wiki/Tabellenkalkulation Excel als Tabellenkalkulationsprogramm| - 16 - 3.3 Vorteile des Einsatzes von VBA Warum sollte man VBA nun bei der Entwicklung einer Excel- (und somit auch Office-) Anwendung nutzen? Theoretisch ist es leistbar, die überwiegende Anzahl an Aufgaben manuell oder mit reinen Excel Funktionen zu lösen. Beherrscht man als Entwickler einer Excel Anwendung jedoch die Programmiersprache VBA, ermöglicht das aus einem reinen Tabellenkalkulationsprogramm ein noch mächtigeres Entwicklungssystem zu erzeugen. Durch eine gezielte und professionelle Anwendung von VBA Skripten bietet sich die Gelegenheit, eine Excel-Anwendung relativ einfach an die eigenen Bedürfnisse anzupassen und zusätzlich die in der Anwendung benötigten Fähigkeiten von Excel optimal einzusetzen. Mit Hilfe von VBA Skripten können benutzerdefinierte Abläufe und Lösungen für Problemstellungen festgelegt und im Hintergrund automatisiert werden: Ein Anwendungsfall wäre das Einlesen von Daten aus einer Textdatei, deren Aufbau, aber nicht deren Menge, bekannt ist, weil die einzulesenden Daten bestimmten Bedingungen unterliegen. Aus diesem Beispiel lässt sich ebenfalls schließen, dass die Sprache Aufgaben lösen kann, für die reine Excel Funktionen (z.B. Formeln) nicht ausreichen oder einen viel zu hohen Mehraufwand erfordern. Das Excel Programm des Anwenders kann durch den Einsatz von VBA somit gezielt erweitert werden, da ihm zusätzliche Funktionen und Abläufe zur Verfügung stehen, aber auch zur Vermeidung von Fehlbedienungen eingeschränkt werden. Betrachtet man von betrieblicher Seite aus den Kostenaspekt, so fällt sicherlich auf, dass man keine weiteren Lizenzgebühren für die Nutzung der Programmiersprache bezahlen muss: Alle Firmen, die das MS Office Paket nutzen, mussten bereits Lizenzgebühren für das Office Paket entrichten, in dem die Programmiersprache längst fester Bestandteil ist. Diese Kostenersparnis wird damit gerade für kleine und mittlere Unternehmen lukrativ, welche Ausgaben für zusätzliche Software, Schulungen oder vielleicht sogar Hardware meiden wollen. Viele Softwareentwickler und Anwender sind schließlich schon das MS Office Paket (oder ähnliche Office Pakete) gewohnt, sodass die Arbeit, irrelevant ob Entwicklung oder Anwendung, in einer vertrauten Umgebung stattfinden kann. Dies kann sogar u.U. die Produktivität erhöhen. Excel als Tabellenkalkulationsprogramm | - 17 - Einführung in Visual Basic for Applications 4 Der Arbeitsbereich von Excel und die Entwicklungsumgebung für VBA Im Vorwort des vorherigen Kapitels wurde schon erwähnt, dass der sichere Umgang mit dem Arbeitsbereich des Office Programms und der Entwicklungsumgebung von VBA entscheidend für die Office Programmierung ist. Ist man als Entwickler über wesentliche Elemente des Arbeitsbereiches im Bilde, begreift man auch schnell den Einsatz elementarer VBA Objekte und Funktionen. Da im Skript Excel herangezogen wird, schließt sich dem Vorwort eine Vorstellung des Arbeitsbereiches von Excel 2007 an, während im Anschluss dazu auf die Entwicklungsumgebung für VBA, den VBA Editor, eingegangen wird. 4.1 Der Arbeitsbereich von Excel Der maßgebliche Arbeitsbereich von Excel besteht aus den sog. Arbeitsmappen. Diese enthalten im Register angeordnete Tabellenblätter, deren Inhalt angezeigt werden kann. Tabellenblätter wiederum bestehen aus Zellen, die Daten speichern. In Excel wird die Tabelle in Zeilen und Spalten eingeteilt, sodass jede Zelle über eine Kombination aus Buchstabe (Spalte) und Zahl (Zeile) eindeutig identifiziert werden kann - das Zellbezugssystem. Im oberen Bereich befindet sich die Menüleiste mit ihren zahlreichen Funktionen. Bild Nummer 9.8 im Abbildungsverzeichnis liefert eine visuelle Darstellung des Arbeitsbereiches. 4.2 Vorstellung des VBA Editors: Zur Entwicklungsumgebung für VBA, den VBA Editor, gelangt man o o über die Tastenkombination Alt-F11 oder - seit Office 2007 - auch über die Auswahl von Entwicklertools Visual Basic in der Menüleiste. Daraufhin öffnet sich der VBA Editor als neues Fenster. Prinzipiell ist die IDE ein eigenständiges Programm mit Fenstersystem und Symbolleisten, trotzdem jedoch nur über oben genannte Methoden zu erreichen. Sie besteht aus mehreren Komponenten, die in den weiteren Abschnitten vorgestellt werden. Zur visuellen Unterstützung ist Abbildung 9.9 im Anhang vorzufinden. Der Arbeitsbereich von Excel und die Entwicklungsumgebung für VBA | - 18 - 4.2.1 Projekt Explorer Der Projektexplorer stellt eine Überschau der aktuell verwendeten Module in Form einer Baumstruktur zur Verfügung. Baut das Projekt auf mehreren Arbeitsmappen auf, werden sie untereinander aufgelistet. Module dienen als „Container“ für bereits erstellten Programmcode. Wie in der Einleitung bereits erwähnt, weisen Module eine Schnittstellenspezifikation auf – VBA unterscheidet zwischen vier Arten von Modulen: 4.2.1.1 Office Objekte Hier werden alle Module aufgelistet, die bereits von Beginn an zur Office Anwendung selbst gehören. Im VBA Editor für Excel Anwendungen erscheint die Beschreibung „Microsoft Excel Objekte“ und es folgt eine Auflistung aller zur aktuellen Arbeitsmappe gehörenden Tabellen inklusive eines Verweises auf die aktuelle Arbeitsmappe selbst („DieseArbeitsmappe“). Tabellen und Dokumenten kann nämlich auch VBA Code zugewiesen werden. Module aus diesem Teilbereich werden vor allem im Zusammenspiel mit Ereignissen (Kapitel 5.2 und 5.9, Syntax und Anwendung II) interessant. 4.2.1.2 Formulare Im Bereich Formulare werden alle Module aufgelistet, welche sich mit benutzerdefinierten Dialogen und Formularen (GUI) befassen. Näheres zu benutzerdefinierten Dialogen und Formularen ist in Kapitel 5.8.3 nachzulesen. 4.2.1.3 Klassenmodule In diesem Ordner werden alle Module abgelegt, welche Programmcode für selbst erstellte Klassen beinhalten. 4.2.1.4 Module Hier werden alle anderen allgemeinen Module abgelegt, welche nicht einer o.g. Spezifikation entsprechen. Enthaltene Prozeduren und Variablen sind für die direkte Ausführung in Excel oder Verwendung in anderen Modulen vorgesehen. 4.2.2 Eigenschaftenfenster Das Eigenschaftenfenster dient als Übersicht über die Eigenschaften (Attribute) des aktuell ausgewählten Moduls und erleichtert ihre Modifikation. Im Bereich der Formulare wird das Eigenschaftenfenster frequentiert verwendet. 4.2.3 Programmeditor Das Codefenster dient sowohl zur Eingabe neuen Programmcodes als auch zur Vorschau bereits bestehenden Programmcodes für das aktuell ausgewählte Modul. Zusätzlich wird im Programmeditor die Gestaltung von Dialogen und Formularen vorgenommen. Der Arbeitsbereich von Excel und die Entwicklungsumgebung für VBA | - 19 - 4.2.4 Direktfenster Das Direktfenster kann bei der Entwicklung von Modulen zu Testzwecken und zum Debugging genutzt werden. Funktionen lassen sich dort direkt aufrufen und ausführen. Zusätzlich erscheinen alle Ausgaben im Direktfenster, welche mit Hilfe der Anweisung o Debug.Print [text] im Programmcode angegeben wurden. Das Direktfenster ist standardmäßig ausgeblendet und muss unter o Ansicht Direktfenster erst manuell aktiviert werden. 4.2.5 Objektkatalog / IntelliSense Der Objektkatalog enthält eine Auflistung aller durch VBA nutzbaren bzw. verfügbaren Objekte. Er dient als Nachschlagewerk. Im linken Teilfenster erscheint eine Liste der Klassen, im rechten die zu einer markierten Klasse gehörenden Attribute und Methoden. Der Objektkatalog wird über o Ansicht Objektkatalog eingeblendet. Eng mit dem Objektkatalog verknüpft ist die Eigenschaft des VBA Editors, während der Eingabe von Programmcode eine Liste mit Methoden und Eigenschaften für das aktuell ausgewählte Objekt vorzuschlagen. In der von Microsoft bereitgestellten Entwicklungsumgebung Visual Studio wird diese Fähigkeit als IntelliSense bezeichnet. Der Begriff hat sich im Programmierumfeld für ähnliche Funktionen etabliert und wird somit auch hier übernommen. Der Arbeitsbereich von Excel und die Entwicklungsumgebung für VBA | - 20 - 5 Syntax und Anwendung II – VBA im Zusammenspiel mit Excel VBA-Skripte sind nur im Zusammenspiel mit ihren Wirtsanwendungen sinnvoll. Demgemäß lassen sich auch mit dem Sprachkern alleine keine zweckmäßigen Makros entwickeln. Wirtsprogramme bieten VBA jedoch spezifische Objekte und Funktionen an, auf die es zugreifen kann. Dank dieser Objekte kann eine Interaktion zwischen VBA Skript und Wirtsprogramm realisiert werden. Im Verlauf des Kapitels werden Excel Objekte eingeführt und vorgestellt. Neben den Excel Objekten wird auch auf Formularsteuerelemente eingegangen, welche für den Entwurf von Dialogen und Formularen bedeutsam sind. In diesem Zusammenhang werden auch die im vorherigen Kapitel erwähnten Ereignisse wichtig. Am Ende des Abschnitts sollten Leser ihre Anwendung verstehen und somit schon recht fortgeschrittene VBA-Makros implementieren können. 5.1 Allgemeine Informationen Vorausschauend lässt sich sagen, dass viele Operationen bzw. Problemstellungen auf verschiedenste Weise mit jeweils anderen Methoden und Objekten gelöst werden können, denn die VBA-Excel Bibliothek ist groß. Da der Titel dieses Skripts „Einführung in die Programmiersprache VBA und Einführung in die Office Programmierung“ lautet, stehen hier Einfachheit und Verständlichkeit im Vordergrund. Effektive oder stilgerechte Programmierung ergeben sich mit der Zeit durch praktische Anwendung des Erlernten. Aus diesem Grund wird also nicht der gesamte Befehlssatz von VBA-Excel detailliert vorgestellt, sondern nur die intuitivsten oder am häufigsten verwendeten Anweisungen. Im Zweifelsfalle helfen Objektkatalog, IntelliSense oder Foren aus dem Web weiter. 5.2 Ereignisse In der Office Programmierung sind die sog. Ereignisprozeduren, kurz Ereignisse, von grundlegender Bedeutung: Diese Prozeduren werden unter bestimmten Voraussetzungen automatisch aufgerufen ohne dass der Benutzer zwingend etwas davon bemerkt. Genauer betrachtet wird o das [Workbook-]Ereignis Workbook_Open() ausgelöst, sobald der Nutzer in Excel eine neue Arbeitsmappe öffnet. Es dient im Zusammenhang als Beispiel für bereits „integrierte“ Ereignisprozeduren. Der im Skript häufiger auftauchende Zusatz „integriert“ ist kein feststehender Begriff – er wird hier zur verbesserten Beschreibung des Prozedurcharakters verwendet, denn diese Ereignisprozeduren wurden implizit schon angelegt, erhalten aber ohne manuelle Implementierung keinerlei zusätzliche Funktionalität. Von diesem Ereignistyp wurden bereits viele angelegt, deren jeweilige Bezeichnung sich auch im Objektkatalog nachschlagen lässt. Neben den integrierten Ereignissen können in Klassenmodulen auch neue Ereignisse angelegt und ausgelöst werden. Eine genauere Betrachtung der Ereignisprozeduren ergibt sich im weiteren Skriptverlauf automatisch, denn Ereignisprozeduren sind nur sinnvoll einzusetzen, sobald der Umgang mit Excel Objekten und Dialogen vergegenwärtigt wurde. Excel Objekte und Interaktion mit dem Nutzer| - 21 - 5.3 Excel Objekte Neben dem Sprachkern (vorgestellt in Kapitel 2, Syntax und Anwendung I ) kann VBA auf spezielle Objekte, Methoden und integrierte Konstanten zugreifen, die sich auf die jeweilige OfficeAnwendung beziehen. Die aufgeführte Abbildung liefert einen Auszug elementarer Objekte in Excel. Objekt Beschreibung Application Hauptobjekt, repräsentiert die Anwendung selbst Workbooks Auflistung aller zur Anwendung gehörenden Arbeitsmappen ActiveWorkbook Auflistung aller zur aktuellen Arbeitsmappe gehörenden Tabellenblätter Auflistung aller zur aktuellen Arbeitsmappe gehörenden Diagrammblätter Die aktuell aktive Arbeitsmappe ActiveSheet Das aktuell aktive Tabellenblatt ActiveCell Die aktuell aktive Zelle ActiveChart Das aktuell aktive Diagrammblatt Worksheets Charts Cells(Zeile,Spalte) Die Arbeitsmappe mit dem aktuell ausgeführten VBA Code, muss nicht die aktive Arbeitsmappe sein Das Tabellenblatt in welcher die aktuell ausgeführte Prozedur steht, muss nicht das aktive Tabellenblatt sein Repräsentiert eine Zelle Range Repräsentiert einen Zellverbund Selection Repräsentiert selektierten (markierten) Zellverbund ActiveSheet.UsedRange Repräsentiert den aktuell verwendeten Platz in der Tabelle ThisWorkbook ThisWorksheet 5.4 Aktionen auf Tabellenblättern und Arbeitsmappen Im Zusammenspiel zwischen VBA und Excel kommt es immer wieder vor, dass die Anwendung im Hintergrund automatisch auf Arbeitsmappen oder Tabellen zugreifen muss. Ereignisse können hier u.U. eine wichtige Rolle spielen, denn die Sprache bietet in diesem Teilbereich mehrere integrierte Ereignisse an, welche Entwickler manuell implementieren können. Neben den Ereignissen bieten VBA und Excel einfache Funktionen zur Manipulation von Tabellenblättern und Arbeitsmappen an, von denen die grundlegenden in der nächsten Tabelle aufgeführt sind: Bei der Vorstellung von Methoden und Eigenschaften werden im weiteren Verlauf des Kapitels Anwendungsfälle aufgeführt und der ausschlaggebende Befehl jeweils entsprechend hervorgehoben. Excel Objekte und Interaktion mit dem Nutzer| - 22 - Methode / Beispiel Beschreibung der Funktionalität Ereignisprozedur Workbooks(„Mappe1.xslm”).Activate Aktiviert eine Arbeitsmappe. Workbook_Activate Workbooks(“Mappe1.xslm“).Close Schließt eine Arbeitsmappe Workbooks.Open “Mappe1.xslm” Öffnet eine Arbeitsmappe ActiveWorkbook.Name Namen einer Arbeitsmappe ActiveWorkbook.Save Sichert eine Arbeitsmappe Worksheets(“Tabelle1”).Activate vollständigen Pfad einer Arbeitsmappe Sichert eine Arbeitsmappe unter anzugebendem Pfad ab Aktiviert ein Tabellenblatt Range(„A2:D2“).Select Zellbereich auswählen Worksheets(“Tabelle1”).Select Aktiviert ein Tabellenblatt und holt es in den Vordergrund Worksheets.Add Neues Tabellenblatt hinzufügen ThisWorkbook.Path ThisWorkbook.SaveAs Worksheets(“Tabelle1”).Move after/before:= Worksheets(“Tabelle2”) Worksheets(“Tabelle1”).Visible Workbooks/Worksheets.Count Workbook_Open Worksheet_Activate Workbook_NewSheet Verschiebt ein Tabellenblatt Sichtbarkeit der Tabelle Anzahl der zur Anwendung gehörenden Arbeitsmappen bzw. zu der Arbeitsmappe gehörenden Tabellen 5.5 Manipulation von Zellen und Zellbereichen Da Excel ein Tabellenkalkulationsprogramm ist, kann der Entwickler auf ein vielfältiges Arsenal an Methoden und Objekten zurückgreifen, welche die Manipulation von Zellen und Zellbereichen zum Ziel haben, sei es die Selektion oder das Einfügen von Zellen oder das Füllen der Zellen mit Inhalt oder Formaten. Einen Auszug mit wichtigen Methoden liefert die nun aufgeführte Zusammenstellung. Excel Objekte und Interaktion mit dem Nutzer| - 23 - Methode / Beispiel Range(„A5“).Value ActiveCell.Formula Cells(3,3).Cut Destination:=Cells(2,3) ActiveCell.Copy Destination:=Range(“C4”) Beschreibung der Funktionalität Zum Setzen oder Auslesen des Inhalts der ausgewählten Zelle Zum Setzen oder Auslesen der Formel einer ausgewählten Zelle Schneidet den Inhalt einer Zelle aus und fügt ihn in einer anderen Zelle ein Kopiert den Inhalt einer Zelle und fügt ihn in einer anderen Zelle ein ActiveCell.Row / Column Liest Reihe bzw. Spalte einer Zelle aus Cells(1,2).EntireRow/EntireColumn Selektiert die gesamte Reihe/Spalte ActiveSheet.UsedRange .SpecialCells(xlCellTypeLastCell) Spricht spezielle Zellen an, beispielsweise hier die Letzte verwendete ActiveCell.EntireRow/EntireColumn .Insert Shift:=xlToRight/xlDown fügt eine Reihe/Spalte hinzu ActiveCell.Clear ActiveCell.Delete ActiveCell.AddComment Range(“A1:E4”).Find(“test”).Value Range(“A1:E4”).Find(“test”).Address IsNumeric IsDate Convert (Range(“A4”).Value, “km”, “mi”) ActiveSheet.Sort Range(“A1:A3”).NumberFormatLocal = “#.##0,00€” Cells(1,1).FormulaLocal = "=Wennfehler((Summe(L" & j & "/C" & j & "));0)" Löscht den Inhalt der Zelle Löscht die gesamte Zelle und verschiebt somit auch das gesamte Tabellenblatt Fügt einer Zelle einen Kommentar hinzu Prüft, ob im selektierten Bereich eine Zelle mit angegebenem Inhalt zu finden ist, und gibt ihren Wert zurück. Prüft, ob im selektierten Bereich eine Zelle mit angegebenem Inhalt zu finden ist, und gibt ihre Adresse zurück. Überprüft den Inhalt einer Zelle auf numerische Inhalte Überprüft ob der Inhalt der Zelle vom Datentyp Date ist Liefert eine Reihe von Umrechnungen für physikalische Einheiten, exemplarisch eine Umrechnung des Wertes aus Zelle A4 von Kilometer in Meilen Sortiert den angegebenen Bereich des Tabellenblatts nach übergebenem Muster Zellen formatieren Fügt eine Excel Formel ein (deutsche Schreibweise und absoluter Bereich) Excel Objekte und Interaktion mit dem Nutzer| - 24 - 5.6 Layout von Zellen vordefinieren Das Erscheinungsbild jeder Anwendung sollte der Aufgabenstellung entsprechend angemessen sein. Desweiteren fördert ein gutes Layout die intuitive Bedienung eines Programms. Zellen von Daten, welche kritische Grenzen über- oder unterschreiten, mit roter Farbe als Warnsignal zu unterlegen kann beispielsweise die Benutzerführung vereinfachen. Die Layoutgestaltung von Tabellen in Excel kann recht einfach mit Hilfe von VBA gehandhabt werden. Formatiert werden können u.a. Schriftentyp, Rahmen, Farbe, Höhe und Breite einer Zelle. Farben können entweder über einen ColorIndex, über ein RGB-Objekt oder über integrierte Konstanten zugewiesen werden. Eine Liste zeigt die gängigsten Formatierungsmöglichkeiten auf. 5.6.1 Formatierung der Schrift Methode/Beispiel Beschreibung der Funktionalität Range(„A1:E3“).Font.Size = 12 Range(„A1:E3“).Font.Italic = true Range(„A1:E3“).Font.Bold = true Range(„A1:E3“).Font.name = “ComicSansMS” Größe der Schrift Ausgabe in kursiver Schrift Ausgabe in fetter Schrift Schriftstyle ändern Ausgabe der Schrift in Farbe (Angabe mit Hilfe einer Integrieren Konstanten) Ausgabe einer Schrift in Farbe (Angabe abhängig von der Farbpalette in Excel, Index 1-56) Ausgabe in tiefgestellter Schrift Ausgabe in hochgestellter Schrift Ausgabe unterstrichen Range(„A1:E3“).Font.Color = vbRed Range(„A1:E3“).Font.ColorIndex = 52 Range(„A1:E3“).Font.Subscript = true Range(„A1:E3“).Font.Superscript = true Range(„A1:E3“).Font.Underline = true 5.6.2 Formatierung von Rahmen Methode / Beispiel Beschreibung der Funktionalität Range(“A1:C8”).Borders Wählt den Gesamtrahmen aus Range(“A1:C8”).Borders(Index) Range(“A1:C8”).BorderAround Range(“A1:C8”).Borders.LineStyle Range(“A1:C8”).Borders.Weight Range(“A1:C8”).Borders.ColorIndex = 52 Range(“A1:C8”).Borders.Color = vbYellow Ordnet einen Teilrahmen über den Indexwert zu. Zulässig sind die Konstanten xlTop, xlBottom, xlLeft, und xlRight. xlNone löscht den Rahmen. Erstellt einen Rahmen um den angegebenen Zellbereich. Ordnet die Rahmenart zu. Es können die Konstanten xlContinous, xlDash, xlDouble, xlDot und xlNone angegeben werden Definiert die Dicke des Rahmens. Möglich sind xlThick, xlMedium, xlThin und xlHairline Bestimmt die Farbe des Rahmens abhängig von der Farbpalette in Excel Bestimmt die Farbe des Rahmens anhand einer integrierten Konstanten Excel Objekte und Interaktion mit dem Nutzer| - 25 - 5.6.3 Formatierung der Zelle Methode / Beispiel Beschreibung der Funktionalität ActiveCell.Interior.ColorIndex = 52 ActiveCell.Interior.Color = RGB(125,200,100) Selection.Columns.AutoFit Selection.Rows.AutoFit 5.7 Füllt die Zelle mit einer Farbe aus der Farbpalette von Excel Alternativ zu integrierten Konstanten kann die Farbzuordnung auch durch Angabe eines RGB Objektes erfolgen Passt die Spaltenbreite der aktuell ausgewählten Zelle(n) an. Passt die Zeilenhöhe der aktuell ausgewählten Zelle(n) an Filterfunktionen Sowohl für die Präsentation als auch für die bessere Übersicht von Datensätzen bietet Excel eine Reihe von Filterfunktionen, die auch in VBA genutzt werden können. Grundsätzlich ist es möglich, alle in einer Tabelle befindlichen Daten nach verschiedensten Kategorien zu filtern. Präziser formuliert gibt es nicht nur Text- oder Zahlenfilter, sondern auch Datumsfilter oder zusammenhängende Filter mit mehreren Bedingungen. VBA verwendet für die Automatisierung und Konfiguration von Filtervorgängen das AutoFilter Objekt: Methode / Beispiel ActiveSheet.UsedRange… .AutoFilter [Spalte],[Bedingung] .AutoFilter .AutoFilter 6,“>20“ .AutoFilter 1, „>=2010/1/22“ .AutoFilter 6, „Test1“ ,xlOr, „42“ .AutoFilter 6, „<=99“ , xlAnd , „<>12“ .AutoFilter 2, „*wild*“ .AutoFilter 4, „rwth“ .AutoFilter 5, „fh“ Beschreibung der Funktionalität Vorbereitend den verwendeten Tabellenbereich ermitteln… Grundlegende Syntax Löscht den aktuell definierten Filter Beispiel für einen einfachen Zahlenfilter, abhängig von einer Spalte und einer Bedingung. Beispiel für einen einfachen Datumsfilter. Verwendet wird die amerikanische Schreibweise Beispiel für eine Mehrfachbedingung innerhalb einer Spalte, durch Oder verknüpft Beispiel für eine Mehrfachbedingung innerhalb einer Spalte, durch Und verknüpft Bei Textfiltern ist es möglich mit Platzhaltern (*) zu arbeiten um Teilzeichenketten zu filtern Beispiel für einen doppelten Filter, abhängig von zwei Spalten und zwei Bedingungen. Lässt sich beliebig erweitern. Excel Objekte und Interaktion mit dem Nutzer| - 26 - 5.8 Dialoge und Formulare zur Interaktion mit dem Benutzer Dialoge dienen zur Interaktion mit dem Benutzer. Aus ihrer Hilfe soll eine komfortable und deutliche Benutzerführung resultieren. Nicht nur als Warn- oder Statusmeldung werden Dialoge in VBA verwendet. Häufig unterstützen sie auch die Eingabe von Daten in vorformatierte Formulare. In VBA existieren mehrere Arten von Dialogfeldern, die integrierten Dialogfelder und die benutzerdefinierten Dialoge bzw. Formulare. Zusätzlich kann man mit Hilfe von Steuerelementen und passenden Formatierungen das Tabellenblatt als Formular gestalten. 5.8.1 Integrierte Dialogfelder Als integrierte Dialogfelder werden diejenigen Dialoge bezeichnet, welche für spezielle Aufgaben schon präpariert und konzipiert worden sind. An ihrer Gestaltung lässt sich kaum etwas verändern, wohl aber die Reaktion auf Benutzereingaben. Integrierte Konstanten kommen bei der Erzeugung dieser Dialoge recht häufig als Funktionsparameter zur Anwendung. Zu den integrierten Dialogfeldern zählen exemplarisch die Message Box, die Input Box oder auch der Speichern UnterDialog. 5.8.1.1 Die Message Box Message Boxen dienen zur Ausgabe von einfachen Status- oder Warnmeldungen. Mögliche Reaktionen des Benutzers können durch Auswahl integrierter Konstanten gesteuert werden: Beispielsweise lassen sich die anzuzeigenden Buttons (Ok, Abbrechen, etc.) einstellen, sowie Statusmeldungen visuell unterstützen (Ausrufezeichen, Fragezeichen,…). Die Auswahl eines speziellen Buttons durch den Benutzer kann ebenfalls mit Hilfe von Konstanten ausgewertet werden. Die allgemeine Syntax zum Aufruf einer Message Box ist o [Benutzerauswahl] = MsgBox [Ausgabetext, Aussehen und Verhalten, Titel] und lässt folgende Konstanten im Bereich Aussehen und Verhalten zu, welche sich auch durch den + Operator oder Or-Operator sogar kombinieren lassen: Konstante Bedeutung vbAbortRetryIgnore Drei Buttons: Abbrechen, Wiederholen, Ignorieren vbCritical Bild, das eine kritische Warnung visuell unterstützt vbInformation Legt fest, welcher Button ausgeführt wird, sobald der Benutzer nur die Enter-Taste betätigt. Bild, das einen Hinweis mit einem Ausrufezeichen visuell unterstützt Infozeichen vbQuestion Fragezeichen vbRetryCancel Zwei Buttons: Wiederholen, Abbrechen vbDefaultButton1 [2,3] vbExclamation vbSystemModal vbApplicationModal vbYesNo Dialogfeld bleibt immer im Vordergrund, auch wenn der Benutzer die Anwendung wechselt Die Anwendung kann nur fortgesetzt werden, wenn der Dialog beendet wird. Andere Anwendungen sind nicht betroffen. Zwei Buttons: Ja, Nein Excel Objekte und Interaktion mit dem Nutzer| - 27 - Konstante zur Auswertung der Benutzerauswahl Bedeutung vbOk vbNo vbCancel vbRetry vbAbort vbYes vbIgnore Ok-Button bestätigt Nein-Button Abbrechen-Button Wiederholen-Button Abbruch-Button Ja-Button Ignorieren-Button Die oben aufgeführten Konstanten können verwendet werden, um nach einer spezifischen Aktion des Benutzers unterschiedliche Maßnahmen in die Wege zu leiten. 5.8.1.2 Die Input Box Die Input Box nimmt Eingaben eines Benutzers entgegen. Beim Aufruf unterscheidet man zwischen zwei Varianten: o [Eingabewert] = InputBox [Eingabetext,[Titel, Defaultwert, xpos, ypos]] Diese Variante ermöglicht die Angabe eines Default-Wertes und gibt die Eingabe als String zurück an die aufrufende Prozedur. Nutzt der Anwender den Abbrechen-Button, wird eine leere Zeichenkette zurückgegeben. o [Eingabewert] = Application.InputBox(Eingabetext,[Titel,Defaultwert ,Left, Top, Type]) Diese Funktion lässt zusätzlich noch die Formatierung und Prüfung einer Eingabe zu. Als Typ dienen z.B. Zahl, Formel, Text oder Zellbezug, die jeweils durch einen Integerwert repräsentiert werden. Falls der Benutzer auf den Abbrechen-Button klickt, wird false zurückgegeben, sonst entspricht der Rückgabewert dem eingestellten Format. 5.8.1.3 Speichern Unter Dialog Hinter diesem Dialog verbirgt sich das klassische „Speichern unter…“ Menü. Es lassen sich u.a. ein Standarddateiname und Dateityp festlegen. Er wird hier repräsentativ für alle weiteren integrierten Dialoge aufgeführt, welche sich mit Hilfe des Befehls o Application.Dialogs(Konstante).Show([Parameter]) aufrufen lassen: Integrierte Konstante xlDialogOpen xlDialogSaveAs xlDialogPatterns xlDialogFontProperties xlDialogSendMail Beschreibung Datei öffnen-Dialog Speichern Unter-Dialog Farbauswahl-Dialog Schriftauswahl-Dialog Öffnet ein Fenster zum Versenden von Emails. Das Aussehen ist abhängig vom Standard Email-Client. Excel Objekte und Interaktion mit dem Nutzer| - 28 - 5.8.2 Das Tabellenblatt als Formular gestalten [Formular-/ActiveX Steuerelemente] Neben den im vorherigen Kapitel vorgestellten integrierten Dialogfeldern bieten Excel und VBA noch weitere Dialogformen an: Das Positionieren von Steuerelementen in Tabellenblättern ermöglicht die Gestaltung von Formularen. Excel bietet zwei Arten von Steuerelementen an. Formularsteuerelemente sind darauf ausgerichtet, mit den klassischen Excel Funktionen bzw. Formeln zu interagieren und somit ohne VBA Code auszukommen. Sie sind für die Bewältigung kleinerer Aufgaben konzipiert. Formularsteuerelementen Makros und somit VBA Code zuzuweisen ist nur im geringen Umfang z.B. bei Buttons sinnvoll. Diese Sorte von Steuerelementen ist über o Entwicklertools Einfügen Formularsteuerelement zu erreichen. Neben den Formularsteuerelementen können dort auch sog. ActiveX – Steuerelemente ausgewählt und in einem Formular platziert werden. Diese bieten deutlich mehr Möglichkeiten als reine Formularsteuerelemente, denn VBA bietet zahlreiche Objekte und Methoden zur Interaktion mit diesen Elementen an, zum Beispiel kann der Inhalt einer Combo Box ausgelesen oder gesetzt werden. Als vorteilhaft erweist sich beim Einsatz von ActiveX – Komponenten, dass sie mit Hilfe von VBA automatisch erzeugt und im Tabellenblatt positioniert werden können. Auf ein Beispiel zur dynamischen Erzeugung von ActiveX Komponenten wird wegen der Komplexität des Source Codes allerdings nicht weiter eingegangen. Sie sind in VBA unter dem Begriff MSForms zu finden. Es ist sowieso eher üblich, benutzerdefinierte Dialoge aus dem nächsten Abschnitt zu implementieren. Nichtsdestotrotz sollten Leser den Begriff ActiveX in Kombination mit Microsoft Produkten mal gehört haben, da es von Microsoft „als ein Softwarekomponenten-Modell für aktive Inhalte“ 4 entwickelt wurde und somit auch in ihren Produkten frequentiert verwendet wird. Excel bietet eine Fülle von Komponenten zur Auswahl an: - - - 4 Die Schaltfläche Die Schaltfläche verkörpert einen klassischen Button. Er wird in Kombination mit Ereignissen interessant. Es lassen sich u.a. Eigenschaften wie Größe, Name und Aktivierung festlegen. Das Kombinationsfeld (Combo Box) Das Kombinationsfeld lässt den Nutzer aus einer Reihe beliebiger Inhalte auswählen. Der aktuell repräsentierte Wert wird in der Box angezeigt. Über den integrierten Auswahlbutton gelangt man zur Auswahlliste. Das Feld kommt häufig bei Filtervorgängen oder benutzerseitigen Einstellungen zum Einsatz. Das Kontrollkästchen (Check Box) CheckBox Die Check Box kommt ins Spiel, falls benutzerseitige Einstellungen vorgenommen werden müssen und anhand der Einstellungen spezifische Funktionen ausgeführt werden sollen. Charakteristisch ist ihr Einsatzzweck als graphischer Vertreter einer Boolean-Variablen. http://de.wikipedia.org/wiki/ActiveX Excel Objekte und Interaktion mit dem Nutzer| - 29 - - - - - - Das Drehfeld Über das Drehfeld lässt sich eine Variable benutzerseitig zwischen zwei vorher definierten Grenzen konfigurieren. Oft lassen sich dadurch wichtige Messgrößen z.B. Abstände regeln. Das Listenfeld Das Listenfeld weist eine ähnliche Funktion wie das Kombinationsfeld auf, wird graphisch allerdings etwas anders dargestellt. Das Optionsfeld (RadioButton) Die Arbeitsweise des Optionsfeldes ist annähernd deckungsgleich zu den Kontrollfeldern. Das Gruppenfeld (Rahmen) Das Gruppenfeld soll die Identifizierung mehrerer zusammengehöriger Komponenten erleichtern. Hier lassen sich u.a. Rahmen und Überschrift beeinflussen. Bezeichnung (Label) Label1 Das Label soll wichtige Komponenten durch eine Beschriftung hervorheben und zu der intuitiven Benutzersteuerung beitragen. Textfeld (nur als ActiveX – Komponente einzubinden) Das Textfeld ermöglicht die Eingabe und Anzeige benutzerabhängiger Daten. Es ist vielseitig einsetzbar, z.B. lässt sich deaktivieren und als Ausgabefeld nutzen. Neben den oben aufgelisteten Komponenten lassen sich z.B. auch noch Bilder oder Umschaltflächen einbinden. Abschließend ist noch darauf hinzuweisen, dass aus Tabellenblättern erstellte Formulare trotz ihrer Umgestaltung Tabellenblätter bleiben und somit nicht zu den klassischen Dialogen zählen. Aufgrund schlechter Programmierung kann es dem Entwickler möglicherweise passieren, dass unbefugte Nutzer Zugriff auf Rohdaten erhalten, welche in den Zellen des Tabellenblatts gespeichert werden und diese - genauso wie den Aufbau des Formblattes - manipulieren können. Dialoge können diese Problematik lösen, da keine Einträge mehr in einem Tabellenblatt vorgenommen werden können, solange sie aktiv sind (modale Dialoge). Excel Objekte und Interaktion mit dem Nutzer| - 30 - 5.8.3 benutzerdefinierte Dialoge Für eine intuitive und bequeme Benutzerführung reichen integrierte Dialoge und Formulare nicht aus. In vielerlei Hinsicht ist es sinnvoll, eigene Dialoge bzw. Formulare verwenden zu können, die mit Hilfe von verschiedenen Steuerelementen genau auf die Bedürfnisse der Anwendung abgestimmt werden können. Sogenannte „User Forms“ sind im VBA Editor mühelos zu gestalten. Mit Hilfe von o Einfügen User Form wird ein neuer Dialog erzeugt. Dieser ist zunächst leer. Nun lassen sich die in der Werkzeugsammlung aufgelisteten Elemente mit Drag & Drop an beliebiger Stelle auf dem neuen Dialog platzieren und formatieren. Es werden neben den oben bereits vorgestellten Steuerelementen einige zusätzliche angeboten. In diesem Zusammenhang ist das Eigenschaftenfenster des VBA Editors sehr hilfreich – es listet nicht nur die Eigenschaften der aktuell ausgewählten Komponente auf, sondern dort lassen sie sich auch leicht editieren. Über o Rechtsklick Code anzeigen gelangt man zurück zum Code Fenster, um die Funktionalität des Moduls implementieren zu können. Mit der Verwendung von benutzerdefinierten Dialogen ist die gezielte Manipulation von Ereignissen verknüpft. Beispielsweise wird das Ereignis o [Buttonname]_Click() aufgerufen, sobald ein Nutzer auf einen Button klickt. Es existieren viele Ereignisvarianten, die es bei sauberer Programmierung zu beachten gilt. Im Gegensatz zu integrierten Dialogfeldern müssen User Forms durch die Anweisung o [UserFormName].Show explizit eingeblendet werden. Die Oberflächenprogrammierung mit VBA und UserForms erweist sich als vielfältig, daher wird in diesem Abschnitt nur eine Übersicht mit den wichtigsten Methoden, Eigenschaften und Ereignissen vorgestellt. Ein Anwendungsfall ergibt sich im nächsten Unterkapitel im Zusammenhang mit selbst implementierten Ereignissen. Anweisung Beschreibung [Komponente]_Clicked() Ereignis, Bietet die Möglichkeit beim Erzeugen des Dialoges den Komponenten Defaultwerte zuzuordnen. Ereignis Einfacher Mausklick [Komponente]_DblClick() Ereignis Doppelklick [Liste].AddItem() Fügt ein weiteres Auswahlelement der Liste / ComboBox hinzu [Liste].Clear() Löscht die Auswahlliste / ComboBox [Liste].RemoveItem() Entfernt ein Auswahlelement aus der Liste / ComboBox [Liste].Value / Text Aktueller Wert einer Liste / ComboBox [Liste].ListCount Anzahl der Einträge einer Liste / ComboBox UserForm_Initialize() Excel Objekte und Interaktion mit dem Nutzer| - 31 - 5.9 Selbst implementierte Ereignisse auslösen und anwenden – Eventprogrammierung Ereignisse können professionellen Office Entwicklern viel Arbeit ersparen: Durch sie wird es erst möglich, zwei unterschiedliche Module, exemplarisch ein wichtiges Klassenmodul und einen benutzerdefinierten Dialog, zu verbinden. Um einen verständlichen Einstieg in die Event Programmierung zu erhalten, soll ein Anwendungsfall den Umgang mit Ereignissen näher bringen: Excel Objekte und Interaktion mit dem Nutzer| - 32 - Der auf der vorherigen Seite aufgeführte Programmcode soll das Teamwork zwischen Dialog und Klassenmodul hervorheben: Der erste Codeblock enthält den Inhalt des Klassenmoduls „clsRaise“, dem sich wiederum der Code des Dialogs im zweiten Codeblock anschließt. Seine Gestaltung zeigt die Abbildung links unten. Durch Ereignisse wird es Klassen nun letztendlich erlaubt, dynamisch auf Attribute einer anderen Klasse zuzugreifen. Im o.g. Fall greifen die Events „Aktion1“ und Aktion2“ der Klasse „clsRaise“ auf die beiden Bezeichnungsfelder des Dialogs zurück und modifizieren sie automatisch nach der Aktivierung des Buttons. Sie färben die beiden Bezeichnungsfelder rot und zeigen einen hochzählenden Counter an. In der Abbildung rechts unten ist das zu erwartende Ergebnis graphisch aufgeführt. Solch einen Ablauf ohne Ereignisse zu implementieren ist theoretisch nicht ausgeschlossen, würde aber recht schnell zu aufwändig werden. Dafür müssten letztendlich Umwege über zusätzliche Funktionsparameter und Klassenmodule herhalten. Obendrein ist letztere Variante fehleranfälliger und komplizierter zu warten. Eventprogrammierung ist ein weites Feld, dessen Möglichkeiten weit über das vorgestellte Beispiel hinausgehen. Excel Objekte und Interaktion mit dem Nutzer| - 33 - Einführung in Visual Basic for Applications 6 Syntax und Anwendung III – Externe Datenquellen und Präsentation von Daten Für fortgeschrittene Excel bzw. Office Anwendungen reichen die bisher angesprochenen Möglichkeiten sicherlich schon aus. Will man allerdings eine tiefgreifende Office Anwendung entwickeln, wird man mit dem bis jetzt vorgestellten Befehlssatz von VBA schnell auf Probleme stoßen. Mehrere Datensätze gleichzeitig aus einer Datenbank auszulesen und per Hand oder Formular in Excel Tabellen zu übertragen wird auf Dauer mehr als mühselig. Möchten Anwender dann auch noch die Daten automatisch im Hintergrund per Email verschicken und graphisch darstellen, wird die Implementierung ein nahezu aussichtsloses Unterfangen. Aus diesem Grunde bietet der VBA-Befehlssatz auch Schnittstellen für den kontrollierten Austausch mit externen Datenquellen und Programmen an. 6.1 I/O Operationen Der Umgang mit I/O Operationen wurde recht einfach gestaltet: Es gibt wenige Grundoperationen, die schon ausreichen, Datensätze aus Textdateien (o.ä. Formaten) auszulesen bzw. in Dokumente zu exportieren. Das bereits vorgestellte Arsenal an Bearbeitungsmöglichkeiten von Zeichenketten schafft zusätzliche Unterstützung. Open() öffnet die anzugebende Datei. Der Öffnungsmodus (Input, Output oder Append) entscheidet, welche Operationen mit der Datei durchgeführt werden können. Jeder geöffneten Datei wird eine eindeutige Dateinummer zugeordnet, die sie im weiteren Verlauf des Programmes identifizert. Diese Maßnahme wird bei paralleler Datenverarbeitung nützlich. Line Input #<Nr> liest die aktuelle Zeile aus der Datei mit der übergebenen Nummer. VBA erkennt Datentypen z.B. Datumsangaben oder Zeichenketten automatisch. Print #<Nr> dient zum Schreiben einer Zeile in eine Datei. Der Close <Nr> Befehl schließt die angegebene Datei wieder, während EOF das Dateiende repräsentiert. Ein sinnvolles Codebeispiel zur praktischen Anwendung befindet sich als Ergänzung im Abbildungsverzeichnis (Abbildung 9.10). Desweiteren bietet der VBA Befehlssatz Funktionen zum Löschen, Kopieren, Suchen oder Umbenennen von Dateien. Die folgende Grafik bietet einen groben Überblick über die wichtigsten Operationen dieser Kategorie: Methode Dir ( [Pfad] & [Suchmuster] ) FileDateTime ( [Pfad] ) FileLen ( [Pfad] ) GetAttr ( [Pfad] And Konstante) FileCopy( [PfadAlt], [PfadNeu]) Name ( [Alt], [Neu]) Kill ( [Pfad]) Beschreibung der Funktionalität Dient zur Suche von Dateien. Es können auch Platzhalter (*) verwendet werden. Als Rückgabewert erhält man den ermittelten Pfad oder einen Leerstring. Liefert Datum und Uhrzeit der letzten Änderung der Datei Liefert die Dateigröße Dient zur Ermittlung von Datei- und Verzeichnisattributen. [vbHidden, vbSystem, vbDirectory und vbArchive] Kopiert angegebene Datei an den übergebenen Zielort Benennt eine Datei um Löscht eine Datei. Die Aktion kann nicht gemacht rückgängig werden. Externe Datenquellen und Präsentation| - 34 - 6.2 SQL Abfragen und Verarbeitung der Resultate Datenbanken gewährleisten eine persistente Datenhaltung. Professionelle Softwareentwickler werden infolgedessen unweigerlich irgendwann einmal mit Datenbanken in Kontakt kommen. Gerade Excel als Tabellenkalkulationsprogramm kommuniziert häufiger mit Datenbanken als mit gewöhnlichen Textdateien, sobald eine gewisse Menge an Datensätzen auf Dauer bearbeitet und verwaltet werden muss. VBA wartet aus diesem Grunde auch mit einem Befehlssatz für das Absetzen von SQL Befehlen und die Verarbeitung deren Resultate auf. Kernpunkt ist die Verwendung des ADODB.Connection Objektes (ADO: Microsoft ActiveX Data Object), Die Verbindung zur Datenbank wird durch Instanziierung eines Objekts vom Typ ADODB.Connection aufgebaut. Der ConnectionString gibt Datenbankprovider und Datenquelle an. Open() öffnet die Verbindung zur Datenbank, während Close() diese Verbindung wiederum schließt. Das Absetzen eines SQL Befehls erfolgt durch die execute()-Funktion. Die Ergebnisse einer Abfrage werden immer in einem Objekt vom Typ ADODB.RecordSet abgespeichert. Die Datensätze lassen sich durch Kombination aus While-Schleife mit dem Befehl MoveNext() zeilenweise abfragen. Innerhalb eines Datensatzes können die einzelnen Attribute in der Form <Objektname>!<Attributname> angesprochen und verarbeitet werden. Das im Anhang aufgeführte Beispiel macht den sinnvollen Gebrauch der verwendeten Objekte und weiterführender Operationen sichtbar. Es ist dort unter Abbildung 9.11 zu finden. 6.3 Ausführung von Konsolenbefehlen Ähnlich wie in anderen gebräuchlichen Programmiersprachen lassen sich durch VBA Konsolenbefehle an die CMD übergeben und ausführen. Doch es lässt sich immer nur ein einziges Kommando übergeben. Als möglicher Lösungsweg bietet sich hier eine Batchdatei oder ein mit && verkettetes Kommando an. Ebenso lassen sich andere externe Programme direkt aus Excel aufrufen. 6.4 Austausch mit anderen Office Anwendungen Eine Spezialität von VBA ist der Austausch von Informationen zwischen unterschiedlichen Office Anwendungen. Nutzt der Anwender das vollständige Office Paket, kann VBA hier seine ganze Stärke ausspielen, weil komplexe Hintergrundabläufe auf wenige, aber effektive Spezialobjekte zurückgeführt werden können. Der Austausch von Daten zwischen Word, Excel, Outlook und Access wird durch VBA zum Kinderspiel. Dieses Thema ist allerdings ziemlich weitreichend, sodass auf Details der Implementierung im Skript verzichtet wird. 6.5 Externe DLL´s einbinden und nutzen Theoretisch kann es passieren, dass der Befehlssatz von VBA nicht mehr ausreicht oder Möglichkeiten einer weiteren Programmiersprache, z.B. C/C++, die von VBA deutlich übertreffen. VBA lässt aus diesem Grund das Einbinden und die Verwendung externer DLL´s zu. Ein Softwareentwickler kann schwierige Teilaspekte einer Aufgabenstellung nun mit seiner gewohnten Programmiersprache und gewohnten Datenstrukturen lösen. Er hat nur noch dafür zu sorgen, dass VBA die DLL einbindet. Dabei unterstützt den Programmierer die Declare-Anweisung, mit der es auf Modulebene möglich ist, Verweise auf Funktionen und Klassen in einer DLL zu deklarieren. Externe Datenquellen und Präsentation| - 35 - 6.6 Präsentation und Visualisierung mit Hilfe von Grafiken und Diagrammen Zu guter Letzt folgt ein Einblick in die Präsentation und Visualisierung von Daten mit Hilfe von VBA. Die Sprache leistet Unterstützung bei der Erstellung, Verwaltung und Manipulation von Diagrammen und Grafiken. Excel zum Beispiel hat zwar hauptsächlich die Auswertung und Kalkulation von Datenmengen als Aufgabe, eine Präsentation der Daten mit aussagekräftigen Diagrammen sollte in einer professionellen Anwendung aber nicht fehlen. Alle Grafiken, die man in Excel per Knopfdruck erstellen kann, lassen sich auch automatisch und kontextabhängig mittels VBA erstellen und verwalten. Dazu zählen z.B. nicht nur Diagramme sondern auch WordArt, Shapes, Bilder etc.. Dieses Kapitel behandelt aber nur Diagramme. Man differenziert zwischen Diagrammblättern und eingebetteten Diagrammen: Erstere werden in einem separaten Blatt generiert, während letztere kontextabhängig in ein bereits existierendes Tabellenblatt integriert werden. Um eine klare Vorstellung über Verwendungsmöglichkeiten und Resultate der Methoden zu erhalten, wurden die Codebeispiele direkt ergänzt, anstatt sie in das Abbildungsverzeichnis zu integrieren: Die Gestaltungsmöglichkeiten von Diagrammen sind schließlich sehr weit gefächert, folglich sind die aufgeführten Erläuterungen eng mit dem Quellcode verknüpft und enthalten nur die wichtigsten Formatierungsmöglichkeiten. 6.6.1 Diagrammblätter erstellen Der Aufruf der Add()-Methode eines Charts-Objektes erstellt ein neues Diagrammblatt und fügt es der Liste der bereits existierenden Diagrammblätter hinzu. Before oder After legen die Platzierung des neuen Diagrammblattes fest. Das erzeugte Diagramm entspricht einer Instanz der Klasse Chart. Mit Hilfe der Eigenschaft Chart Type lässt sich der Diagrammtyp (hier ein Liniendiagramm: xlLine) festlegen und durch die SetSourceData() Funktion bestimmen, welche Daten dargestellt werden sollen. Durch die Eigenschaft Name lässt sich dem Diagrammblatt ein eindeutiger Name zur verbesserten Identifikation zuweisen. Externe Datenquellen und Präsentation| - 36 - 6.6.2 Eingebettete Diagramme erstellen Im unten aufgeführten Codeauszug lassen sich viele Parallelen zur Erstellung eines Diagrammblattes erkennen. Hier wird jedoch anstatt einer Instanz vom Typ Chart ein Objekt vom Typ ChartObjekt erzeugt. Neu ist die Platzierung des ChartObjekts im Tabellenblatt durch Angabe von Abstand des Rahmens zum linken und zum oberen Ende der Tabelle, Höhe und Breite. Externe Datenquellen und Präsentation| - 37 - 6.6.3 Diagrammblätter gestalten Diagramme besitzen viele Eigenschaften, die im Laufe des Programmes manipuliert werden können. Die nun dargestellte Prozedur zeigt einige wichtige davon auf, längst aber nicht alle. Eine Instanz der Klasse ChartArea repräsentiert die Diagrammfläche des Diagramms. Das schließt auch die Zeichnungsfläche oder auch Titel und Legende ein. Die Eigenschaft Interior verweist auf das „Innere“ des Diagramms, welchem wiederum z.B. eine Farbe zugewiesen werden kann. Das Objekt PlotArea steht für die Zeichnungsfläche des Diagramms, wobei das Innere der Fläche auch mit Interior angesprochen werden kann. Ob ein Diagramm einen Titel besitzt, bestimmt die Eigenschaft HasTitle, dessen Layout mit Hilfe des ChartTitle Objekts modifiziert wird. Beispielsweise verkörpert die Eigenschaft Text die Beschriftung des Titels. Analog dazu bestimmt die Eigenschaft HasLegend ob ein Diagramm eine Legende besitzt und das entsprechende Legend Objekt wie das Layout gestaltet werden soll. Das Axes-Objekt steht für eine Auflistung aller Achsen eines Diagrammes, wobei es nicht mit dem Axis-Objekt verwechselt werden sollte, welches genau eine Achse repräsentiert. Hier lassen sich Titel (AxisTitel), Formatierung der Achsenbeschrifung (TickLabels) sowie Skalierung der jeweiligen Wertachse (…Scale) bearbeiten. Datenreihen lassen sich über das Objekt SeriesCollection verwalten, einzelne Datenpunkte über das Points Objekt ansteuern. Externe Datenquellen und Präsentation| - 38 - 6.6.4 Eingebettete Diagramme gestalten Eingebettete Diagramme weisen dieselben Eigenschaften wie Diagrammblätter auf und können somit auf die gleiche Weise gestaltet und manipuliert werden. Zusätzlich lassen sich beim Zugriff auf das entsprechende ChartObjekt noch Größe(Width, Height) und Abstand zum Rand (Left, Top) modifizieren. Aus den aufgeführten Gründen wird hier auf ein weiteres Programmbeispiel verzichtet. 6.6.5 Diagrammblätter und eingebettete Diagramme verwalten VBA bietet dem Entwickler die Möglichkeit, Diagrammblätter mittels einer Copy()-Funktion an die gewünschte Position in der Arbeitsmappe zu kopieren. Falls kein Parameter angegeben wird, landet das Diagramm einfach in einer frisch angelegten Arbeitsmappe. Eingebettete Diagramme unterstützen ebenfalls diese Methode, wobei das Einfügen von eingebetteten Diagrammen manuell durch Aufruf der Paste()-Methode vorgenommen wird. Beide Diagrammtypen lassen sich durch den Aufruf der Delete()-Funktion einfach löschen. Sofern gewünscht, lässt sich das Diagramm als Bilddatei unter Zuhilfenahme der Export()-Methode als Bilddatei an den angegebenen Zielort exportieren. Externe Datenquellen und Präsentation| - 39 - Einführung in Visual Basic for Applications 7 Weitergehende Informationen zur Verwendung von VBA Der abschließende Passus beinhaltet weitergehende Informationen für alle Programmierer und Anwender, welche mit VBA erstmals oder auch professionell in Kontakt kommen. Die Informationen stellen u.a. auch Nachteile von VBA heraus und sollten Entwickler wissen. Sie sollen aber keineswegs davon abhalten sich mit VBA zu beschäftigen – die Sprache hat sich auf unabsehbare Zeit als Skriptsprache für Office Anwendungen etabliert. 7.1 Ähnliche Konzepte und Alternativen Das Konzept, wiederkehrende Abläufe zu automatisieren oder benutzerabhängige Aktionen mit Hilfe von Makros zu unterstützen, kommt auch in anderen Anwendungen zum Einsatz: Bekanntermaßen unterstützt OpenOffice nicht nur VBA, sondern auch JavaScript. Als Alternative zur Implementierung von VBA Makros bietet Microsoft die Möglichkeit an, in Visual Studio.Net mit den „VS Tools for Office System“ Add-Ins für Office zu entwickeln, welche die gleichen Aufgaben übernehmen können wie klassische VBA Makros. Bis zur Version 6.0 der Programmiersprache Visual Basic ist es problemlos möglich, Module und Formulare zwischen VBA und VB auszutauschen – dies ist durch die Umstellung von VB auf das .NET Framework deutlich erschwert worden. Einzelne VBA Module können zwar durch gezielte Umbenennung und Anpassung an die .NET Strukturen überführt werden, ganz anders aber bei den Formularen, welche seit der Umstellung neu erstellt werden müssen. Microsoft bietet auf ihrer Webseite Hilfestellung bei der Migration von VBA Code zu VB.NET an, falls man nach dem Einsatz von VBA Makros auf die VSTools umsteigen und alten Code portieren möchte. 7.2 Der Makro Rekorder Der Sprachkern von VBA ist vom logischen Aufbau her nicht schwer zu verstehen und somit auch für Programmieranfänger potentiell geeignet. Bei der professionellen Anwendung von VBA besteht aufgrund der modularen Programmierung allerdings die Gefahr, der Programmlogik nicht mehr richtig folgen zu können (Spaghetticode durch zu viele GoTo´s oder viel zu klein gehaltene und verschachtelte Prozeduren). Für Einsteiger sollte daher der Makro Rekorder in Office Programmen nicht unerwähnt bleiben: Dieser zeichnet diverse Anweisungen, z.B. die Auswahl einer speziellen Zelle in Excel, auf und übersetzt sie automatisch in VBA-Code, solange er aktiviert ist. Der Makro Rekorder ist unter dem Reiter o Entwicklertools Makro aufzeichnen zu finden. Er bietet somit Anfängern die Möglichkeit, erste Makros zu implementieren und weiterzuentwickeln. Der Makro Rekorder ist nicht nur für Einsteiger interessant, da er professionellen Entwicklern ebenfalls viel Zeit bei der Implementierung ersparen kann. Somit können sie sich auf die schweren bzw. zeitintensiven Aufgaben konzentrieren und folglich auch dem Kunden recht zeitnah ein Ergebnis präsentieren. Weitergehende Informationen zur Verwendung von VBA| - 40 - 7.3 Das Sicherheitskonzept von Microsoft VBA ist ein Visual Basic Dialekt und erbt somit auch wesentliche Funktionen von Visual Basic (siehe Kapitel 1, Allgemeine Informationen und Kapitel 2, Sprachkern). Folglich können VBA Anwendungen wie andere Windows Anwendungen auch Schadcode enthalten: Es entstehen sog. Makroviren. Um eine Infizierung zu vermeiden, bietet Microsoft die Makrozertifizierung an. In neueren MS Office Versionen sind Makros standardmäßig deaktiviert, sodass man diese erst manuell vor der Ausführung aktivieren muss. Zusätzlich empfehlen Office Programme automatisch, nur vertrauenswürdige oder mit überprüfbaren Zertifikaten ausgestattete Makros zuzulassen. Ebenso ist es möglich Makros in sog. vertrauenswürdigen Ordnern zu speichern. Zusätzliche Sicherheit schaffen heutzutage auch gute Anti-Viren Programme. Aber ein fehlendes A-Priori Sicherheitskonzept, z.B. der Einsatz einer Sandbox, führt dazu, dass man als Endanwender immer noch viel selbst zur Sicherheit beitragen muss. Gerade im Internet sollte man aufpassen, denn schädigende Webseiten und Emails bieten zum Download gerne Worddateien an, die durch ein verstecktes Makro kompromittiert wurden oder die Datei wird beim Aufruf der Seite im Hintergrund gleich automatisch heruntergeladen. 8 Schlusswort Wie bereits mehrfach angeschnitten, ließen sich sicherlich einige Ausführungen vertiefen. Dies würde allerdings den Rahmen des Skripts sprengen. Über spezielle Themen wie z.B. die intuitive Gestaltung einer Benutzeroberfläche oder eine detaillierte Einführung in die Fähigkeiten von Excel lassen sich sogar ganze Bücher finden. Auch Tutorials und Bücher, welche den Einstieg in VBA und somit auch in die Office Programmierung unterstützen, entdeckt man im Netz häufig. Foren, die sich um Problemlösungen bezüglich VBA bzw. Office Programmierung bemühen, runden das Angebot ab. Abschließend lässt sich noch sagen, dass Entwickler Erfahrungen mit einer Programmiersprache auf Dauer weniger durch Theorie als durch die praktische Anwendung sammeln. Die Ausarbeitung soll letztendlich praxisbegleitend sein. Die im Anhang aufgelisteten Codebeispiele sollen u.a. auch als Anregung dienen, VBA praktisch auszuprobieren! Schlusswort| - 41 - Einführung in Visual Basic for Applications 9 Abbildungsverzeichnis Die hier aufgeführten Informationen und Codeausschnitte zu diversen Anwendungsfällen wurden größtenteils dem Buch „Thomas Theis: Einstieg in VBA mit Excel“ entnommen oder angelehnt und dem Skriptverlauf entsprechend zusammengestellt. Die Kommentare in den Code Beispielen dienen zur Erläuterung der verwendeten Anweisungen. Falls die Kommentare nicht ausreichen bzw. weitere Informationen zum Programmablauf notwendig sind, erfolgen diese im Anschluss an das Beispiel. Zu guter Letzt noch eine Anmerkung für diejenigen Leser, welche die Abbildungen 9.1 bis 9.4 nachschlagen ohne das Kapitel 2.7 „Unterprogrammtechnik“ vorher gelesen zu haben: Die Schlüsselphrase „Sub...End Sub“ markiert den Anfang bzw. das Ende einer sog. „Prozedur“. Prozeduren beinhalten eine Gruppe von Anweisungen, welche durch den Aufruf dieser nacheinander ausgeführt werden können. 9.1 Deklaration von Variablen und Konstanten Abbildungsverzeichnis| - 42 - Einführung in Visual Basic for Applications 9.2 Einsatz von Arrays Der Aufruf der Prozedur Felder() erzeugt nacheinander folgende Ausgaben in Form einer MessageBox: Abbildungsverzeichnis| - 43 - 9.3 Vorstellung des Collection Objekts Der Aufruf der Prozedur CollectionObject() erzeugt folgende Ausgabe in Form einer MessageBox: 9.4 Benutzerdefinierte Datentypen deklarieren und ansprechen Abbildungsverzeichnis | - 44 - 9.5 Einsatz von Prozeduren und Übergabeparametern Dieses Beispiel soll die Deklaration und den Aufruf von Prozeduren und die verschiedenen Möglichkeiten der Argumentübergabe nahelegen. Desweiteren soll der Programmcode den Unterschied zwischen Call-By-Value und Call-By-Reference aufzeigen. Abbildungsverzeichnis | - 45 - 9.6 Funktionen und ihre Rückgabeparameter Abbildungsverzeichnis | - 46 - 9.7 Klassen und Objekte Abbildungsverzeichnis | - 47 - 9.8 Die Excel Oberfläche Abbildung 9.8 zeigt die grundlegende Excel Oberfläche. Bedeutsame Komponenten, deren Einsatzzweck man kennen sollte, sind entsprechend markiert. Abbildungsverzeichnis | - 48 - 9.9 Der VBA Editor Abbildung 9.9 zeigt die grundlegende Oberfläche des VBA Editors. Auch hier sind die grundlegenden Komponenten rot hervorgehoben bzw. beschriftet. Um die Klassifikation der Modularten im Projektexplorer zu visualisieren, wurden die einzelnen Modultypen grün eingerahmt. Abbildungsverzeichnis | - 49 - 9.10 Anwendungsbeispiel für I/O Operationen Der erste Teil des Quellcodes (bis „Close 1“) liest den Inhalt der unten links aufgeführten Textdatei ein und schreibt ihren Inhalt zeilenweise in die erste Spalte der Excel Tabelle. Das Ergebnis ist in der Abbildung rechts unten zu sehen. Im zweiten Teil wird der Inhalt der Excel Tabelle ausgelesen und in eine zweite Textdatei namens „Test2.txt“ herausgeschrieben. Abbildungsverzeichnis | - 50 - 9.11 SQL Operationen und ihre Auswertung Durch das Skript wird eine Verbindung zur Beispieldatenbank „Nordwind 2007.accdb“ realisiert, die Microsoft zusammen mit Datenbankprogramm „Access“ ausliefert. Es handelt sich dabei um ein Warenwirtschaftsprogramm. Im Beispiel werden Kundeninformationen aus der Tabelle Kunden ausgelesen und in Excel gespeichert. Abbildungsverzeichnis | - 51 - Einführung in Visual Basic for Applications 10 Quellenverzeichnis Auf dieser Seite sind die wichtigsten Quellen noch einmal zusammengefasst: o Einstieg in VBA mit Excel, Thomas Theis, Galileo Computing, 2te und aktualisierte Auflage 2010 o ftp://ftp.fernuni-hagen.de/pub/pdf/urz-broschueren/broschueren/b012.pdf o Handbuch Programmiersprachen (Softwareentwicklung zum Lernen und Nachschlagen), Peter A. Henning und Holger Vogelsang, Hanser Verlag, 2007 o http://www.online-excel.de/excel/singsel_vba.php?f=50 o http://www.office-loesung.de/ o http://msdn.microsoft.com/de-de/isv/bb190538.aspx o http://de.wikipedia.org/wiki/Visual_Basic_for_Applications o http://de.wikipedia.org/wiki/Tabellenkalkulation o http://de.wikipedia.org/wiki/Microsoft_Excel o http://de.wikibooks.org/wiki/VBA_in_Excel_-_Grundlagen o http://www.vba-beispiele.de/office.php?act=excel&cat=vbaereignisse o http://www.activevb.de/tutorials/tut_vbatutorial/tut_vbatutorial.html Quellenverzeichnis | - 52 - Einführung in Visual Basic for Applications 11 Eidesstattliche Erklärung Eidesstattliche Erklärung | - 53 -