Erste Schritte mit VBA in OfficeGetting started with VBA in Office

Müssen Sie 50 Tabellen in Word wiederholt bereinigen?Are you facing a repetitive clean up of fifty tables in Word? Möchten Sie, dass der Benutzer von einem bestimmten Dokument zu einer Eingabe aufgefordert wird, wenn das Dokument geöffnet wird?Do you want a particular document to prompt the user for input when it opens? Bereitet es Ihnen Schwierigkeiten, Ihre Kontakte auf effiziente Weise aus Microsoft Outlook in eine Microsoft Excel-Tabelle zu übertragen?Are you having difficulty figuring out how to get your contacts from Microsoft Outlook into a Microsoft Excel spreadsheet efficiently?

All diese Aufgaben und noch vieles mehr können Sie mit Visual Basic for Applications (VBA) für Office erledigen, einer einfachen und doch leistungsstarken Programmiersprache, mit der Sie Office-Anwendungen erweitern können.You can perform these tasks and accomplish a great deal more by using Visual Basic for Applications (VBA) for Office—a simple, but powerful programming language that you can use to extend Office applications.

Dieser Artikel richtet sich an erfahrene Office-Benutzer, die sich über VBA informieren und mehr darüber erfahren möchten, wie sie Office durch entsprechende Programmierung anpassen können.This article is for experienced Office users who want to learn about VBA and who want some insight into how programming can help them to customize Office.

Die Office-Anwendungssuite verfügt über einen umfassenden Satz an Features.The Office suite of applications has a rich set of features. Es gibt viele verschiedene Arten, Dokumente, E-Mail-Datenbanken, Formulare, Arbeitsblätter und Präsentationen zu erstellen, zu formatieren und zu bearbeiten.There are many different ways to author, format, and manipulate documents, email, databases, forms, spreadsheets, and presentations. Die Stärke der VBA-Programmierung in Office liegt darin, dass Sie fast jeden Vorgang, der sich mit einer Maus, einer Tastatur oder über ein Dialogfeld ausführen lässt, auch mithilfe von VBA ausführen können.The great power of VBA programming in Office is that nearly every operation that you can perform with a mouse, keyboard, or a dialog box can also be done by using VBA. Sobald dies einmal mit VBA erfolgt ist, kann es genauso mehrere hundert Mal erfolgen.Further, if it can be done once with VBA, it can be done just as easily a hundred times. (Tatsächlich ist die Automatisierung von wiederkehrenden Aufgaben eines der Haupteinsatzgebiete von VBA in Office.)(In fact, the automation of repetitive tasks is one of the most common uses of VBA in Office.)

Neben der Möglichkeit, tägliche Aufgaben mit VBA-Skripten zu beschleunigen, können Sie VBA verwenden, um neue Funktionen zu Office-Anwendungen hinzuzufügen oder für die Aufforderung und Interaktion mit dem Benutzer Ihrer Dokumente in der Art, die auf Ihre geschäftlichen Anforderungen speziell abgestimmt ist.Beyond the power of scripting VBA to accelerate every-day tasks, you can use VBA to add new functionality to Office applications or to prompt and interact with the user of your documents in ways that are specific to your business needs. Beispielsweise könnten Sie VBA-Code schreiben, mit dem eine Popup-Nachricht angezeigt wird, die die Benutzer zum Speichern eines Dokuments auf einem bestimmten Netzwerklaufwerk auffordert, sobald sie versuchen, es zum ersten Mal zu speichern.For example, you could write some VBA code that displays a pop up message that reminds users to save a document to a particular network drive the first time they try to save it.

In diesem Artikel werden einige der wichtigsten Gründe für den Einsatz der VBA-Programmierung beleuchtet.This article explores some of the primary reasons to leverage the power of VBA programming. Außerdem werden die Programmiersprache VBA und die sofort einsatzbereiten Tools vorgestellt, mit denen Sie Ihre Lösungen bearbeiten können.It explores the VBA language and the out-of-the-box tools that you can use to work with your solutions. Und schließlich enthält der Artikel einige Tipps und Tricks, um häufige Schwierigkeiten und Fehler bei der Programmierung zu vermeiden.Finally, it includes some tips and ways to avoid some common programming frustrations and missteps.

Einsatzmöglichkeiten und Gründe für VBAWhen to use VBA and why

Es gibt mehrere wichtige Gründe, die VBA-Programmierung in Office einzusetzen.There are several principal reasons to consider VBA programming in Office.

Automatisierung und WiederholungAutomation and repetition

VBA ist äußerst wirkungsvoll und effizient, wenn es darum geht, wiederholt Formatierungs- oder Korrekturprobleme zu lösen.VBA is effective and efficient when it comes to repetitive solutions to formatting or correction problems. Einige Beispiele: Haben Sie schon einmal das Absatzformat ganz oben auf jeder Seite in Word geändert?For example, have you ever changed the style of the paragraph at the top of each page in Word? Oder mussten Sie mehrere Tabellen umformatieren, die aus Excel in ein Word-Dokument oder eine E-Mail in Outlook eingefügt worden waren?Have you ever had to reformat multiple tables that were pasted from Excel into a Word document or an Outlook email? Mussten Sie jemals die gleiche Änderung in mehreren Outlook-Kontakten vornehmen?Have you ever had to make the same change in multiple Outlook contacts?

Wenn Sie eine Änderung häufiger als zehn- oder zwanzigmal vornehmen müssen, lohnt sich unter Umständen die Automatisierung mit VBA.If you have a change that you have to make more than ten or twenty times, it may be worth automating it with VBA. Muss die Änderung sogar mehrere hundert Mal durchgeführt werden, ist die Automatisierung mit Sicherheit den Aufwand wert.If it is a change that you have to do hundreds of times, it certainly is worth considering. Nahezu jede Formatierung oder Bearbeitung, die manuell möglich ist, kann auch mit VBA vorgenommen werden.Almost any formatting or editing change that you can do by hand, can be done in VBA.

Erweiterungen der BenutzerinteraktionExtensions to user interaction

Manchmal möchten Sie die Benutzer zu einer bestimmten Art der Interaktion mit der Office-Anwendung oder dem Office-Dokument bewegen, die nicht Teil der Standardanwendung ist.There are times when you want to encourage or compel users to interact with the Office application or document in a particular way that is not part of the standard application. Beispielsweise könnten Sie Benutzer beim Öffnen, Speichern oder Drucken eines Dokuments zu einer bestimmten Aktion auffordern.For example, you might want to prompt users to take some particular action when they open, save, or print a document.

Interaktion zwischen Office-AnwendungenInteraction between Office applications

Müssen Sie sämtliche Kontakte aus Outlook in Word kopieren und auf eine bestimmte Weise formatieren?Do you need to copy all of your contacts from Outlook to Word and then format them in some particular way? Oder müssen Sie Daten aus Excel auf mehrere PowerPoint-Folien verschieben?Or, do you need to move data from Excel to a set of PowerPoint slides? Für manche Aufgaben reicht einfaches Kopieren und Einfügen nicht aus oder dauert zu lang.Sometimes simple copy and paste does not do what you want it to do, or it is too slow. VBA-Programmierung ermöglicht die detaillierte Interaktion mit zwei oder mehr Office-Anwendungen gleichzeitig und das anschließende Ändern des Inhalts in einer Anwendung basierend auf dem Inhalt in einer anderen Anwendung.You can use VBA programming to interact with the details of two or more Office applications at the same time and then modify the content in one application based on the content in another.

Andere MöglichkeitenDoing things another way

VBA-Programmierung ist eine leistungsstarke Methode, aber nicht immer der optimale Ansatz.VBA programming is a powerful solution, but it is not always the optimal approach. In manchen Fällen ist es sinnvoller, andere Methoden einzusetzen, um ans Ziel zu kommen.Sometimes it makes sense to use other ways to achieve your aims.

