VBA - Der Visual Basic-Arbeitspartner

Eine der herausragendsten Eigenschaften von Visual Basic ist, dass es eine Komplett Entwicklungsumgebung. Was auch immer Sie tun möchten, es gibt eine Variante von Visual Basic, mit der Sie die Arbeit erledigen können! Sie können Visual Basic für die Desktop- und Mobil- und Remote-Entwicklung (VB.NET), die Skripterstellung (VBScript) und die Office-Entwicklung (VBA !) Wenn Sie VBA ausprobiert haben und mehr über die Verwendung erfahren möchten, Dies ist das Tutorial für Sie. (Dieser Kurs basiert auf der Version von VBA aus Microsoft Office 2010.)

Wenn Sie einen Kurs in Microsoft Visual Basic .NET suchen, haben Sie auch den richtigen Ort gefunden. Auschecken: Visual Basic .NET 2010 Express - Ein Tutorial von Grund auf

VBA als allgemeines Konzept wird in diesem Artikel behandelt. VBA bietet mehr als Sie vielleicht denken! Dort finden Sie auch Artikel über die Office VBA-Schwestern:

Grundsätzlich gibt es zwei Möglichkeiten, Programme zu entwickeln, die mit Office-Anwendungen arbeiten können: VBA und VSTO. Im Oktober 2003 führte Microsoft eine Erweiterung der professionellen Programmierumgebung Visual Studio .NET mit dem Namen Visual Studio Tools für Office - VSTO ein. Obwohl VSTO die erheblichen Vorteile von .NET in Office nutzt, ist VBA nach wie vor beliebter als VSTO. Für VSTO ist zusätzlich zur Office-Anwendung die Professional-Version oder eine höhere Version von Visual Studio erforderlich. Dies kostet Sie wahrscheinlich mehr als die von Ihnen verwendete Office-Anwendung. Da VBA jedoch in die Host-Office-Anwendung integriert ist, benötigen Sie nichts anderes.

VBA wird hauptsächlich von Office-Experten verwendet, die ihre Arbeit schneller und einfacher gestalten möchten. Sie sehen selten große Systeme, die in VBA geschrieben sind. VSTO hingegen wird von professionellen Programmierern in größeren Organisationen verwendet, um Add-Ins zu erstellen, die durchaus anspruchsvoll sein können. Es ist wahrscheinlicher, dass Anwendungen von Drittanbietern, z. B. eine Papierfirma für Word oder eine Buchhaltungsfirma für Excel, mit VSTO erstellt werden.

In ihrer Dokumentation stellt Microsoft fest, dass es im Grunde drei Gründe gibt, VBA zu verwenden:

-> Automatisierung und Wiederholung - Computer können das Gleiche immer wieder viel besser und schneller als Menschen.

-> Erweiterungen für die Benutzerinteraktion - Möchten Sie genau vorschlagen, wie jemand ein Dokument formatieren oder eine Datei speichern soll? VBA kann das. Möchten Sie bestätigen, was jemand eingibt? VBA kann das auch.

-> Interaktion zwischen Office 2010-Anwendungen - Ein späterer Artikel in dieser Reihe heißt "Word und Excel arbeiten zusammen". Aber wenn es das ist, was Sie brauchen, möchten Sie vielleicht darüber nachdenken Büroautomation, Das heißt, Sie schreiben das System mit VB.NET und verwenden dann nach Bedarf die Funktionen einer Office-Anwendung wie Word oder Excel.

Microsoft hat angekündigt, dass VBA weiterhin unterstützt wird, und es wird in der EU an prominenter Stelle vorgestellt Offiziell Microsoft Office 2010-Entwicklungs-Roadmap. So können Sie sicher sein, dass Ihre Investition in die VBA-Entwicklung in naher Zukunft nicht überholt sein wird.

Andererseits ist VBA das letzte verbleibende Microsoft-Produkt, das von der VB6-COM-Technologie abhängt. Es ist jetzt über zwanzig Jahre alt! In menschlichen Jahren wäre es dann älter als Lestat der Vampir. Vielleicht sehen Sie das als "bewährt, geprüft und wahr" oder als "uralt, abgenutzt und veraltet". Ich neige dazu, die Erstbeschreibung zu favorisieren, aber Sie sollten sich der Tatsachen bewusst sein.