Die entscheidende Frage ist, ob es eine einfachere Möglichkeit gibt.The critical question to ask is whether there is an easier way. Bevor Sie ein VBA-Projekt beginnen, prüfen Sie, ob Sie das Problem mit den integrierten Tools und Standardfunktionen lösen können.Before you begin a VBA project, consider the built-in tools and standard functionalities. Wenn Sie beispielsweise einen zeitaufwändigen Bearbeitungs- oder Layoutvorgang haben, könnten Sie das Problem mithilfe von Formaten oder Zugriffstasten lösen.For example, if you have a time-consuming editing or layout task, consider using styles or accelerator keys to solve the problem. Können Sie die Aufgabe einmal ausführen und dann mit STRG+Y (Wiederholen) wiederholen?Can you perform the task once and then use CTRL+Y (Redo) to repeat it? Können Sie ein neues Dokument mit dem richtigen Format oder der richtigen Vorlage erstellen und anschließend den Inhalt in das neue Dokument kopieren?Can you create a new document with the correct format or template, and then copy the content into that new document?

Office-Anwendungen sind äußerst leistungsstark. Vielleicht ist bereits die richtige Lösung für Sie vorhanden.Office applications are powerful; the solution that you need may already be there. Nehmen Sie sich etwas Zeit, und machen Sie sich eingehender mit den Funktionen von Office vertraut, bevor Sie sich an die Programmierung machen.Take some time to learn more about Office before you jump into programming.

Bevor Sie ein VBA-Projekt beginnen, sollten Sie die Gewissheit haben, dass Sie genügend Zeit zum Arbeiten mit VBA haben.Before you begin a VBA project, ensure that you have the time to work with VBA. Programmieren erfordert Konzentration und kann unvorhersehbar sein.Programming requires focus and can be unpredictable. Besonders als Anfänger sollten Sie sich nur dann für das Programmieren entscheiden, wenn Sie Zeit haben, um sorgfältig arbeiten zu können.Especially as a beginner, never turn to programming unless you have time to work carefully. Wenn Sie versuchen, "schnell einmal" ein Skript zu schreiben, um unter Termindruck ein Problem zu lösen, kann dies zu Stress führen.Trying to write a "quick script" to solve a problem when a deadline looms can result in a very stressful situation. Wenn Sie in Eile sind, nutzen Sie am besten herkömmliche Methoden, auch wenn sie Ihnen monoton vorkommen und eine Aneinanderreihung sich ständig wiederholender Schritte bedeuten.If you are in a rush, you might want to use conventional methods, even if they are monotonous and repetitive.

VBA-101-ProgrammierungVBA Programming 101

Verwenden von Code, damit Anwendungen bestimmte Vorgänge ausführenUsing code to make applications do things

Sie denken vielleicht, dass das Schreiben von Code rätselhaft oder schwierig ist, die Grundprinzipien basieren aber auf normalem logischen Denken und sind leicht verständlich.You might think that writing code is mysterious or difficult, but the basic principles use every-day reasoning and are quite accessible. Microsoft Office-Programme werden derart entwickelt, dass sie so genannte Objekte verfügbar machen, die Anweisungen erhalten können, so wie ein Telefon, das über Tasten verfügt, über die Sie mit dem Telefon interagieren können.Microsoft Office applications are created in such a way that they expose things called objects that can receive instructions, in much the same way that a phone is designed with buttons that you use to interact with the phone. Wenn Sie eine Taste drücken, erkennt das Telefon die Anweisung und schließt die entsprechende Nummer in der Reihenfolge ein, in der Sie wählen.When you press a button, the phone recognizes the instruction and includes the corresponding number in the sequence that you are dialing. Bei der Programmierung interagieren Sie mit der Anwendung, indem Sie Anweisungen an verschiedene Objekte in der Anwendung senden.In programming, you interact with the application by sending instructions to various objects in the application. Diese Objekte sind umfangreich, weisen aber Grenzen auf.These objects are expansive, but they have their limits. Die Objekte können nur Vorgänge ausführen, für die sie entwickelt wurden, und sie führen nur Vorgänge aus, die Sie den Objekten anweisen.They can only do what they are designed to do, and they will only do what you instruct them to do.

Ein Beispiel: Der Benutzer öffnet ein Dokument in Word, nimmt einige Änderungen vor, speichert das Dokument und schließt es.For example, consider the user who opens a document in Word, makes a few changes, saves the document, and then closes it. Auf die VBA-Programmierung übertragen bedeutet dies, Word macht ein Document-Objekt verfügbar.In the world of VBA programming, Word exposes a Document object. Mithilfe von VBA-Code können Sie dem Document-Objekt Anweisungen für Aktionen wie Öffnen, Speichern oder Schließen erteilen.By using VBA code, you can instruct the Document object to do things such as Open, Save, or Close.

Im folgenden Abschnitt wird erklärt, wie Objekte organisiert und beschrieben werden.The following section discusses how objects are organized and described.

Das ObjektmodellThe Object Model

Entwickler organisieren Programmierungsobjekte in einer Hierarchie, und diese Hierarchie wird als das Objektmodell der Anwendung bezeichnet.Developers organize programming objects in a hierarchy, and that hierarchy is called the object model of the application. Word weist z. B. ein Application-Objekt auf oberster Ebene auf, das ein Document-Objekt enthält.Word, for example, has a top-level Application object that contains a Document object. Das Document-Objekt enthält Paragraph-Objekte und so weiter.The Document object contains Paragraph objects and so on. Objektmodelle spiegeln ungefähr, was auf der Benutzeroberfläche angezeigt wird.Object models roughly mirror what you see in the user interface. Sie sind eine konzeptionelle Übersicht über die Anwendung und deren Funktionen.They are a conceptual map of the application and its capabilities.

Die Definition eines Objekts wird als Klasse bezeichnet, diese beiden Begriffe werden daher möglicherweise synonym verwendet.The definition of an object is called a class, so you might see these two terms used interchangeably. Technisch gesehen ist eine Klasse die Beschreibung oder Vorlage, die zum Erstellen oder Instanziieren eines Objekts verwendet wird.Technically, a class is the description or template that is used to create, or instantiate, an object.

Sobald ein Objekt vorhanden ist, können Sie es bearbeiten, indem Sie seine Eigenschaften festlegen und seine Methoden aufrufen.Once an object exists, you can manipulate it by setting its properties and calling its methods. Wenn Sie sich das Objekt wie ein Nomen vorstellen, so sind die Eigenschaften die Adjektive, die das Nomen beschreiben, und die Methoden sind die Verben, die das Nomen animieren.If you think of the object as a noun, the properties are the adjectives that describe the noun and the methods are the verbs that animate the noun. Durch Ändern einer Eigenschaft wird auch die Qualität der Darstellung oder das Verhalten des Objekts geändert.Changing a property changes some quality of appearance or behavior of the object. Durch Aufrufen der Objektmethoden wird bewirkt, dass das Objekt eine Aktion ausführt.Calling one of the object methods causes the object to perform some action.

Der VBA-Code in diesem Artikel wird in einer geöffneten Office-Anwendung ausgeführt, sodass viele der vom Code manipulierten Objekte bereits laufen (z. B. die Anwendung selbst, das Arbeitsblatt in Excel, das Dokument in Word, die Präsentation in PowerPoint, das Explorer- und das Folder-Objekt in Outlook).The VBA code in this article runs against an open Office application where many of the objects that the code manipulates are already up and running; for example, the Application itself, the Worksheet in Excel, the Document in Word, the Presentation in PowerPoint, the Explorer and Folder objects in Outlook. Nachdem Sie sich mit dem grundlegenden Aufbau des Objektmodells und den wichtigsten Eigenschaften der Anwendung vertraut gemacht haben, auf denen der aktuelle Status der Anwendung basiert, können Sie damit beginnen, die betreffende Office-Anwendung mithilfe von VBA in Office zu erweitern und zu verändern.Once you know the basic layout of the object model and some key properties of the Application that give access to its current state, you can start to extend and manipulate that Office application with VBA in Office.

MethodenMethods

In Word können Sie beispielsweise die Eigenschaften ändern und die Methoden des aktuellen Word-Dokuments aufrufen, indem Sie die ActiveDocument-Eigenschaft des Application-Objekts verwenden.In Word, for example, you can change the properties and invoke the methods of the current Word document by using the ActiveDocument property of the Application object. Diese ActiveDocument-Eigenschaft gibt einen Verweis auf das Document-Objekt zurück, das in der Word-Anwendung derzeit aktiv ist.This ActiveDocument property returns a reference to the Document object that is currently active in the Word application. „Gibt einen Verweis zurück auf“ bedeutet „gibt Ihnen Zugriff auf“."Returns a reference to" means "gives you access to."

Der folgende Code zeigt genau, was er tut: Er speichert das aktive Dokument in der Anwendung.The following code does exactly what it says; that is, it saves the active document in the application.

Application.ActiveDocument.Save

Lesen Sie den Code von links nach rechts "In dieser Anwendung, wobei durch ActiveDocument auf Document verwiesen wird, die Save-Methode aufrufen".Read the code from left to right, "In this Application, with the Document referenced by ActiveDocument, invoke the Save method." Beachten Sie, dass Save die einfachste Art von Methode ist; sie erfordert keine ausführlichen Anweisungen von Ihnen.Be aware that Save is the simplest form of method; it does not require any detailed instructions from you. Sie weisen ein Documentan, zu speichern, und es sind keine weiteren Eingaben von Ihrer Seite erforderlich.You instruct a Document object to Save and it does not require any more input from you.

Wenn eine Methode weitere Informationen erfordert, werden diese Details als Parameter bezeichnet.If a method requires more information, those details are called parameters. Der folgende Code führt die SaveAs-Methode aus, die einen neuen Namen für die Datei benötigt.The following code runs the SaveAs method, which requires a new name for the file.

Application.ActiveDocument.SaveAs ("New Document Name.docx")

Die Werte, die nach dem Methodennamen in Klammern angegeben werden, sind die Parameter.Values listed in parentheses after a method name are the parameters. In diesem Fall ist der neue Name der Datei ein Parameter für die SaveAs-Methode.Here, the new name for the file is a parameter for the SaveAs method.

EigenschaftenProperties

Zum Festlegen einer Eigenschaft wird dieselbe Syntax wie zum Lesen einer Eigenschaft verwendet.You use the same syntax to set a property that you use to read a property. Der folgende Code führt eine Methode aus, um Zelle A1 in Excel zu markieren und eine Eigenschaft festzulegen, mit der etwas in diese Zelle eingefügt wird.The following code executes a method to select cell A1 in Excel and then to set a property to put something in that cell.

    Application.ActiveSheet.Range("A1").Select
    Application.Selection.Value = "Hello World"

Die erste Herausforderung bei der VBA-Programmierung besteht darin, ein Gefühl für das Objektmodell jeder Office-Anwendung zu bekommen und die Objekt-, Methoden- und Eigenschaftensyntax zu verstehen.The first challenge in VBA programming is to get a feeling for the object model of each Office application and to read the object, method, and property syntax. Die Objektmodelle sind in allen Office-Anwendungen ähnlich, beziehen sich aber jeweils auf die Dokument- und Objektarten, die verändert werden.The object models are similar in all Office applications, but each is specific to the kind of documents and objects that it manipulates.

In der ersten Zeile des Codeausschnitts steht das Application-Objekt, dieses Mal Excel, und dann das ActiveSheet-Objekt, das Zugriff auf das aktive Arbeitsblatt ermöglicht.In the first line of the code snippet, there is the Application object, Excel this time, and then the ActiveSheet, which provides access to the active worksheet. Danach folgt ein Begriff, der nicht so geläufig ist, und zwar "Range", was so viel bedeutet wie "einen Bereich von Zellen auf diese Weise definieren".After that is a term not as familiar, Range, which means "define a range of cells in this way." Der Code weist Range an, sich selbst zu erstellen, wobei nur A1 als definierter Satz von Zellen festgelegt wird.The code instructs Range to create itself with just A1 as its defined set of cells. In anderen Worten: Die erste Codezeile definiert ein Objekt, und zwar „Range“, und führt eine Methode dafür aus, um dieses auszuwählen.In other words, the first line of code defines an object, the Range, and runs a method against it to select it. Das Ergebnis wird automatisch in einer anderen Eigenschaft der Application mit dem Namen Selection gespeichert.The result is automatically stored in another property of the Application called Selection.

In der zweiten Codezeile wird die Value-Eigenschaft von Selection auf den Text "Hello World" festgelegt. Der Wert wird in der Zelle A1 angezeigt.The second line of code sets the Value property of Selection to the text "Hello World", and that value appears in cell A1.

Der einfachste VBA-Code greift einfach nur auf Objekte in der Office-Anwendung zu, mit der Sie arbeiten und legt Eigenschaften fest.The simplest VBA code that you write might simply gain access to objects in the Office application that you are working with and set properties. Beispielsweise können Sie Zugriff auf die Zeilen in einer Tabelle in Word erhalten und die Formatierung im VBA-Skript ändern.For example, you could get access to the rows in a table in Word and change their formatting in your VBA script.

Das hört sich einfach an, kann aber unglaublich hilfreich sein. Sobald Sie diesen Code schreiben können, steht Ihnen die gesamte Leistungsfähigkeit der Programmierung zur Verfügung, um dieselben Änderungen in mehreren Tabellen oder Dokumenten bzw. nach einer bestimmten Logik oder Bedingung vorzunehmen.That sounds simple, but it can be incredibly useful; once you can write that code, you can harness all of the power of programming to make those same changes in several tables or documents, or make them according to some logic or condition. Für einen Computer ist es egal, ob er 1000 Änderungen durchführt oder 10. Es gibt also bei größeren Dokumenten oder schwierigeren Problemstellungen ein enormes Einsparpotenzial, da Sie mit VBA sehr viel Zeit sparen können.For a computer, making 1000 changes is no different from making 10, so there is an economy of scale here with larger documents and problems, and that is where VBA can really shine and save you time.

Makros und der Visual Basic-EditorMacros and the Visual Basic Editor

Nun, da Sie etwas darüber wissen, wie Office-Anwendungen ihre Objektmodelle darstellen, möchten Sie sicher selbst Objektmethoden aufrufen, Objekteigenschaften festlegen und auf Objektereignisse reagieren.Now that you know something about how Office applications expose their object models, you are probably eager to try calling object methods, setting object properties, and responding to object events. Dazu müssen Sie Code an einer Stelle und mit einer Vorgehensweise schreiben, die von Office "verstanden" wird – das ist in der Regel der Visual Basic-Editor.To do so, you must write your code in a place and in a way that Office can understand; typically, by using the Visual Basic Editor. Dieser Editor ist zwar standardmäßig installiert, vielen Benutzern aber so lange gänzlich unbekannt, bis er auf dem Menüband aktiviert wird.Although it is installed by default, many users do not know that it is even available until it is enabled on the ribbon.

Alle Office-Anwendungen verwenden das Menüband.All Office applications use the ribbon. Eine der Registerkarten auf dem Menüband ist die Registerkarte Entwickler, über die Sie den Visual Basic-Editor und andere Tools für Entwickler aufrufen können.One tab on the ribbon is the Developer tab, where you access the Visual Basic Editor and other developer tools. Da in Office die Registerkarte Entwickler standardmäßig nicht angezeigt werden, müssen Sie sie mithilfe des folgenden Verfahrens aktivieren:Because Office does not display the Developer tab by default, you must enable it by using the following procedure:

So aktivieren Sie die Registerkarte „Entwickler“To enable the Developer tab

  1. Klicken Sie auf der Registerkarte Datei auf Optionen, um das Dialogfeld Optionen zu öffnen.On the File tab, choose Options to open the Options dialog box.

  2. Wählen Sie auf der linken Seite des Dialogfelds Menüband anpassen aus.Choose Customize Ribbon on the left side of the dialog box.

  3. Wählen Sie auf der linken Seite des Dialogfelds unter Befehle auswählen den Eintrag Häufig verwendete Befehle aus.Under Choose commands from on the left side of the dialog box, select Popular Commands.

  4. Klicken Sie auf der rechten Seite des Dialogfelds unter Menüband anpassen im Dropdown-Listenfeld auf Hauptregisterkarten, und aktivieren Sie dann das Kontrollkästchen Entwickler.Under Customize the Ribbon on the right side of the dialog box, select Main Tabs in the drop down list box, and then select the Developer checkbox.

  5. Wählen Sie OK aus.Choose OK.

Hinweis

In Office 2007 konnten Sie die Registerkarte Entwickler anzeigen, indem Sie die Office-Schaltfläche und dann Optionen auswählten und anschließend im Dialogfeld Optionen in der Kategorie Häufig verwendet das Kontrollkästchen Registerkarte "Entwicklertools" in der Menüband anzeigen aktivierten.In Office 2007, you displayed the Developer tab by choosing the Office button, choosing Options, and then selecting the Show Developer tab in Ribbon check box in the Popular category of the Options dialog box.

Nachdem Sie die Registerkarte Entwickler aktiviert haben, finden Sie die Schaltflächen für Visual Basic und Makros auf den ersten Blick.After you enable the Developer tab, it is easy to find the Visual Basic and Macros buttons.

Abbildung 1: Schaltflächen auf der Registerkarte „Entwicklertools“Figure 1. Buttons on the Developer tab

Schaltflächen auf der Registerkarte „Entwicklertools“

Überlegungen zur SicherheitSecurity issues

Zum Schutz von Office-Benutzern vor Viren und gefährlichen Makrocode ist es nicht möglich, Makrocode in einem normalen Office-Dokument mit einer normalen Dateierweiterung zu speichern.To protect Office users against viruses and dangerous macro code, you cannot save macro code in a standard Office document that uses a standard file extension. Stattdessen müssen Sie den Code in einer Datei mit einer Spezialerweiterung speichern.Instead, you must save the code in a file with a special extension. Beispielsweise können Sie Makros nicht in einem normalen Word-Dokument mit der Erweiterung DOCX speichern, sondern müssen ein spezielles Word-Dokument mit Makros (Erweiterung DOCM) verwenden.For example you cannot save macros in a standard Word document with a .docx extension; instead, you must use a special Word Macro-Enabled Document with a .docm extension.

Beim Öffnen einer DOCM-Datei verhindert die Office-Sicherheit u. U. dennoch die Ausführung der Makros im Dokument, möglicherweise, ohne eine entsprechende Meldung auszugeben.When you open a .docm file, Office security might still prevent the macros in the document from running, with or without telling you. Überprüfen Sie die Einstellungen und Optionen im Sicherheitscenter für alle Office-Anwendungen.Examine the settings and options in the Trust Center on all Office applications. Gemäß Standardeinstellung ist die Makroausführung deaktiviert, Sie erhalten aber eine Warnung, dass Makros deaktiviert wurden, und haben die Möglichkeit, die Makros für das jeweilige Dokument zu aktivieren.The default setting disables macro from running, but warns you that macros have been disabled and gives you the option to turn them back on for that document.

Sie können bestimmte Ordner festlegen, in denen Makros ausgeführt werden können, indem Sie „Vertrauenswürdige Speicherorte“, „Vertrauenswürdige Dokumente“ oder „Vertrauenswürdige Herausgeber“ erstellen.You can designate specific folders where macros can run by creating Trusted Locations, Trusted Documents, or Trusted Publishers. Die praktischste Option ist die Verwendung von vertrauenswürdige Herausgebern, die bei digital signierten Dokumenten funktioniert, die Sie verteilen.The most portable option is to use Trusted Publishers, which works with digitally signed documents that you distribute. Weitere Informationen zu den Sicherheitseinstellungen in einer bestimmten Office-Anwendung erhalten Sie, wenn Sie im Dialogfeld Optionen die Option Trust Center und dann Einstellungen für das Trust Center auswählen.For more information about the security settings in a particular Office application, open the Options dialog box, choose Trust Center, and then choose Trust Center Settings.

Hinweis

In einigen Office-Anwendungen wie Outlook werden Makros standardmäßig in einer Mastervorlage auf dem lokalen Computer gespeichert.Some Office applications, like Outlook, save macros by default in a master template on your local computer. Diese Strategie vermindert zwar lokale Sicherheitsprobleme auf dem eigenen Computer beim Ausführen eigener Makros, macht allerdings eine Bereitstellungsstrategie zur Verteilung des Makros erforderlich.Although that strategy reduces the local security issues on your own computer when you run your own macros, it requires a deployment strategy if you want to distribute your macro.

Aufzeichnen eines MakrosRecording a macro

Wenn Sie auf der Registerkarte Entwickler die Schaltfläche Makro auswählen, wird das Dialogfeld Makros geöffnet, in dem Sie auf VBA-Unterroutinen oder -Makros in einem bestimmten Dokument oder einer bestimmten Anwendung zugreifen können.When you choose the Macro button on the Developer tab, it opens the Macros dialog box, which gives you access to VBA subroutines or macros that you can access from a particular document or application. Über die Schaltfläche Visual Basic öffnen Sie den Visual Basic-Editor, in dem Sie VBA-Code erstellen und bearbeiten.The Visual Basic button opens the Visual Basic Editor, where you create and edit VBA code.

Eine weitere Schaltfläche auf der Registerkarte Entwickler in Word und Excel ist Makro aufzeichnen, die automatisch VBA-Code generiert, der Ihre in der Anwendung durchgeführten Aktionen reproduziert.Another button on the Developer tab in Word and Excel is the Record Macro button, which automatically generates VBA code that can reproduce the actions that you perform in the application. Makro aufzeichnen ist ein großartiges Tool, das Sie verwenden können, um mehr über VBA zu erfahren.Record Macro is a terrific tool that you can use to learn more about VBA. Durch Lesen des generierten Codes erhalten Sie einen Einblick in VBA und vertiefen sowohl Ihr Wissen über Office als Benutzer als auch Ihr Wissen als Programmierer.Reading the generated code can give you insight into VBA and provide a stable bridge between your knowledge of Office as a user and your knowledge as a programmer. Der einzige Nachteil ist, dass der generierte Code verwirrend sein kann, da der Makro-Editor einige Annahmen über Ihre Absichten vornehmen muss, und diese sind möglicherweise nicht korrekt.The only caveat is that the generated code can be confusing because the Macro editor must make some assumptions about your intentions, and those assumptions are not necessarily accurate.