Das erste, was zu verstehen ist, ist die Beziehung zwischen VBA und Office-Anwendungen wie Word und Excel. Die Office-Anwendung ist eine Wirt für VBA. Ein VBA-Programm kann niemals alleine ausgeführt werden. VBA wird in der Host - Umgebung entwickelt (unter Verwendung der Entwickler Registerkarte in der Office-Anwendungsleiste) und muss als Teil eines Word-Dokuments, einer Excel-Arbeitsmappe, einer Access-Datenbank oder eines anderen Office-Hosts ausgeführt werden.

Die Art und Weise, wie VBA tatsächlich verwendet wird, ist auch anders. In einer Anwendung wie Word wird VBA hauptsächlich verwendet, um auf die Objekte der Hostumgebung zuzugreifen, z. B. auf die Absätze in einem Dokument mit dem Word.Document.Paragraphs-Objekt von Word. Jede Hostumgebung steuert eindeutige Objekte bei, die in den anderen Hostumgebungen nicht verfügbar sind. (Beispielsweise gibt es in einem Word-Dokument keine "Arbeitsmappe". Eine Arbeitsmappe gibt es nur in Excel.) Der Visual Basic-Code dient hauptsächlich dazu, die Verwendung von Objekten zu ermöglichen, die für jede Office-Hostanwendung angepasst wurden.

Die Fusion zwischen VBA- und hostspezifischem Code ist in diesem Codebeispiel (aus der Microsoft Northwind-Beispieldatenbank) zu sehen, in dem nur VBA-Code in Rot und Access-spezifischer Code in Blau angezeigt wird. Der rote Code ist in Excel oder Word identisch, der blaue Code ist jedoch für diese Access-Anwendung eindeutig.

VBA selbst ist fast so wie seit Jahren. Die Integration in die Host Office-Anwendung und das Hilfesystem wurde weiter verbessert.

In der 2010-Version von Office wird die Registerkarte "Entwickler" standardmäßig nicht angezeigt. Die Registerkarte Entwickler führt Sie zu dem Teil der Anwendung, in dem Sie VBA-Programme erstellen können. Sie müssen diese Option also zunächst ändern. Gehen Sie einfach zur Registerkarte Datei, Optionen, Multifunktionsleiste anpassen und klicken Sie in den Hauptregistern auf das Feld Entwickler.

Das Hilfesystem funktioniert viel reibungsloser als in früheren Versionen. Sie können Hilfe für Ihre VBA-Fragen entweder offline, von einem mit Ihrer Office-Anwendung installierten System oder online von Microsoft über das Internet erhalten. Die beiden Oberflächen sehen sich sehr ähnlich:

--------
Klicken Sie hier, um die Abbildung anzuzeigen
--------

Wenn Ihre Internetverbindung schnell ist, erhalten Sie in der Online-Hilfe mehr und bessere Informationen. Aber die lokal installierte Version wird wahrscheinlich schneller sein und ist in den meisten Fällen genauso gut. Möglicherweise möchten Sie die lokale Hilfe als Standard festlegen und dann die Online-Hilfe verwenden, wenn Sie in der lokalen Version nicht die gewünschten Informationen erhalten. Am schnellsten können Sie online gehen, indem Sie einfach "Alle Wörter" (oder "Alle Excel" oder eine andere App) aus der Dropdown-Liste "Suchen" in der Hilfe auswählen. Dies wird sofort online gehen und die gleiche Suche durchführen, aber Ihre Standardauswahl wird nicht zurückgesetzt.

--------
Klicken Sie hier, um die Abbildung anzuzeigen
--------

Auf der nächsten Seite erfahren Sie, wie Sie ein VBA-Programm erstellen.