So zeichnen Sie ein Makro aufTo record a macro

  1. Öffnen Sie in Excel eine neue Arbeitsmappe, und wählen Sie auf dem Menüband die Registerkarte Entwickler aus.Open Excel to a new Workbook and choose the Developer tab in the ribbon. Wählen Sie Makro aufzeichnen aus, und akzeptieren Sie alle Standardeinstellungen im Dialogfeld Makro aufzeichnen, auch Makro1 als Name für das Makro und Diese Arbeitsmappe als Speicherort.Choose Record Macro and accept all of the default settings in the Record Macro dialog box, including Macro1 as the name of the macro and This Workbook as the location.

  2. Wählen Sie OK aus, um die Aufzeichnung des Makros zu starten.Choose OK to begin recording the macro. Beachten Sie, wie sich der Schaltflächentext in Aufzeichnung beenden ändert.Note how the button text changes to Stop Recording. Wählen Sie die Schaltfläche aus, sobald Sie alle Aktionen abgeschlossen haben, die Sie aufzeichnen möchten.Choose that button the instant you complete the actions that you want to record.

  3. Wählen Sie Zelle B1 aus, und geben Sie die typische erste Zeichenfolge jedes Programmierers ein: Hello World.Choose cell B1 and type the programmer's classic first string: Hello World. Beenden Sie die Eingabe, und sehen Sie sich die Schaltfläche Aufzeichnung beenden an: Sie ist ausgegraut, weil Excel wartet, bis Sie die Eingabe in der Zelle beenden.Stop typing and look at the Stop Recording button; it is grayed out because Excel is waiting for you to finish typing the value in the cell.

  4. Wählen Sie Zelle B2 aus, um die Aktion in Zelle B1 abzuschließen, und dann Aufzeichnung beenden.Choose cell B2 to complete the action in cell B1, and then choose Stop Recording.

  5. Wählen Sie auf der Registerkarte Entwickler die Option Makros, dann ggf. Makro1 und anschließend Bearbeiten aus, um den Code von Makro1 im Visual Basic-Editor anzuzeigen.Choose Macros on the Developer tab, select Macro1 if it is not selected, and then choose Edit to view the code from Macro1 in the Visual Basic Editor.

Abbildung 2. Makrocode im Visual Basic-EditorFigure 2. Macro code in Visual Basic Editor

Makrocode im Visual Basic-Editor

Der Code im EinzelnenLooking at the code

Das von Ihnen erstellte Makro sollte dem folgenden Code ähneln.The macro that you created should look similar to the following code.

Sub Macro1()
'
' Macro1 Macro
'
'
    Range("B1").Select
    ActiveCell.FormulaR1C1 = "Hello World"
    Range("B2").Select
End Sub

Achten Sie auf die Ähnlichkeiten und auch die Unterschiede gegenüber dem vorherigen Codeausschnitt zum Auswählen von Text in Zelle A1.Be aware of the similarities to the earlier code snippet that selected text in cell A1, and the differences. In diesem Code wird Zelle B1 ausgewählt und dann die Zeichenfolge "Hello World" in die so aktivierte Zelle übernommen.In this code, cell B1 is selected, and then the string "Hello World" is applied to the cell that has been made active. Die Anführungszeichen um den Text kennzeichnen einen Zeichenfolgenwert gegenüber einem numerischen Wert.The quotes around the text specify a string value as opposed to a numeric value.

Können Sie sich noch erinnern, wie Sie Zelle B2 ausgewählt haben, um die Schaltfläche Aufzeichnung beenden erneut anzuzeigen?Remember how you chose cell B2 to display the Stop Recording button again? Diese Aktion wird auch als Codezeile angezeigt.That action shows up as a line of code as well. Die Makroaufzeichnung zeichnet jeden Tastaturanschlag auf.The macro recorder records every keystroke.

Die Codezeilen, die mit einem Apostroph beginnen und im Editor grün dargestellt werden, sind Kommentare, die entweder den Code genauer erklären oder Sie und andere Programmierer an den Zweck des Codes erinnern.The lines of code that start with an apostrophe and colored green by the editor are comments that explain the code or remind you and other programmers the purpose of the code. In VBA wird jede Zeile bzw. jeder Teil einer Zeile ignoriert, die bzw. der mit einem einfachen Anführungszeichen beginnt.VBA ignores any line, or portion of a line, that begins with a single quote. Das klare und sinnvolle Kommentieren des Codes ist ein wichtiges Thema, das aber den Umfang dieses Artikels sprengen würde.Writing clear and appropriate comments in your code is an important topic, but that discussion is out of the scope of this article. Wenn weiter hinten in diesem Artikel auf diesen Code verwiesen wird, sind diese vier Kommentarzeilen nicht mehr enthalten.Subsequent references to this code in the article do not include those four comment lines.

Wenn die Makroaufzeichnung den Code generiert, wird ein komplexer Algorithmus verwendet, um die beabsichtigten Methoden und Eigenschaften zu ermitteln.When the macro recorder generates the code, it uses a complex algorithm to determine the methods and the properties that you intended. Wenn Sie eine bestimmte Eigenschaft nicht erkennen, stehen Ihnen viele Ressourcen mit Hilfe zur Verfügung.If you do not recognize a given property, there are many resources available to help you. Beispielsweise verweist der von der Makroaufzeichnung generierte Code Ihres Makros auf die FormulaR1C1-Eigenschaft.For example, in the macro that you recorded, the macro recorder generated code that refers to the FormulaR1C1 property. Ihnen ist nicht ganz klar, was das bedeutet?Not sure what that means?

Hinweis

Beachten Sie, dass das Application-Objekt in allen VBA-Makros impliziert wird.Be aware that Application object is implied in all VBA macros. Der Code, den Sie aufgezeichnet haben, arbeitet mit Application.The code that you recorded works with Application. am Anfang jeder Zeile.at the beginning of each line.

Verwenden der EntwicklerhilfeUsing Developer Help

Wählen Sie FormulaR1C1 im aufgezeichneten Makro aus, und drücken Sie F1.Select FormulaR1C1 in the recorded macro and press F1. Das Hilfesystem führt eine schnelle Suche durch, stellt fest, dass die entsprechenden Themen sich im Excel-Entwicklerabschnitt der Excel-Hilfe befinden und führt die FormulaR1C1-Eigenschaft auf.The Help system runs a quick search, determines that the appropriate subjects are in the Excel Developer section of the Excel Help, and lists the FormulaR1C1 property. Sie können den Link auswählen, um weitere Informationen zu der Eigenschaft zu erhalten. Bevor Sie dies tun, sollten Sie jedoch den Link Referenz zum Excel-Objektmodell im unteren Bereich des Fensters beachten.You can choose the link to read more about the property, but before you do, be aware of the Excel Object Model Reference link near the bottom of the window. Wählen Sie den Link aus, um eine lange Liste von Objekten anzuzeigen, die Excel in seinem Objektmodell zum Beschreiben der Arbeitsblätter und ihrer Komponenten verwendet.Choose the link to view a long list of objects that Excel uses in its object model to describe the Worksheets and their components.

Wählen Sie eine der Optionen aus, um die Eigenschaften und Methoden, die für das jeweilige Objekt gelten, zusammen mit Querverweisen auf unterschiedliche verwandte Optionen anzuzeigen.Choose any one of those to see the properties and methods that apply to that particular object, along with cross references to different related options. Viele Hilfeeinträge weisen auch kurze Codebeispiele auf, die Ihnen helfen können.Many Help entries also have brief code examples that can help you. Sie können z. B. den Links im Borders-Objekt folgen, um zu sehen, wie ein Rahmen in VBA festgelegt wird.For example, you can follow the links in the Borders object to see how to set a border in VBA.

Worksheets(1).Range("A1").Borders.LineStyle = xlDouble

Bearbeiten von CodeEditing the code

Der Borders-Code sieht anders aus als das aufgezeichnete Makro.The Borders code looks different from the recorded macro. Eines kann bei einem Objektmodell etwas verwirrend sein, nämlich die Tatsache, dass es mehrere Möglichkeiten gibt, ein Objekt (in diesem Beispiel die Zelle A1) zu adressieren.One thing that can be confusing with an object model is that there is more than one way to address any given object, cell A1 in this example.

Eine der besten Möglichkeiten, das Programmieren zu erlernen, ist manchmal, kleinere Änderungen an funktionierendem Code vorzunehmen und zu sehen, was passiert.Sometimes the best way to learn programming is to make minor changes to some working code and see what happens as a result. Versuchen Sie es.Try it now. Öffnen Sie Makro1 im Visual Basic-Editor, und ändern Sie den Code wie folgt.Open Macro1 in the Visual Basic Editor and change the code to the following.

Sub Macro1()
    Worksheets(1).Range("A1").Value = "Wow!"
    Worksheets(1).Range("A1").Borders.LineStyle = xlDouble
End Sub

Tipp

Verwenden Sie beim Arbeiten mit Code wo möglich Kopieren und Einfügen, um Eingabefehler zu vermeiden. Use Copy and Paste as much as possible when working with code to avoid typing errors.

Sie müssen den Code nicht speichern, um ihn testen zu können. Kehren Sie jetzt zum Excel-Dokument zurück, indem Sie auf der Registerkarte Entwickler die Optionen Makros, Makro1 und anschließend Ausführen auswählen.You do not need to save the code to try it out, so return to the Excel document, choose Macros on the Developer tab, choose Macro1, and then choose Run. Die Zelle A1 enthält jetzt den Text Wow!Cell A1 now contains the text Wow! und ist von einem doppellinigen Rahmen umgeben.and has a double-line border around it.

Abbildung 3: Ergebnisse Ihres ersten MakrosFigure 3. Results of your first macro

Ergebnisse Ihres ersten Makros

Sie haben durch eine Kombination aus einer Makroaufzeichnung, dem Lesen der Objektmodelldokumentation und einfacher Programmierung ein funktionierendes VBA-Programm erstellt.You just combined macro recording, reading the object model documentation, and simple programming to make a VBA program that does something. Herzlichen Glückwunsch!Congratulations!

Es hat nicht funktioniert?Did not work? Lesen Sie weiter, um Vorschläge für das Debuggen in VBA zu erhalten.Read on for debugging suggestions in VBA.

Tipps und Tricks für die ProgrammierungProgramming tips and tricks

Mit Beispielen anfangenStart with examples

Es gibt unzählige VBA-Programmierer. Bei einer Websuche finden Sie fast immer ein Beispiel für VBA-Code mit einer ähnlichen Funktion, wie Sie benötigen.The VBA community is very large; a search on the Web can almost always yield an example of VBA code that does something similar to what you want to do. Wenn Sie kein gutes Beispiel finden, können Sie die Aufgabe in kleinere Komponenten unterteilen und nach diesen suchen. Oder Sie können sich eine ähnliche, aber gängigere Problemstellung überlegen.If you cannot find a good example, try to break the task down into smaller units and search on each of those, or try to think of a more common, but similar problem. Wenn Sie mit einem Beispiel beginnen, können Sie sich viele Stunden Arbeit sparen.Starting with an example can save you hours of time.

Das bedeutet aber nicht, dass im Web kostenloser und sorgfältig durchdachter Code nur auf Sie wartet.That does not mean that free and well-thought-out code is on the Web waiting for you to come along. Es kann durchaus sein, dass der gefundene Code Fehler enthält.In fact, some of the code that you find might have bugs or mistakes. Die Beispiele, die Sie online oder in der VBA-Dokumentation finden, sollen Ihnen lediglich den Einstieg erleichtern.The idea is that the examples you find online or in VBA documentation give you a head start. Vergessen Sie nicht: Das Erlernen der Programmierung kostet Zeit und Überlegung.Remember that learning programming requires time and thought. Bevor Sie in letzter Minute eine andere Lösung für Ihr Problem finden müssen, sollten Sie sich lieber von Anfang an fragen, ob VBA die richtige Wahl für die Aufgabenstellung ist.Before you get in a big rush to use another solution to solve your problem, ask yourself whether VBA is the right choice for this problem.

Das Problem vereinfachenMake a simpler problem

Die Programmierung wird schnell äußerst kompliziert.Programming can get complex quickly. Gerade für Anfänger ist es daher wichtig, das Problem in möglichst kleine logische Einheiten zu untergliedern und die einzelnen Teile isoliert zu schreiben und zu testen.It is critical, especially as a beginner, that you break the problem down to the smallest possible logical units, then write and test each piece in isolation. Wenn Sie angesichts des Codes vor Ihnen den Überblick verlieren, sollten Sie die Arbeit unterbrechen und an etwas anderes denken.If you have too much code in front of you and you get confused or muddled, stop and set the problem aside. Wenn Sie danach wieder zu Ihrer Aufgabenstellung zurückkehren, kopieren Sie einen kleinen Teil des Problems in ein neues Modul, lösen Sie diesen Teil, erstellen Sie funktionsfähigen Code, und testen Sie diesen.When you come back to the problem, copy out a small piece of the problem into a new module, solve that piece, get the code working, and test it to ensure that it works. Machen Sie dann mit dem nächsten Teil weiter.Then move on to the next part.

Fehler und DebuggenBugs and debugging

Es gibt im Wesentlichen zwei Arten von Programmierfehlern: Syntaxfehler, die gegen Grammatikregeln der Programmiersprache verstoßen, und Laufzeitfehler, die zwar syntaktisch korrekt sind, aber beim Ausführen des Codes einen Fehler verursachen.There are two main types of programming errors: syntax errors, which violate the grammatical rules of the programming language, and run-time errors, which look syntactically correct, but fail when VBA attempts to execute the code.

Syntaxfehler sind zwar manchmal schwierig zu beheben, dafür aber umso leichter zu finden. Im Visual Basic-Editor werden Sie akustisch und visuell auf Syntaxfehler im Code aufmerksam gemacht.Although they can be frustrating to fix, syntax errors are easy to catch; the Visual Basic Editor beeps and flashes at you if you type a syntax error in your code.

Zeichenfolgenwerte müssen in VBA in doppelte Anführungszeichen eingeschlossen werden.For example, string values must be surrounded by double quotes in VBA. Um herauszufinden, was passiert, wenn Sie stattdessen einfache Anführungszeichen verwenden, kehren Sie zum Visual Basic-Editor zurück, und ersetzen Sie die Zeichenfolge „Wow!“To find out what happens when you use single quotes instead, return to the Visual Basic Editor and replace the "Wow!" durch die Zeichenfolge ‚Wow!‘string in the code example with 'Wow!' (d. h. das Wort Wow wird in einfache Anführungszeichen gesetzt).(that is, the word Wow enclosed in single quotes). Wenn Sie die nächste Zeile auswählen, reagiert der Visual Basic-Editor.If you choose the next line, the Visual Basic Editor reacts. Der Fehler "Kompilierungsfehler: Ausdruck erwartet" ist nicht besonders hilfreich, aber die Zeile, die den Fehler generiert, wird rot angezeigt, um Sie darauf hinzuweisen, dass ein Syntaxfehler in dieser Zeile vorliegt und dass das Programm deshalb nicht ausgeführt wird.The error "Compile error: Expected: expression" is not that helpful, but the line that generates the error turns red to tell you that you have a syntax error in that line and as a result, this program will not run.

Wählen Sie OK aus, und ändern Sie den Text wieder in "Wow!".Choose OK and change the text back to"Wow!".

Laufzeitfehler sind schwieriger zu finden, weil die Programmiersyntax an sich korrekt aussieht, der Code aber beim Versuch, ihn auszuführen, einen Fehler verursacht.Runtime errors are harder to catch because the programming syntax looks correct, but the code fails when VBA tries to execute it.