Wenn VBA von einer Anwendung wie Word oder Excel "gehostet" wird, "lebt" das Programm in der vom Host verwendeten Dokumentdatei. Beispielsweise können Sie in Word Ihr 'Word - Makro' speichern (es ist nicht ein 'Makro', aber wir werden uns im Moment weder in einem Word-Dokument noch in einer Word-Vorlage über die Terminologie streiten.

Angenommen, dieses VBA-Programm wird in Word erstellt (dieses einfache Programm ändert lediglich die Schriftart für eine ausgewählte Zeile in Fettdruck) und in einem Word-Dokument gespeichert:

 Sub AboutMacro () "AboutMacro-Makro 'Makro aufgezeichnet am 9.9.9999 von Dan Mabbutt' = wdStory End Sub 

In früheren Versionen von Office konnte der VBA-Code, der als Teil der Dokumentdatei im gespeicherten Word-Dokument gespeichert war, deutlich angezeigt werden, indem er im Editor angezeigt wurde, in dem alle Elemente des Word-Dokuments angezeigt wurden. Diese Abbildung wurde mit einer früheren Version von Word erstellt, da Microsoft das Dokumentformat in der aktuellen Version geändert hat und der VBA-Programmcode nicht mehr als einfacher Text angezeigt wird. Aber der Auftraggeber ist der gleiche. Wenn Sie eine Excel-Tabelle mit einem "Excel-Makro" erstellen, wird diese ebenfalls als Teil einer XLSM-Datei gespeichert.

--------
Klicken Sie hier, um die Abbildung anzuzeigen
--------

VBA und Sicherheit

Einer der effektivsten Computerviren-Tricks in der Vergangenheit war das Einfügen von schädlichem VBA-Code in ein Office-Dokument. In früheren Versionen von Office konnte der Virus beim Öffnen eines Dokuments automatisch ausgeführt werden und auf Ihrem Computer Chaos verursachen. Diese offene Sicherheitslücke in Office begann sich auf den Office-Vertrieb auszuwirken, was die Aufmerksamkeit von Microsoft auf sich zog. Mit der aktuellen Office-Generation 2010 hat Microsoft die Lücke gründlich geschlossen. Zusätzlich zu den hier erwähnten Verbesserungen hat Microsoft die Office-Sicherheit auf eine Weise verbessert, die Sie möglicherweise nicht einmal bis auf die Hardwareebene bemerken. Wenn Sie zögern, VBA zu verwenden, weil Sie gehört haben, dass es nicht sicher ist, können Sie sicher sein, dass Microsoft sich die Mühe gemacht hat, dies jetzt zu ändern.

Die wichtigste Änderung bestand darin, einen speziellen Dokumenttyp nur für Office-Dokumente zu erstellen, die VBA-Programme enthalten. In Word kann MyWordDoc.docx beispielsweise kein VBA-Programm enthalten, da Word keine Programme in einer Datei zulässt, die mit der Dateierweiterung "docx" gespeichert ist. Die Datei muss als "MyWordDoc.docm" gespeichert werden, damit die VBA-Programmierung als Teil der Datei zulässig ist. In Excel lautet die Dateierweiterung ".xlsm"..

Um diesem erweiterten Dokumenttyp gerecht zu werden, hat Microsoft in Office ein neues Sicherheitssubsystem namens Trust Center erstellt. Im Wesentlichen können Sie anpassen, wie Ihre Office-Anwendung Dokumente mit VBA-Code detailliert behandelt. Sie öffnen das Vertrauensstellungscenter über die Registerkarte "Entwickler" in Ihrer Office-Anwendung, indem Sie im Abschnitt "Code" der Multifunktionsleiste auf "Makrosicherheit" klicken.

--------
Klicken Sie hier, um die Abbildung anzuzeigen
--------

Einige der Optionen wurden entwickelt, um Ihre Office-Anwendungen "abzusichern", damit schädlicher Code nicht ausgeführt wird, und andere, um Entwicklern und Benutzern die Verwendung von VBA zu erleichtern, ohne dass die Sicherheit unnötig verlangsamt wird. Wie Sie sehen, können Sie die Sicherheit auf vielfältige Weise anpassen, und all dies geht weit über den Rahmen dieses Artikels hinaus. Glücklicherweise bietet die Microsoft-Website eine umfangreiche Dokumentation zu diesem Thema. Glücklicherweise sind die Standardsicherheitseinstellungen für die meisten Anforderungen geeignet.

Da VBA an die Host-Office-Anwendung gebunden ist, müssen Sie es dort ausführen. Dieses Thema wird ab der nächsten Seite behandelt.

Wie führe ich eine VBA-Anwendung aus?

Das ist eigentlich eine sehr gute Frage, da dies die erste ist, die Benutzer Ihrer Anwendung stellen. Grundsätzlich gibt es zwei Möglichkeiten:

-> Wenn Sie zum Starten des Programms kein Steuerelement wie eine Schaltfläche verwenden möchten, müssen Sie den Befehl Makros in der Multifunktionsleiste (Registerkarte Entwickler, Gruppe Code) verwenden. Wählen Sie das VBA-Programm und klicken Sie auf Ausführen. Dies scheint einigen Ihrer Benutzer jedoch etwas zu viel zu sein. Beispielsweise möchten Sie möglicherweise nicht, dass die Registerkarte Entwickler auch nur für sie verfügbar ist. In diesem Fall…

-> Sie müssen etwas hinzufügen, auf das der Benutzer klicken oder das er eingeben kann, um die Anwendung zu starten. In diesem Artikel befassen wir uns mit dem Button-Steuerelement. Es kann sich aber auch um das Klicken auf eine Verknüpfung, ein Symbol in einer Symbolleiste oder das Eingeben von Daten handeln. Diese nennt man Veranstaltungen und was wir in diesem und späteren Artikeln schreiben werden, ist Ereigniscode - Programmcode, der automatisch ausgeführt wird, wenn ein bestimmtes Ereignis - beispielsweise das Klicken auf ein Button-Steuerelement - eintritt.

UserForms, Formularsteuerelemente und ActiveX-Steuerelemente

Wenn Sie nicht nur ein Makro auswählen, können Sie ein VBA-Programm am häufigsten ausführen, indem Sie auf eine Schaltfläche klicken. Dieser Knopf kann entweder ein Formularsteuerung oder ein ActiveX-Steuerelement. Bis zu einem gewissen Grad hängen Ihre Entscheidungen von der von Ihnen verwendeten Office-Anwendung ab. Excel bietet beispielsweise eine etwas andere Auswahl als Word. Diese grundlegenden Steuerungsarten sind jedoch dieselben.

Sehen wir uns an, was Sie mit Excel 2010 tun können, da es die größte Flexibilität bietet. Wenn Sie auf verschiedene Schaltflächen klicken, wird eine einfache Textnachricht in eine Zelle eingefügt, um die Unterschiede zu verdeutlichen.

Erstellen Sie zunächst eine neue Excel-Arbeitsmappe und wählen Sie die Registerkarte Entwickler. (Wenn Sie eine andere Office-Anwendung haben, sollte eine Variation dieser Anweisungen funktionieren.)

Klicken Sie auf das Symbol Einfügen. Wir werden zuerst mit der Schaltfläche Formularsteuerung arbeiten.

Formularsteuerelemente sind die ältere Technologie. In Excel wurden sie zum ersten Mal in Version 5.0 im Jahr 1993 eingeführt. Als nächstes werden wir mit VBA-Benutzerformularen arbeiten, aber Formularsteuerelemente können nicht mit ihnen verwendet werden. Sie sind auch nicht mit dem Web kompatibel. Formularsteuerelemente werden direkt auf der Arbeitsblattoberfläche platziert. Auf der anderen Seite können einige ActiveX-Steuerelemente - die wir als Nächstes betrachten - nicht direkt in Arbeitsblättern verwendet werden.

Formularsteuerelemente werden mit einer "Klick- und Zeichentechnik" verwendet. Klicken Sie auf das Button-Formularsteuerelement. Der Mauszeiger ändert sich in ein Pluszeichen. Zeichnen Sie das Steuerelement, indem Sie es über die Oberfläche ziehen. Wenn Sie die Maustaste loslassen, wird ein Dialogfeld angezeigt, in dem Sie aufgefordert werden, einen Makrobefehl einzugeben, um eine Verbindung mit der Schaltfläche herzustellen.

--------
Klicken Sie hier, um die Abbildung anzuzeigen
--------

Insbesondere wenn Sie zum ersten Mal ein Steuerelement erstellen, wartet kein VBA-Makro darauf, mit der Schaltfläche verbunden zu werden. Klicken Sie daher auf Neu, und der VBA-Editor wird mit dem vorgeschlagenen Namen geöffnet, der bereits in der Shell eines Ereignisses eingetragen ist Subroutine.

--------
Klicken Sie hier, um die Abbildung anzuzeigen
--------

Um diese sehr einfache Anwendung zu vervollständigen, geben Sie einfach diese VBA-Code-Anweisung in das Feld Sub ein:

 Cells (2, 2) .Value = "Auf Formularschaltfläche geklickt" 

Eine ActiveX-Schaltfläche ist fast identisch. Ein Unterschied besteht darin, dass VBA diesen Code nicht in einem separaten Modul, sondern im Arbeitsblatt platziert. Hier ist der vollständige Ereigniscode.

 Private Sub CommandButton1_Click () Cells (4, 2) .Value = "ActiveX-Schaltfläche angeklickt" End Sub 

Sie können diese Steuerelemente nicht nur direkt im Arbeitsblatt platzieren, sondern auch hinzufügen UserForm zum Projekt und platzieren Sie stattdessen Steuerelemente darauf. UserForms - etwa das Gleiche wie Windows Forms - bieten viele Vorteile, da Sie Ihre Steuerelemente eher wie eine normale Visual Basic-Anwendung verwalten können. Fügen Sie dem Projekt in dem Visual Basic-Editor ein UserForm hinzu. Verwenden Sie das Menü Ansicht oder klicken Sie mit der rechten Maustaste in den Projektexplorer.

--------
Klicken Sie hier, um die Abbildung anzuzeigen
--------

Die Standardeinstellung für ein UserForm lautet nicht Zeigen Sie das Formular an. Führen Sie die Show-Methode des Formulars aus, um es sichtbar zu machen (und die Steuerelemente für den Benutzer verfügbar zu machen). Ich habe dafür eine weitere Formularschaltfläche hinzugefügt.

 Sub Button2_Click () UserForm1.Show End Sub 

Sie werden feststellen, dass das UserForm ist modal standardmäßig. Das heißt, wenn das Formular aktiv ist, ist alles andere in der Anwendung inaktiv. (Das Klicken auf die anderen Schaltflächen hat beispielsweise keine Auswirkung.) Sie können dies ändern, indem Sie die ShowModal-Eigenschaft der UserForm in False ändern. Aber das bringt uns tiefer in die Programmierung. In den nächsten Artikeln dieser Reihe erfahren Sie mehr darüber.

Der Code für die UserForm wird in das UserForm-Objekt eingefügt. Wenn Sie für alle Objekte im Projektexplorer die Option Code anzeigen auswählen, werden drei separate Click-Ereignis-Unterroutinen in drei verschiedenen Objekten angezeigt. Sie sind jedoch alle für dieselbe Arbeitsmappe verfügbar.

--------
Klicken Sie hier, um die Abbildung anzuzeigen
--------

Neben dem Erzwingen eines Ereignisses durch Klicken auf eine Schaltfläche wird VBA auch zum Reagieren auf Ereignisse in den Objekten in der Hostanwendung verwendet. Beispielsweise können Sie erkennen, wann sich eine Tabelle in Excel ändert. Sie können auch feststellen, wann eine Zeile zu einer Datenbank in Access hinzugefügt wurde, und ein Programm schreiben, das dieses Ereignis behandelt.

Zusätzlich zu den bekannten Befehlsschaltflächen, Textfeldern und anderen Komponenten, die in Programmen ständig angezeigt werden, können Sie Komponenten hinzufügen, die tatsächlich Teil Ihrer Excel-Tabelle sind im Ihr Word-Dokument. Oder umgekehrt. Dies geht weit über "Kopieren und Einfügen" hinaus. Beispielsweise können Sie eine Excel-Tabelle in einem Word-Dokument anzeigen.

Mit VBA können Sie die gesamte Leistung einer Office-Anwendung in einer anderen verwenden. Beispielsweise ist in Word eine relativ einfache Berechnungsfunktion integriert. Excel kann jedoch hervorragend berechnet werden. Angenommen, Sie möchten das natürliche Protokoll der Gamma-Funktion (eine relativ komplexe mathematische Berechnung) in Ihrem Word-Dokument verwenden? Mit VBA können Sie Werte an diese Funktion in Excel übergeben und die Antwort in Ihrem Word-Dokument zurückerhalten.

Und Sie können viel mehr als die Office-Anwendungen verwenden! Wenn Sie auf das Symbol "Weitere Steuerelemente" klicken, wird eine umfangreiche Liste der auf Ihrem Computer installierten Elemente angezeigt. Nicht alle dieser Funktionen sind sofort einsatzbereit, und Sie sollten die Dokumentation für jede dieser Funktionen zur Verfügung haben. Sie erhalten jedoch eine Vorstellung davon, wie umfassend die Unterstützung für VBA ist.

Von allen Funktionen in VBA gibt es eine, die eindeutig nützlicher ist als jede andere. Was es ist, erfahren Sie auf der nächsten Seite.

Ich habe das Beste zum Schluss aufgehoben! Hier ist eine Technik, die auf alle Office-Anwendungen angewendet wird. Sie werden feststellen, dass Sie es häufig verwenden, weshalb wir es hier in der Einführung behandeln.

Wenn Sie mit der Programmierung komplexerer VBA-Programme beginnen, besteht eines der ersten Probleme darin, Methoden und Eigenschaften von Office-Objekten zu ermitteln. Wenn Sie ein VB.NET-Programm schreiben, suchen Sie häufig nach Codebeispielen und Beispielen, um dieses Problem zu lösen. Wenn Sie jedoch die unterschiedlichen Hosting-Anwendungen und die Tatsache berücksichtigen, dass jede von ihnen Hunderte neuer Objekte enthält, können Sie normalerweise nichts finden, das genau Ihren Anforderungen entspricht.

Die Antwort ist das "Record Macro ..."

Die Grundidee ist, "Makro aufzeichnen" zu aktivieren, die Schritte eines Prozesses zu durchlaufen, der dem entspricht, den Ihr Programm ausführen soll, und dann das resultierende VBA-Programm auf Code und Ideen zu überprüfen.

Viele Menschen machen den Fehler zu denken, dass Sie in der Lage sein müssen, genau das Programm aufzunehmen, das Sie benötigen. Aber es ist überhaupt nicht nötig, so genau zu sein. In der Regel reicht es aus, ein VBA-Programm aufzuzeichnen, das genau Ihren Vorstellungen entspricht, und dann die Code-Änderungen hinzuzufügen, damit es die Aufgabe präzise erledigt. Es ist so einfach und nützlich, dass ich manchmal ein Dutzend Programme mit geringfügigen Unterschieden aufzeichne, um zu sehen, was die Codeunterschiede im Ergebnis sind. Denken Sie daran, alle Experimente zu löschen, wenn Sie fertig sind!

Als Beispiel habe ich im Word Visual Basic-Editor auf Makro aufzeichnen geklickt und mehrere Textzeilen eingegeben. Hier ist das Ergebnis. (Zeilenfortsetzungen wurden hinzugefügt, um sie zu verkürzen.)

 Sub Macro1 () "Macro1 Macro" Selection.TypeText Text: = _ "Dies sind die Zeiten, in denen" Selection.TypeText Text: = _ "die Seelen der Männer ausprobiert. Der" Selection.TypeText Text: = _ "Sommersoldat" Selection.TypeText Text: = _ "und der Sonnenschein-Patriot" Selection.TypeText Text: = _ "werden in diesen Zeiten vor" Selection.TypeText Text: = _ "dem Dienst ihres Landes zurückschrecken." Selection.MoveUp Unit: = wdLine, Count: = 1 Selection.HomeKey Unit: = wdLine Selection.MoveRight Unit: = wdCharacter, _ Count: = 5, Extend: = wdExtend Selection.Font.Bold = wdToggle End Sub 

Niemand lernt VBA nur für sich. Sie verwenden es immer zusammen mit einer bestimmten Office-Anwendung. Um weiter zu lernen, finden Sie hier Artikel, die die Verwendung von VBA in Word und Excel demonstrieren:

-> Erste Schritte mit VBA: Der Word-Arbeitspartner

-> Erste Schritte mit VBA: Der Excel-Arbeitspartner