Öffnen Sie z. B. den Visual Basic-Editor, und ändern Sie im Makro den Value-Eigenschaftsnamen in "ValueX", wodurch absichtlich ein Laufzeitfehler verursacht wird, da das Range-Objekt nicht über eine Eigenschaft mit dem Namen "ValueX" verfügt.For example, open the Visual Basic Editor and change the Value property name toValueX in your Macro, deliberately introducing a runtime error since the Range object does not have a property called ValueX. Wechseln Sie wieder in das Excel-Dokument, öffnen Sie das Dialogfeld Makros, und führen Sie Makro1 erneut aus.Go back to the Excel document, open the Macros dialog box and run Macro1 again. Es sollte ein Visual Basic-Nachrichtenfeld angezeigt werden, in dem der Laufzeitfehler mit dem Text „Das Objekt unterstützt diese Eigenschaft oder Methode nicht“ erläutert wird.You should see a Visual Basic message box that explains the run-time error with the text, "Object doesn't support this property of method." Der Text ist zwar gut verständlich, wählen Sie aber dennoch Debuggen aus, um mehr zu erfahren.Although that text is clear, choose Debug to find out more.

Wenn Sie zum Visual Basic-Editor zurückkehren, befindet sich dieser in einem speziellen Debugmodus, in dem die fehlerhafte Codezeile gelb markiert ist.When you return to the Visual Basic Editor, it is in a special debug mode that uses a yellow highlight to show you the line of code that failed. Erwartungsgemäß ist die Zeile mit der ValueX-Eigenschaft hervorgehoben.As expected, the line that includes the ValueX property is highlighted.

Sie können den VBA-Code während der Ausführung bearbeiten. Ändern Sie daher "ValueX" wieder zurück in Value, und wählen Sie die kleine grüne Wiedergabeschaltfläche unter dem Menü Debuggen aus.You can make changes to VBA code that is running, so change ValueX back to Value and choose the little green play button underneath the Debug menu. Das Programm sollte jetzt wieder normal ausgeführt werden.The program should run normally again.

Es empfiehlt sich, zu erlernen, wie der Debugger wohlüberlegter für längere, komplexere Programme verwendet wird.It is a good idea to learn how to use the debugger more deliberately for longer, more complex programs. Sie sollten auf jeden Fall erlernen, wie Haltepunkte festgelegt werden, um die Ausführung an einem Punkt zu beenden, an dem Sie sich den Code ansehen möchten, wie Uhren hinzugefügt werden, um die Werte unterschiedlicher Variablen und Eigenschaften beim Ausführen des Codes anzuzeigen, und wie der Code Zeile für Zeile durchlaufen wird.At a minimum, learn a how to set break-points to stop execution at a point where you want to take a look at the code, how to add watches to see the values of different variables and properties as the code runs, and how to step through the code line by line. Diese Optionen sind alle im Menü Debuggen verfügbar, und fortgeschrittene Debug-Benutzer prägen sich in der Regel die dazu gehörenden Tastenkombinationen ein.These options are all available in the Debug menu and serious debugger users typically memorize the accompanying keyboard shortcuts.

Referenzmaterial sinnvoll nutzenUsing reference materials well

Zum Öffnen der Entwicklerreferenz, die in die Office-Hilfe integriert ist, öffnen Sie die Hilfereferenz in einer beliebigen Office-Anwendung, indem Sie auf dem Menüband das Fragezeichen auswählen oder die Taste F1 drücken.To open the Developer Reference that is built into Office Help, open the Help reference from any Office application by choosing the question mark in the ribbon or by pressing F1. Wählen Sie dann den Dropdownpfeil rechts neben der Schaltfläche Suchen aus, um die Inhalte zu filtern.Then, to the right of the Search button, choose the dropdown arrow to filter the contents. Wählen Sie Entwicklerreferenz aus.Choose Developer Reference. Wenn das Inhaltsverzeichnis nicht im linken Bereich angezeigt wird, wählen Sie das kleine Buchsymbol aus, um es zu öffnen, und erweitern Sie die Objektmodellreferenz von dort.If you do not see the table of contents in the left panel, choose the little book icon to open it, and then expand the Object Model Reference from there.

Abbildung 5. Das Filtern der Entwicklerhilfe gilt für alle Office-AnwendungenFigure 5. Filtering on developer Help applies to all Office applications

Das Filtern der Entwicklerhilfe gilt für alle Office-Anwendungen

Der Zeitaufwand für die Auseinandersetzung mit der Objektmodellreferenz zahlt sich aus.Time spent browsing the Object Model reference pays off. Wenn Sie die Grundlagen der VBA-Syntax und das Objektmodell für die verwendete Office-Anwendung verstanden haben, können Sie systematisch programmieren.After you understand the basics of VBA syntax and the object model for the Office application that you are working with, you advance from guesswork to methodical programming.

Selbstverständlich ist das Microsoft Office Developer Center ein exzellentes Portal für Artikel, Tipps und Informationen für die Entwicklercommunity.Of course the Microsoft Office Developer Center is an excellent portal for articles, tips, and community information.

In Foren und Gruppen suchenSearching forums and groups

Alle Programmierer kommen irgendwann trotz der Lektüre sämtlicher Referenzartikel und schlafloser Nächte, in denen sie die verschiedenen Möglichkeiten zur Lösung ihres Problems durchgehen, einfach nicht mehr weiter.All programmers get stuck sometimes, even after reading every reference article they can find and losing sleep at night thinking about different ways to solve a problem. Glücklicherweise gibt es im Internet eine Entwicklercommunity, deren Mitglieder sich gegenseitig bei Programmierproblemen helfen.Fortunately, the Internet has fostered a community of developers who help each other solve programming problems.

Suchen Sie einfach im Internet nach "office entwickler forum", um mehrere Diskussionsgruppen zu finden.Any search on the Web for "office developer forum" reveals several discussion groups. Suchen Sie nach "office entwicklung" oder nach einer Beschreibung Ihres Problems, um auch Foren, Blogbeiträge und Artikel zu finden.You can search on "office development" or a description of your problem to discover forums, blog posts, and articles as well.

Wenn Sie selbst nicht mehr weiterwissen, zögern Sie nicht, Ihre Frage in einem Entwicklerforum zu veröffentlichen.If you have done everything that you can to solve a problem, do not be afraid to post your question to a developers forum. Diese Foren akzeptieren auch Beiträge unerfahrener Entwickler, und viele erfahrene Programmierer helfen sehr gern.These forums welcome posts from newer programmers and many of the experienced developers are glad to help.

Beachten Sie bei der Veröffentlichung eines Beitrags in einem Entwicklerforum die folgenden Benimmregeln:The following are a few points of etiquette to follow when you post to a developer forum:

  • Suchen Sie vor der Veröffentlichung nach häufig gestellten Fragen oder Richtlinien, die eingehalten werden sollten.Before you post, look on the site for an FAQ or for guidelines that members want you to follow. Achten Sie darauf, dass Ihr Beitrag diesen Richtlinien entspricht und dass Sie ihn im richtigen Bereich des Forums einstellen.Ensure that you post content that is consistent with those guidelines and in the correct section of the forum.

  • Fügen Sie ein klares und vollständiges Codebeispiel hinzu, und bearbeiten Sie den Code gegebenenfalls, um Ausschnitte aus einem längeren Codeabschnitt für andere zu erläutern.Include a clear and complete code sample, and consider editing your code to clarify it for others if it is part of a longer section of code.

  • Beschreiben Sie Ihr Problem möglichst klar und knapp, und fassen Sie alle Schritte zusammen, die Sie bereits zur Lösung des Problems unternommen haben.Describe your problem clearly and concisely, and summarize any steps that you have taken to solve the problem. Nehmen Sie sich Zeit für die Formulierung Ihres Beitrags, insbesondere, wenn Sie nervös oder in Eile sind.Take the time to write your post as well as you can, especially if you are flustered or in a hurry. Beschreiben Sie die Situation so, dass Ihre Leser sie beim ersten Lesen der Problembeschreibung auf Anhieb verstehen können.Present the situation in a way that will make sense to readers the first time that they read the problem statement.

  • Seien Sie höflich, und bringen Sie Ihre Wertschätzung zum Ausdruck.Be polite and express your appreciation.

Programmieren für FortgeschritteneGoing further with programming

In diesem kurzen Artikel konnten die Themen VBA und Programmierung zwar nur oberflächlich vorgestellt werden, er hat Ihnen aber hoffentlich dennoch den Einstieg erleichtert.Although this article is short and only scratches the surface of VBA and programming, it is hopefully enough to get you started.

Im folgenden Abschnitt wird noch kurz auf einige weitere wichtige Themen eingegangen.This section briefly discusses a few more key topics.

VariablenVariables

In den einfachen Beispielen in diesem Artikel haben Sie mit Objekten gearbeitet, die bereits von der Anwendung erstellt worden waren.In the simple examples in this article you manipulated objects that the application had already created. Sie können eigene Objekte erstellen, um Werte oder Verweise auf andere Objekte zu speichern und in Ihrer Anwendung vorübergehend zu verwenden.You might want to create your own objects to store values or references to other objects for temporary use in your application. Solche Objekte werden als Variablen bezeichnet.These are called variables.

Um eine Variable in VBA zu verwenden, müssen Sie mithilfe einer Dim-Anweisung angeben, welchen Objekttyp die Variable darstellt.To use a variable in VBA, must tell VBA which type of object the variable represents by using the Dim statement. Anschließend legen Sie den Wert fest und verwenden sie zum Festlegen anderer Variablen oder Eigenschaften.You then set its value and use it to set other variables or properties.

    Dim MyStringVariable As String
    MyStringVariable = "Wow!"
    Worksheets(1).Range("A1").Value = MyStringVariable

Verzweigungen und SchleifenBranching and looping

Die einfachen Programme in diesem Artikel werden zeilenweise von oben nach unten ausgeführt.The simple programs in this article execute one line at a time, from the top down. Die Programmierung wird jedoch gerade dadurch so leistungsfähig, dass Sie mithilfe von einzelnen oder mehreren Bedingungen selbst bestimmen können, welche Codezeilen ausgeführt wann werden sollen.The real power in programming comes from the options that you have to determine which lines of code to execute, based on one or more conditions that you specify. Sie können diese Möglichkeiten noch erweitern, wenn Sie einen Vorgang beliebig oft wiederholen können.You can extend those capabilities even further when you can repeat an operation many times. Beispielsweise ist der folgende Code eine Erweiterung von Makro1.For example, the following code extends Macro1.

Sub Macro1()
    If Worksheets(1).Range("A1").Value = "Yes!" Then
        Dim i As Integer
        For i = 2 To 10
            Worksheets(1).Range("A" & i).Value = "OK! " & i
        Next i
    Else
        MsgBox "Put Yes! in cell A1"
    End If
End Sub

Geben Sie den Code in den Visual Basic-Editor ein, oder fügen Sie ihn ein, und führen Sie ihn dann aus.Type or paste the code into the Visual Basic Editor and then run it. Befolgen Sie die Anweisungen in dem Nachrichtenfeld, das angezeigt wird, und ändern Sie den Text in Zelle A1 von Wow!Follow the directions in the message box that appears and change the text in cell A1 from Wow! in Yes!,to Yes! und führen Sie dies erneut aus, um sich von der Leistungsfähigkeit von Schleifen zu überzeugen.and run it again to see the power of looping. In diesem Codeausschnitt werden Variablen, Verzweigungen und Schleifen veranschaulicht.This code snippet demonstrates variables, branching and looping. Lesen Sie diesen genau durch, nachdem Sie ihn in Aktion gesehen haben, und versuchen Sie festzustellen, was bei jeder ausgeführten Zeile passiert.Read it carefully after you see it in action and try to determine what happens as each line executes.

Meine Office-Anwendungen: BeispielcodeAll of my Office applications: example code

Experimentieren Sie doch mit den folgenden Skripts, die jeweils ein Office-Problem aus der Praxis lösen.Here are a few scripts to try; each solves a real-world Office problem.

Erstellen einer E-Mail in OutlookCreate an email in Outlook

Sub MakeMessage()
    Dim OutlookMessage As Outlook.MailItem
    Set OutlookMessage = Application.CreateItem(olMailItem)
    OutlookMessage.Subject = "Hello World!"
    OutlookMessage.Display
    Set OutlookMessage = Nothing
End Sub

Es gibt Situationen, in denen Sie E-Mails in Outlook automatisieren möchten. Sie können dazu auch Vorlagen verwenden.Be aware that there are situations in which you might want to automate email in Outlook; you can use templates as well.

Löschen leerer Zeilen in einem Excel-ArbeitsblattDelete empty rows in an Excel worksheet

Sub DeleteEmptyRows()
    SelectedRange = Selection.Rows.Count
    ActiveCell.Offset(0, 0).Select
    For i = 1 To SelectedRange
        If ActiveCell.Value = "" Then
            Selection.EntireRow.Delete
        Else
            ActiveCell.Offset(1, 0).Select
        End If
    Next i
End Sub

Sie können eine Spalte von Zellen markieren und dieses Makro ausführen, um alle Zeilen in der markierten Spalte zu löschen, die eine leere Zelle enthalten.Be aware that you can select a column of cells and run this macro to delete all rows in the selected column that have a blank cell.

Löschen leerer Textfelder in PowerPointDelete empty text boxes in PowerPoint

Sub RemoveEmptyTextBoxes()
    Dim SlideObj As Slide
    Dim ShapeObj As Shape
    Dim ShapeIndex As Integer
    For Each SlideObj In ActivePresentation.Slides
        For ShapeIndex = SlideObj.Shapes.Count To 1 Step -1
            Set ShapeObj = SlideObj.Shapes(ShapeIndex)
            If ShapeObj.Type = msoTextBox Then
                If Trim(ShapeObj.TextFrame.TextRange.Text) = "" Then
                    ShapeObj.Delete
                End If
            End If
        Next ShapeIndex
    Next SlideObj
End Sub

Dieser Code durchläuft in Schleifen alle Folien und löscht sämtliche Textfelder, die keinen Text enthalten.Be aware that this code loops through all of the slides and deletes all text boxes that do not have any text. Die count-Variable wird immer kleiner statt größer, weil jedes Mal, wenn der Code ein Objekt löscht, das betreffende Objekt aus der Auflistung entfernt wird, wodurch die Anzahl sinkt.The count variable decrements instead of increments because each time the code deletes an object, it removes that object from the collection, which reduces the count.

Kopieren eines Kontakts aus Outlook in WordCopy a contact from Outlook to Word

Sub CopyCurrentContact()
   Dim OutlookObj As Object
   Dim InspectorObj As Object
   Dim ItemObj As Object
   Set OutlookObj = CreateObject("Outlook.Application")
   Set InspectorObj = OutlookObj.ActiveInspector
   Set ItemObj = InspectorObj.CurrentItem
   Application.ActiveDocument.Range.InsertAfter (ItemObj.FullName & " from " & ItemObj.CompanyName)
End Sub

Dieser Code kopiert den derzeit geöffneten Kontakt in Outlook in das geöffnete Word-Dokument.Be aware that this code copies the currently open contact in Outlook into the open Word document. Dieser Code funktioniert nur, wenn in Outlook ein Kontakt zur Ansicht geöffnet ist.This code only works if there is a contact currently open for inspection in Outlook.

Support und FeedbackSupport and feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation?Have questions or feedback about Office VBA or this documentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.