Richtig einsteigen: Excel 2007 VBA
Transcription
Richtig einsteigen: Excel 2007 VBA
Datei: xvba00a.doc, Seite 1 5. April 2008 Monika Weber Richtig einsteigen: Excel 2007 VBA-Programmierung Datei: xvba00a.doc, Seite 2 5. April 2008 Monika Weber: Richtig einsteigen: Excel 2007 VBA-Programmierung Microsoft Press Deutschland, Konrad-Zuse-Str. 1, 85716 Unterschleißheim Copyright © 2008 by Microsoft Press Deutschland Das in diesem Buch enthaltene Programmmaterial ist mit keiner Verpflichtung oder Garantie irgendeiner Art verbunden. Autor, Übersetzer und der Verlag übernehmen folglich keine Verantwortung und werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der Benutzung dieses Programmmaterials oder Teilen davon entsteht. Die in diesem Buch erwähnten Software- und Hardwarebezeichnungen sind in den meisten Fällen auch eingetragene Marken und unterliegen als solche den gesetzlichen Bestimmungen. Der Verlag richtet sich im Wesentlichen nach den Schreibweisen der Hersteller. Das Werk, einschließlich aller Teile, ist urheberrechtlich geschützt. Jede Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne Zustimmung des Verlags unzulässig und strafbar. Das gilt insbesondere für Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 10 09 08 ISBN 978-3-86645-209-1 © Microsoft Press Deutschland (ein Unternehmensbereich der Microsoft Deutschland GmbH) Konrad-Zuse-Str. 1, D-85716 Unterschleißheim Alle Rechte vorbehalten Umschlaggestaltung: Hommer Design GmbH, Haar (www.HommerDesign.com) Fachlektorat, Layout und Satz: Rainer G. Haselier, Haselier IT Services Aachen/Amsterdam Korrektorat: Frauke Wilkens, München Gesamtherstellung: Kösel, Krugzell (www.KoeselBuch.de) Datei: xvba00b.doc, Seite3 5. April 2008 Inhaltsübersicht Teil I Erste Schritte 01 02 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Vorbereitungen und Einstellungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 21 Teil II VBA-Grundlagen 03 04 05 06 07 08 09 10 11 Den Makrorekorder verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Entwicklungsumgebung kennenlernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . Theoretische Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Objekthierarchie von Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tabellenobjekte per VBA steuern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Strukturiertes Programmieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fehler finden und beheben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eigene Funktionen programmieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ereignisprozeduren verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 49 67 91 103 129 161 179 199 Teil III Sichtbare Objekte verwenden 12 13 14 15 Grafische Objekte fernsteuern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Diagramme steuern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Pivot-Tabellen steuern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Einfache Formulare erstellen (UserForms) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 225 239 249 Teil IV Trickkiste 16 17 18 Hyperlinks und E-Mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenarbeit mit Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Trickkiste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 283 299 3 Inhaltsübersicht 4 Datei: xvba00c.doc, Seite5 5. April 2008 Inhaltsverzeichnis Teil I Erste Schritte 1 Einleitung. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1 1.2 15 Vorwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Zielgruppe dieses Buches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Welche Vorkenntnisse Sie mitbringen müssen . . . . . . . . . . . . . . . . . . . . . . . . . Nehmen Sie sich Zeit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Der Umgang mit diesem Buch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Der Aufbau des Buches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Symbole in diesem Buch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Website und die Beispieldateien zu diesem Buch . . . . . . . . . . . . . . . . . . . . . Unterstützung für dieses Buch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 16 16 16 17 17 18 19 20 2 Vorbereitungen und Einstellungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 1.3 2.1 2.2 2.3 2.4 Erforderliche Installationen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Einblenden der Entwicklertools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Sicherheitseinstellungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alle Makros ohne Benachrichtigung deaktivieren . . . . . . . . . . . . . . . . . . . . . . . Alle Makros mit Benachrichtigung deaktivieren . . . . . . . . . . . . . . . . . . . . . . . . Alle Makros außer digital signierten deaktivieren . . . . . . . . . . . . . . . . . . . . . . . Alle Makros aktivieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21 21 22 23 24 24 28 28 Teil II VBA-Grundlagen 3 Den Makrorekorder verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.1 3.2 Ein paar Worte zu VBA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Den Makrorekorder verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Was ist ein Makrorekorder? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Makro aufzeichnen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Makro ausführen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Es gibt kein Zurück . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine Tastenkombination nachträglich anpassen . . . . . . . . . . . . . . . . . . . . . . . . 29 29 29 30 30 32 33 33 5 Inhaltsverzeichnis Ein Makro löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die persönliche Makroarbeitsmappe (PERSONAL.XLSB) . . . . . . . . . . . . . . . . . Relative und absolute Aufzeichnung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Den aufgezeichneten Makro-Code analysieren . . . . . . . . . . . . . . . . . . . . . . . . . Wie setzt sich der Code zusammen? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Den Makrocode bereinigen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Schnellstart für Makros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine Formularschaltfläche einfügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine Formularschaltfläche umbenennen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ActiveX-Befehlsschaltflächen verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Makro in die Symbolleiste für den Schnellzugriff aufnehmen . . . . . . . . . . . Übungen zu diesem Kapitel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 34 36 37 38 39 40 40 42 42 44 46 47 4 Die Entwicklungsumgebung kennenlernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 3.3 3.4 3.5 3.6 3.7 4.1 Die Entwicklungsumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Der Projekt-Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Das Eigenschaftenfenster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Das Codefenster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Einstellungen in der Entwicklungsumgebung . . . . . . . . . . . . . . . . . . . . . . . . . . Elemente des Editors ein- oder ausblenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formate des Editors ändern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Elemente anordnen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Elemente verankern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Elemente platzieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Wie man sich Hilfe holt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Visual Basic-Hilfe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Intelligente Erkennung (IntelliSense) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Module und Modultypen kennenlernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Welche Modultypen gibt es? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Modul einfügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Modul umbenennen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Modul exportieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Modul importieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Modul löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Übungen zu diesem Kapitel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49 50 51 52 53 53 55 55 56 56 56 57 58 59 59 61 61 63 64 64 65 65 5 Theoretische Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 4.2 4.3 4.4 4.5 4.6 4.7 5.1 5.2 6 Namenskonventionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Code kommentieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Kommentare im Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lange Kommentare umbrechen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Lange Codezeilen umbrechen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67 68 68 68 69 Datei: xvba00c.doc, Seite7 5. April 2008 Inhaltsverzeichnis 5.3 Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die unterschiedlichen Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Der Datentyp Variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Datentypen konvertieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Datentypen prüfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Präfixe für Datentypen verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Variablen und Konstanten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Was sind Variablen? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Variablen korrekt deklarieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mehrere Variablen in einer Zeile deklarieren . . . . . . . . . . . . . . . . . . . . . . . . . . . Variablendeklaration erzwingen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Statische Variablen (Static) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Öffentliche Variablen (Public) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Variablen versus Konstanten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Einfache Ausgabedialogfelder verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein einfaches Meldungsfeld (MsgBox) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Meldungsfelder mit Zeilenumbrüchen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Meldungsfelder mit Tabulatoren und Anführungszeichen . . . . . . . . . . . . . . . . . Verschiedene Schaltflächen im Meldungsfeld verwenden . . . . . . . . . . . . . . . . . . Symbole im Meldungsfeld einblenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eingabedialogfelder erzeugen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine Application.InputBox verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Integrierte Dialogfelder aufrufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Übungen zu diesem Kapitel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69 69 71 71 73 74 74 74 75 75 76 78 78 79 79 80 81 81 82 85 86 87 88 89 90 6 Die Objekthierarchie von Excel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 6.1 Hierarchisches Denken lernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Mit Methoden Aktionen auslösen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Methoden für Arbeitsmappen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Methoden für Tabellenblätter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Methoden für Bereiche und Zellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.3 Mit Eigenschaften Objekte verändern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Der Applikation einen Namen zuweisen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Den Namen der aktiven Mappe ermitteln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Tabellenblatt umbenennen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Farbige Zellen und Bereiche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4 Objekte referenzieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.5 Der Objektkatalog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.6 Übungen zu diesem Kapitel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.7 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91 93 93 94 95 96 96 97 97 98 99 100 102 102 5.4 5.5 5.6 5.7 5.8 5.9 7 Inhaltsverzeichnis Teil III Praktisches Arbeiten 7 Tabellenobjekte per VBA steuern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7.1 7.2 7.3 7.4 7.5 7.6 8 Auf Zellen korrekt zugreifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zellen ohne Selektion verändern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zellenbezug oder Index (Range oder Cells) . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arbeiten mit Offset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zellen einfügen (Insert) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zellen löschen (Delete) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Inhalt von Zelle löschen (Clear) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Wert in Zelle löschen (ClearContents) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zellenformate löschen (ClearFormats) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zellen verschieben (Cut) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zellen kopieren (Copy) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nur Werte oder nur Formate kopieren (PasteSpecial) . . . . . . . . . . . . . . . . . . . . Arbeiten mit Kommentaren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Kommentar einfügen (AddComment) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Kommentar entfernen (ClearComments) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Kommentar mit Benutzername (Application.UserName) . . . . . . . . . . . . . . . . . . Kommentar um Datum und Uhrzeit erweitern . . . . . . . . . . . . . . . . . . . . . . . . . Den AutoFilter verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Den AutoFilter aktivieren und deaktivieren . . . . . . . . . . . . . . . . . . . . . . . . . . . AutoFilter-Kriterien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bereiche fernsteuern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Der Unterschied zwischen Selektieren und Aktivieren . . . . . . . . . . . . . . . . . . . Benannte Bereiche erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Benannte Bereiche markieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Benannte Bereiche berechnen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Benannte Bereiche löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Nur benutzten Bereich ansprechen (UsedRange) . . . . . . . . . . . . . . . . . . . . . . . . Rund um die aktive Zelle (CurrentRegion) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arbeiten mit Zeilen und Spalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Auf Zeilen oder Spalten zugreifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zeilen oder Spalten einfügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zeilen oder Spalten löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zeilen oder Spalten kopieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zeilen oder Spalten ein- und ausblenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Höhe von Zeilen oder Breite von Spalten festlegen . . . . . . . . . . . . . . . . . . . . . . Automatische Anpassung der Höhe oder Breite (AutoFit) . . . . . . . . . . . . . . . . . Objekte kombinieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die letzte belegte Zelle einer Zeile oder Spalte finden . . . . . . . . . . . . . . . . . . . . Die erste leere Zelle einer Spalte finden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103 103 103 104 104 105 106 106 107 107 107 107 107 108 108 109 109 109 110 110 111 112 112 113 114 114 114 114 115 116 116 117 117 117 117 118 118 118 118 120 Datei: xvba00c.doc, Seite9 5. April 2008 Inhaltsverzeichnis 7.7 Tabellenblätter und andere Blattarten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sheets oder Worksheets? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zellen eines bestimmten Tabellenblattes ändern . . . . . . . . . . . . . . . . . . . . . . . . Ein Tabellenblatt einfügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Tabellenblatt verschieben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Tabellenblatt kopieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Tabellenblatt löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Tabellenblatt schützen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Blattschutz mit Kennwort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Drucken (Blatt oder Bereich) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Übungen zu diesem Kapitel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 122 123 123 124 124 124 125 126 126 127 127 8 Strukturiertes Programmieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 7.8 7.9 8.1 8.2 8.3 8.4 8.5 8.6 Entscheidungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . If … Then … Else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . If … Then … ElseIf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . If … Then . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Verschachtelte Entscheidungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Entscheidung mit logischen Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Tabellenfunktion WENN (Iif) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Select Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Schleifentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . For … Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine For … Next-Scheife schrittweise durchlaufen . . . . . . . . . . . . . . . . . . . . . . . Eine For … Next-Scheife rückwärts durchlaufen . . . . . . . . . . . . . . . . . . . . . . . . Die For … Next-Schleife vorzeitig verlassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . For … Next-Schleifen verschachteln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine Farbpalette erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mit For Each Tabellenblätter durchlaufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Mit For Each Zellen durchlaufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . While … Wend . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Do While … Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Do Until … Loop . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassungen mit With . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Der Einsatz von With . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Arrays und Datenfelder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eindimensionale Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zweidimensionale Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . LBound und UBound . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dynamische Arrays (ReDim) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dynamische Arrays (Preserve) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dynamisches Array mit Werten aus der Tabelle . . . . . . . . . . . . . . . . . . . . . . . . Übungen zu diesem Kapitel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129 130 130 131 132 132 133 134 134 135 136 137 138 139 140 142 142 143 144 145 145 146 147 147 149 151 153 154 155 158 159 9 Inhaltsverzeichnis 9 Fehler finden und beheben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9.1 Die Testfenster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Der Direktbereich . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Das Direktfenster loslösen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Das Direktfenster – Eingaben ohne Rückgabewerte . . . . . . . . . . . . . . . . . . . . . . Das Direktfenster – Variablen abfragen (Debug.Print) . . . . . . . . . . . . . . . . . . . . Das Lokal-Fenster und Haltepunkte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Das Überwachungsfenster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Debuggen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Debuggen im Einzelschritt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Debuggen im Prozedurschritt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Debuggen bis zur Cursorposition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Fehlertoleranzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . On Error Resume Next . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . On Error GoTo 0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . On Error GoTo Sprungmarke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Übungen zu diesem Kapitel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 161 163 164 165 166 168 170 172 172 173 174 174 176 176 177 177 10 Eigene Funktionen programmieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 10.1 Funktionen verstehen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine einfache Funktion erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Funktion verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Wo befindet sich die Funktion? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Kategorie wechseln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine benutzerdefinierte Kategorie erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.2 Erweiterte Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine Funktion ohne Argumente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine Funktion mit mehreren Argumenten . . . . . . . . . . . . . . . . . . . . . . . . . . . . Unbekannte Anzahl an Argumenten (Parameter-Array) . . . . . . . . . . . . . . . . . . Bereichsfunktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Neuberechnungen (Application.Volatile) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.3 Funktionen für Prozeduren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.4 Nützliche Helfer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine Rabattstaffel erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine Auswahl treffen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Prüfen, ob eine Zelle eine Formel enthält . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ermitteln, aus welcher Zelle die Funktion aufgerufen wird . . . . . . . . . . . . . . . . Farbige Zellen zählen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.5 Übungen zu diesem Kapitel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179 180 182 182 184 185 186 186 187 188 190 190 191 192 192 193 194 194 195 196 197 9.2 9.3 9.4 9.5 10 161 Datei: xvba00c.doc, Seite11 5. April 2008 Inhaltsverzeichnis 11 Ereignisprozeduren verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 11.1 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine Ereignisprozedur erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Mappenereignisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.3 Tabellenereignisse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Target . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Intersect . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ereignisse deaktivieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.4 Steuerelemente (ActiveX) – Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Standardsteuerelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Steuerelement einfügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Steuerelement umbenennen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Steuerelemente formatieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.5 Steuerelemente in der Praxis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Einem Steuerelementereignis einen VBA-Code zuordnen . . . . . . . . . . . . . . . . . 11.6 Übungen zu diesem Kapitel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.7 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199 200 202 202 203 204 206 206 207 208 208 209 211 212 212 213 Teil IV Sichtbare Objekte verwenden 12 Grafische Objekte fernsteuern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 12.1 Eine Grafik einfügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.2 Eine Grafik korrekt ansprechen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.3 Formatierungsmöglichkeiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Formate übertragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Höhe und Breite einer Grafik verändern . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine Grafik an einem Bereich ausrichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.4 Grafiken löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alle Grafiken eines Tabellenblattes löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alle Grafiken einer Mappe löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.5 Übungen zu diesem Kapitel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 217 218 220 220 220 221 222 222 223 223 13 Diagramme steuern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 13.1 Diagrammgrundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Das Diagramm-Objektmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Welche Diagrammtypen gibt es? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.2 Ein Diagramm per VBA erzeugen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.3 Auf Diagramme korrekt zugreifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Auf ein eingebettetes Diagramm zugreifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . Auf ein Diagrammblatt zugreifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 225 226 228 229 229 230 11 Inhaltsverzeichnis 12 13.4 Diagramme ausdrucken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein eingebettetes Diagramm ausdrucken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Diagrammblatt ausdrucken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.5 Diagramme- und Zeichnungsfläche formatieren . . . . . . . . . . . . . . . . . . . . . . . . Die Diagrammfläche formatieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Zeichnungsfläche formatieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.6 Diagrammtitel und Legende . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Diagrammtitel einblenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Legende ein- oder ausblenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Legende platzieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.7 Datenreihen von Diagrammen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine neue Farbe für eine der Datenreihen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Alle Datenreihen neu einfärben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.8 Einzelne Datenpunkte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Einen Datenpunkt neu einfärben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Jeden Datenpunkt einzeln einfärben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.9 Übungen zu diesem Kapitel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13.10 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 231 231 231 232 232 233 233 234 234 235 235 236 236 237 237 238 238 14 Pivot-Tabellen steuern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 14.1 PivotTable-Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Hierarchie von PivotTables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.2 Eine PivotTable per VBA erzeugen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.3 Eine PivotTable aktualisieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.4 PivotTable löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.5 PivotTable-Elemente modellieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PivotTable-Felder vertauschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PivotTable-Elemente formatieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.6 Übungen zu diesem Kapitel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14.7 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239 239 240 244 244 244 245 245 246 247 15 Einfache Formulare erstellen (UserForms) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 15.1 UserForm-Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Was ist eine UserForm? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine UserForm einfügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine UserForm umbenennen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Die Werkzeugsammlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.2 Einstellungen von UserForms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Größe, Farbe und Schrift der UserForm verändern . . . . . . . . . . . . . . . . . . . . . . Das Gitterraster einstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.3 Einstellungen von Elementen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Elemente automatisch ausrichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Elemente automatisch in der Größe verändern . . . . . . . . . . . . . . . . . . . . . . . . . Die Aktivierreihenfolge festlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249 249 249 250 251 252 253 253 254 254 255 256 Datei: xvba00c.doc, Seite13 5. April 2008 Inhaltsverzeichnis 15.4 Eine einfache UserForm erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Bezeichnungsfelder und Textfelder einfügen . . . . . . . . . . . . . . . . . . . . . . . . . . . Textfelder mit Zeilenumbruch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Schaltflächen einfügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.5 Daten von UserForm an Tabelle übergeben . . . . . . . . . . . . . . . . . . . . . . . . . . . . Daten aus der UserForm an die Tabelle übergeben . . . . . . . . . . . . . . . . . . . . . . Daten zeilenweise ins Tabellenblatt schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . Die UserForm aus dem Tabellenblatt heraus aufrufen . . . . . . . . . . . . . . . . . . . . 15.6 Rahmen, Optionsfelder und Kontrollkästchen . . . . . . . . . . . . . . . . . . . . . . . . . . Optionsfelder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Rahmen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Kontrollkästchen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.7 Übungen zu diesem Kapitel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15.8 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257 257 259 260 262 262 263 264 264 264 265 267 268 269 Teil V Wissenswertes 16 Hyperlinks und E-Mail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 16.1 Hyperlinks erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Interne und externe Hyperlinks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Schaltfläche mit Hyperlink . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hyperlinks ersetzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Hyperlinks entfernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . E-Mail-Adressen einfügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . E-Mail-Adressen entfernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.2 E-Mails versenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine E-Mail versenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine E-Mail mit Anhang versenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.3 Übungen zu diesem Kapitel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271 271 273 274 274 275 277 277 278 279 281 282 17 Zusammenarbeit mit Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283 17.1 Zusammenarbeit mit dem Windows-Explorer . . . . . . . . . . . . . . . . . . . . . . . . . . Windows-Befehle ohne FSO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.2 Verzeichnisse verwalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Aktuelles Verzeichnis abfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Prüfen, ob ein Verzeichnis existiert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Das Verzeichnis wechseln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Verzeichnis relativ wechseln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Verzeichnis anlegen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Verzeichnis löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Verzeichnis verschieben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ein Verzeichnis kopieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Systeminformationen zu einer Datei auslesen . . . . . . . . . . . . . . . . . . . . . . . . . . 283 284 285 285 286 287 288 290 290 290 291 291 13 Inhaltsverzeichnis 17.3 Dateien verwalten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ermitteln, ob eine Datei existiert . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dateien löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Sämtliche Dateien eines Verzeichnisses löschen . . . . . . . . . . . . . . . . . . . . . . . . Dateien umbenennen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Dateien verschieben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Eine Datei kopieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.4 Übungen zu diesem Kapitel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17.5 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293 293 293 294 294 295 296 296 297 18 Die Trickkiste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 18.1 18.2 18.3 18.4 14 Verknüpfungen durch Werte ersetzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Tabellenübergreifende Suche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Datumssuche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 299 301 304 307 Stichwortverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309 Datei: xvba07.doc, Seite103 5. April 2008 Kapitel 7 Tabellenobjekte per VBA steuern ■ die wichtigsten Grundlagen der sauberen VBA-Programmierung ■ wie korrekt auf Objekte zugegriffen werden kann ■ wie Zellkommentare automatisiert werden ■ auf welche Weise man den AutoFilter aktivieren kann ■ benannte Bereiche fernzusteuern ■ wie Codefragmente kombiniert werden können 7.1 Auf Zellen korrekt zugreifen Dieser Abschnitt zeigt, wie korrekt auf Zellen zugegriffen wird. Des Weiteren behandeln wir das Einfügen, Entfernen, Verschieben und Kopieren von Zellen. Zudem lernen Sie den Umgang mit dem AutoFilter, Kommentaren sowie benannten Bereichen via VBA kennen. Sie erfahren, wie Zeilen und Spalten manipuliert werden können, und lernen die Objekte zu kombinieren. Zu guter Letzt wenden wir uns dem Objekt Tabellenblatt zu. Zellen ohne Selektion verändern Wenn Sie mit dem Makrorekorder Ihre Arbeitsschritte aufzeichnen und dann den VBA-Code betrachten, treffen Sie sehr oft auf die Methoden Select oder Activate. Diese dienen dazu, Objekte zu markieren. Den Unterschied zwischen Select und Activate lernen Sie im Anschluss im Detail kennen. Beide Methoden genießen unter VBA-Programmierern einen schlechten Ruf, denn die Relikte des Makrorekorders bremsen die Geschwindigkeit von Prozeduren enorm ab. Besonders wenn es sich um umfangreiche Programme handelt. In fast allen Fällen können Sie auf Select oder Activate verzichten. In der Regel markieren Sie eine Zelle, damit Sie sie mit einem Wert befüllen können oder um sie zu formatieren. Manuell ist das in Excel durchaus erforderlich, wie die folgende Auflistung zeigt. ■ Sie klicken die Zelle G5 an. ■ Sie geben einen Wert ein. ■ Sie drücken die (¢)-Taste und gelangen damit zur Zelle G6. 103 III – Praktisches Arbeiten In diesem Kapitel lernen Sie Datei: xvba07.doc, Seite104 5. April 2008 Kapitel 7 Tabellenobjekte per VBA steuern Wenn Sie diese Schritte mit dem Makro-Rekorder aufzeichnen, entsteht folgender VBA-Code: Sub ZelleSelektieren() Range("G5").Select ActiveCell.FormulaR1C1 = "Richtig einsteigen" Range("G6").Select End Sub In VBA reicht jedoch eine einzige Codezeile aus, um eine Zelle mit einem Wert zu befüllen. Ein Select ist dabei komplett überflüssig. Der folgende Code demonstriert dies: Sub ZelleKorrektSelektieren() Range("G7").Value = "Richtig einsteigen" End Sub Da es sich bei dem Text, den wir der Zelle übergeben, nicht um eine Formel handelt, ersetzen wir FormulaR1C1 durch Value. Dies ist nicht unbedingt erforderlich, macht aber Sinn, denn hinter FormulaR1C1 wird nun mal eine Formel erwartet. Die Standardeigenschaft von Range ist Value. Das bedeutet, dass im Grunde genommen auch auf die Verwendung von Value verzichtet werden kann: Range("G7") = "Richtig einsteigen" Zellenbezug oder Index (Range oder Cells) Bis jetzt haben wir immer mit dem Objekt Range gearbeitet. Damit kann Bezug auf eine bestimmte Zelle genommen werden. Sie können alternativ auch das Cells verwenden. Ihm folgt ein Paar runde Klammern. Innerhalb der Klammern werden zwei Koordinaten angegeben. Bei der ersten Zahl handelt es sich um den Zeilenindex und bei der zweiten um den Spaltenindex. Um Zelle G9 einen Wert zuzuweisen, verwenden Sie folgenden VBA-Code: Sub CellsVerwenden() Cells(9, 7).Value = "Richtig einsteigen" End Sub Die Anweisung Cells(9, 7) bedeutet somit, dass die Zelle, die den Wert erhalten soll, sich in der neunten Zeile und der siebten Spalte (Spalte G) befindet. Das Ganze ist etwas gewöhnungsbedürftig, denn die Angaben im runden Klammernpaar scheinen verdreht zu sein. Der Grund hierfür ist, dass Sie an Bezüge wie G7 gewöhnt sind. Bei G7 ist die erste Angabe der Bezug auf die Spalte, also G. Erst die zweite Angabe, die 9, gibt die Zeile an. Arbeiten mit Offset Die Eigenschaft Offset wird verwendet, um von einer bestimmten Position aus eine Zelle anzusprechen. Offset agiert nach einem ähnlichen Prinzip wie Cells. Der Eigenschaft folgt ebenfalls ein Paar runde Klammern, in denen die Koordinaten angegeben werden. Mit der ersten Zahl legen Sie fest, wie viele Zeilen ab der aktuellen Position nach unten (positive Zahl) oder oben (negative Zahl) »gesprungen« werden sollen. Es ist somit wiederum ein Zeilenbezug. Mit der zweiten Zahl legen Sie fest, wie viele Spal- 104 Datei: xvba07.doc, Seite105 5. April 2008 7.1 Auf Zellen korrekt zugreifen ten ab der aktuellen Position nach links (negative Zahl) oder rechts (positive Zahl) »gesprungen« werden soll. Dies ist der Spaltenbezug. Nehmen wir an, Sie befinden sich in Zelle G9. Die Zelle G9 ist somit die ActiveCell, also die aktive Zelle. Sie möchten nun von hier aus der Zelle I9 den Text »Richtig« und der Zelle F6 den Text »einsteigen« zuweisen. Sub OffsetVerwenden() ' Sie befinden sich in der Zelle G9 ActiveCell.Offset(0, 2).Value = "Richtig" ' Zelle I9 ActiveCell.Offset(-3, -1).Value = "einsteigen" ' Zelle F6 End Sub Hinweis: Fehler vermeiden Wenn Sie sich beim Ausführen des Codes beispielsweise in Zelle A1 befinden, wird ein Fehler erzeugt. Dies liegt daran, dass ActiveCell.Offset(-3, -1).Value = "einsteigen" versucht, nach oben und links zu gelangen. Dies ist aber ab der Zelle A1 nicht möglich. Sie können bei der Verwendung von Offset auch das Range-Objekt verwenden und dabei die Startzelle angeben: III – Praktisches Arbeiten Sub OffsetVerwenden() Range("G9").Offset(0, 2).Value = "Richtig" Range("G9").Offset(-3, -1).Value = "einsteigen" End Sub Zellen einfügen (Insert) Wenn Sie manuell eine Zelle in einen Tabellenbereich einfügen, benutzen Sie beispielsweise das Zellenkontextmenü und wählen daraus den Befehl Zellen einfügen. Dabei wird das gleichnamige Dialogfeld geöffnet. Abbildung 7.1: Das Dialogfeld Zellen einfügen Es stehen Ihnen vier Optionsfelder zur Verfügung. Um eine Zelle einzufügen, können Sie wählen, ob die aktive Zelle nach rechts oder nach unten verschoben werden soll. In VBA wird dazu die Methode Insert verwendet. Ihr folgt die Excel-Konstante xlShiftToRight oder xlShiftDown. 105 Datei: xvba07.doc, Seite106 5. April 2008 Kapitel 7 Tabellenobjekte per VBA steuern Sub ZellenEinfuegen() ' Zellen nach rechts verschieben Range("B10").Insert xlShiftToRight ' Zellen nach unten verschieben Range("B10").Insert xlShiftDown End Sub Sie können auch oberhalb der aktiven Zelle eine ganze Zeile (EntireRow) oder links von ihr eine ganze Spalte (EntireColumn) einfügen. Sub ZeileSpalteEinfuegen() ' Ganze Zeile einfügen Range("B10").EntireRow.Insert ' Ganze Spalte einfügen Range("B10").EntireColumn.Insert End Sub Zellen löschen (Delete) Sehr ähnlich wie beim Einfügen verhält es sich beim Löschen. Sie müssen dabei lediglich die Methode Insert durch die Methode Delete austauschen. Die Konstanten, die dazu verwendet werden können, lauten xlShiftToLeft und xlShiftToUp. Sub ZellenLoeschen() ' Zellen nach oben verschieben Range("B10").Delete xlShiftUp ' Zellen nach links verschieben Range("B10").Delete xlShiftToLeft End Sub Um ganze Zeilen oder Spalten zu löschen, gehen Sie wie folgt vor: Sub ZeileSpalteLoeschen() ' Ganze Zeile einfügen Range("B10").EntireRow.Delete ' Ganze Spalte einfügen Range("B10").EntireColumn.Delete End Sub Inhalt von Zelle löschen (Clear) Wenn Sie Zellen löschen, bedingt dies immer, dass nebenstehende Zellen verschoben werden. Nicht immer ist dies erwünscht. Sie können deshalb auch lediglich den Inhalt einer Zelle entfernen. Verwenden Sie dazu die Methode Clear. Sie entfernt Formate, Inhalte und Kommentare. Sub ZellinhaltLoeschen() Range("B9").Clear End Sub 106 Datei: xvba07.doc, Seite107 5. April 2008 7.1 Auf Zellen korrekt zugreifen Wert in Zelle löschen (ClearContents) Wenn Sie nur die Werte einer Zelle entfernen möchten, die Formatierungen und Kommentare jedoch erhalten bleiben sollen, verwenden Sie die Methode ClearContents. Sub NurWerteLoeschen() Range("B10").ClearContents End Sub Zellenformate löschen (ClearFormats) Wenn Sie die Werte und Kommentare eine Zelle beibehalten möchten und nur die Formatierungen entfernen wollen, benutzen Sie die Methode ClearFormats. Sub NurFormateLoeschen() Range("B11").ClearFormats End Sub Wenn Sie eine Zelle mit ihrem Inhalt an eine andere Stelle verschieben möchten, verwenden Sie die Methode Cut. Nach Cut folgt der Wert Destination sowie die Angabe der Zielzelle. Sub ZelleVerschieben() Range("B9").Cut Destination:=Range("E9") End Sub Zellen kopieren (Copy) Das Kopieren einer Zelle ist dem Verschieben sehr ähnlich. Es muss lediglich die Methode Cut durch Copy ausgetauscht werden: Sub ZelleKopieren() Range("B10").Copy Destination:=Range("E10") End Sub Nur Werte oder nur Formate kopieren (PasteSpecial) Mittels der Methode PasteSpecial können Sie festlegen, ob nur Formate, Formeln, Kommentare usw. kopiert werden sollen. Im folgenden Beispiel wird gezeigt, wie nur Werte kopiert werden. Dazu wird die Excel-Konstante xlPasteValues verwendet. Die Codezeile wird. Application.CutCopyMode = False bewirkt, dass der Kopiermodus (Laufrahmen) deaktiviert Sub NurInhaltKopieren() Range("B11").Copy Range("E11").PasteSpecial xlPasteValues Application.CutCopyMode = False End Sub 107 III – Praktisches Arbeiten Zellen verschieben (Cut) Datei: xvba07.doc, Seite108 5. April 2008 Kapitel 7 Tabellenobjekte per VBA steuern Mittels der Methode PasteSpecial können noch weitere Aktionen ausgeführt werden; die wichtigsten finden Sie in der nachfolgenden Tabelle. Tabelle 7.1: Excel-Konstanten für die Methode PasteSpecial Excel-Konstante Bedeutung xlPasteAll Standardeinstellung, es wird alles kopiert xlPasteAllExceptBorders alles außer Rahmenlinien xlPasteColumnWidths Spaltenbreite kopieren xlPasteComments Kommentare kopieren xlPasteFormats Formate kopieren xlPasteFormulas Formeln kopieren xlPasteFormulasAndNumberFormats Formeln und Zahlenformate kopieren xlPasteValidation Gültigkeit kopieren xlPasteValues Werte kopieren xlPasteValuesAndNumberFormats Werte und Zahlenformate kopieren 7.2 Arbeiten mit Kommentaren Kommentare sind eine Standardfunktionalität in Excel. Wir wollen deshalb nur kurz auf dieses Thema eingehen, indem wir mit den wichtigsten Objekten, Eigenschaften und Methoden arbeiten. Kommentar einfügen (AddComment) Sie können per VBA sehr einfach einen Kommentar in eine Zelle einfügen. Verwenden Sie dazu die Methode AddComment gefolgt vom Text, der in dem Kommentarfeld angezeigt werden soll. Sub KommentarEinfuegen() Range("B5").AddComment "Mein Kommentar in der Zelle ""B5""" End Sub Abbildung 7.2: Der eingefügt Kommentar 108 Datei: xvba07.doc, Seite109 5. April 2008 7.2 Arbeiten mit Kommentaren Kommentar entfernen (ClearComments) Bei dem vorangegangenen Code werden Sie eine Fehlermeldung erhalten, wenn Sie versuchen, den Code ein zweites Mal auszuführen. Dies liegt daran, dass Sie versuchen, in eine Zelle, in der schon ein Kommentar vorhanden ist, einen weiteren Kommentar einzufügen. Sie können das Problem elegant lösen, indem Sie zuerst aus den betreffenden Zellen die Kommentare entfernen. Verwenden Sie dazu die Methode ClearComments: Sub KommentarEntfernenEinfuegen() Range("B5").ClearComments Range("B5").AddComment "Mein Kommentar in der Zelle ""B5""" End Sub Kommentar mit Benutzername (Application.UserName) Wenn Sie dem Kommentar noch den Benutzernamen voranstellen möchten, verwenden Sie die Anweisung Application.UserName: III – Praktisches Arbeiten Sub KommentarMitName() Range("B6").ClearComments Range("B6").AddComment Application.UserName & Chr(10) & _ "Mein Kommentar" End Sub Abbildung 7.3: Benutzernamen hinzufügen Hinweis: Woher stammt der Name? Der Name, den Application.UserName ausgibt, stammt aus dem Dialogfeld Excel-Optionen, Kategorie Häufig verwendet, Feld Benutzername. (Dieses Dialogfeld öffnen Sie, indem Sie die Schaltfläche Office und dann die Schaltfläche Excel-Optionen anklicken.) Wenn beim Ausführen des Codes kein Name eingefügt wird, liegt es daran, dass das Feld Benutzername in den Optionen leer ist. Kommentar um Datum und Uhrzeit erweitern Sie können sogar noch einen Schritt weitergehen und das aktuelle Datum und die Uhrzeit mitliefern. Verwenden Sie dazu die Funktion Now. 109 Datei: xvba07.doc, Seite110 5. April 2008 Kapitel 7 Tabellenobjekte per VBA steuern Sub KommentarMitDatum() Range("B7").ClearComments Range("B7").AddComment Application.UserName & Chr(10) & _ Now & Chr(10) & _ "Mein Kommentar" End Sub Tipp: Das Datum formatieren Wenn das Datum anders formatiert ausgegeben werden soll, verwenden Sie zusätzlich die Funktion Format. In den runden Klammern nach Now folgen ein Komma sowie die Formatierungsanweisungen für das Datum: Format(Now, "dd/ mmm yy hh:mm") & Chr(10) & _ VBA basiert auf dem amerikanischen Format. Das muss bei Datumsformatierungen beachtet werden: ■ d = Day (Tag) ■ m = month (Monat) ■ y = year (Jahr) ■ h = hour (Stunde) ■ m = minute (Minute) ■ / = Erzeugt einen Punkt 7.3 Den AutoFilter verwenden Mit dem AutoFilter können Sie Daten ein- oder ausblenden. Bestimmt kennen Sie diese beliebte ExcelFunktion bereits. Doch wie kann man den AutoFilter per VBA steuern? Den AutoFilter aktivieren und deaktivieren Mittels der Methode AutoFilter können Sie den AutoFilter sowohl aktivieren als auch deaktivieren. Wenn beim Ausführen der Prozedur der AutoFilter noch nicht vorhanden ist, wird er eingeblendet. Wenn der VBA-Code erneut ausgeführt wird, wird er ausgeblendet. Sub AutoFilterEinAus() Range("A1").AutoFilter End Sub 110 Datei: xvba07.doc, Seite111 5. April 2008 7.3 Den AutoFilter verwenden AutoFilter-Kriterien Sie können den AutoFilter so programmieren, dass er gleich ein gefiltertes Ergebnis liefert. ■ Dazu können Sie ein oder zwei Kriterien (Criteria1 und Criteria2) verwenden. ■ Sie müssen zudem angeben, welches AutoFilter-Feld (Field) benutzt werden soll. In unserem Beispiel ist es das Feld 3, somit die Zelle C1. ■ Wenn Sie mit zwei Kriterien arbeiten, müssen Sie die Excel-Konstante Diese entsprechen den Operatoren Oder bzw. Und. xlOr oder xlAnd verwenden. Sub AutoFilterKriterien() Range("A1").AutoFilter Field:=3, _ Criteria1:="=Solothurn", _ Operator:=xlOr, _ Criteria2:="=Zürich" End Sub 111 III – Praktisches Arbeiten Abbildung 7.4: Der eingeblendete AutoFilter Datei: xvba07.doc, Seite112 5. April 2008 Kapitel 7 Tabellenobjekte per VBA steuern Abbildung 7.5: Gefilterte Daten 7.4 Bereiche fernsteuern In diesem Abschnitt lernen Sie den Unterschied zwischen Activate und Select kennen und erfahren, wie per VBA benannte Bereiche erzeugt werden können. Der Unterschied zwischen Selektieren und Aktivieren Eine Zelle kann aktiviert oder selektiert werden. Beide Male geschieht anscheinend dasselbe. Sub Aktivieren() Range("A1:C5").Activate End Sub Sub Selektieren() Range("A1:C5").Select End Sub Wenn Sie nun fragen, wo denn der Unterschied liegt, ist die Frage durchaus berechtigt. Wenn man etwas selektiert, heißt das noch lange nicht, dass es auch aktiv ist. Am besten lässt sich dies an einem kleinen Beispiel demonstrieren. In der folgenden Prozedur wird der Bereich A1:C5 selektiert. Innerhalb der Selektion wird die Zelle B3 aktiviert. Sub SelektierenUndAktivieren() Range("A1:C5").Select Range("B3").Activate End Sub 112 Datei: xvba07.doc, Seite113 5. April 2008 7.4 Bereiche fernsteuern Nach dem Ausführen des Codes ist der Bereich A1:C5 selektiert und die Zelle B3 aktiviert. In Excel können Sie immer nur eine Zelle auf einmal bearbeiten, deshalb kann auch immer nur eine Zelle aktiviert sein. Benannte Bereiche erstellen Wenn Sie einen benannten Bereich mittels VBA erstellen möchten, verwenden Sie die Eigenschaft Names in Kombination mit der Methode Add. Danach geben Sie das Argument Name an. Dieses steht für den Namen, dem Sie dem Bereich zuweisen möchten. Des Weiteren müssen Sie angeben, auf welchen Bereich Bezug genommen werden soll. Dies geschieht mit dem Argument RefersTo. In unserem Beispiel wird dem Bereich, den wir benennen, eine gelbe Hintergrundfarbe zugewiesen. Um das Ansprechen des Bereichs, den wir zweimal verwenden müssen, zu verkürzen, werden wir ihn referenzieren (Set). Sub BereichBenennen() Dim rng As Range Set rng = Range("A1:B5") ActiveWorkbook.Names.Add _ Name:="RichtigEinsteigen", _ RefersTo:=rng rng.Interior.Color = vbYellow End Sub 113 III – Praktisches Arbeiten Abbildung 7.6: Selektierter Bereich mit aktiver Zelle Datei: xvba07.doc, Seite114 5. April 2008 Kapitel 7 Tabellenobjekte per VBA steuern Benannte Bereiche markieren Um auf einen benannten Bereich zuzugreifen oder um diesen zu selektieren, können Sie das Objekt Range benutzen. Anstatt in den runden Klammern einen Zellbezug einzugeben, so wie Sie es gewohnt sind, können Sie den Namen verwenden: Sub BenanntenBereichMarkieren() Range("RichtigEinsteigen").Select End Sub Benannte Bereiche berechnen Wenn Sie den benannten Bereich summieren möchten, verwenden Sie die Eigenschaft von der Formel. Diese wird in Anführungszeichen geschrieben. Formula gefolgt Sub BenanntenBereichBerechnen() Range("A6").Formula = "=SUM(RichtigEinsteigen)" End Sub Benannte Bereiche löschen Um den benannten Bereich zu löschen, verwenden Sie erneut die Eigenschaft Names. Ihr folgen der Name des Bereichs, den Sie löschen möchten, sowie die Methode Delete. In unserem Beispiel entfernen wir zudem die zuvor verliehene Farbe: Sub BenanntenBereichLoeschen() Range("RichtigEinsteigen").Interior.ColorIndex = xlNone ActiveWorkbook.Names("RichtigEinsteigen").Delete End Sub Nur benutzten Bereich ansprechen (UsedRange) Mittels der Eigenschaft UsedRange können Sie auf den benutzten Bereich einer Tabelle zugreifen. Dabei werden sämtliche Zellen berücksichtigt, die einen Wert enthalten. Nicht beachtet bleiben Objekte wie Grafiken, Schaltflächen usw., die ebenfalls auf dem Tabellenblatt zu finden sind. Das folgende Beispiel zeigt, wie der benutzte Bereich mit einer roten Hintergrundfarbe belegt werden kann: Sub BenutztenBereichEinfaerben() ActiveSheet.UsedRange.Interior.Color = vbRed End Sub 114 Datei: xvba07.doc, Seite115 5. April 2008 7.4 Bereiche fernsteuern Rund um die aktive Zelle (CurrentRegion) Wenn Sie nur auf den Bereich rund um eine bestimmte Zelle zugreifen wollen, verwenden Sie die Eigenschaft CurrentRegion. Der folgende Code zeigt, wie der Bereich rund um die Zelle B5 grün hinterlegt wird: Sub CurrentRegionEinfaerben() Range("B5").CurrentRegion.Interior.Color = vbGreen End Sub Abbildung 7.8: Grün eingefärbte Region 115 III – Praktisches Arbeiten Abbildung 7.7: Rot eingefärbter Bereich Datei: xvba07.doc, Seite116 5. April 2008 Kapitel 7 Tabellenobjekte per VBA steuern 7.5 Arbeiten mit Zeilen und Spalten In diesem Abschnitt lernen Sie alles rund um den Gebrauch von Zeilen und Spalten. Auf Zeilen oder Spalten zugreifen Um auf Zeilen zuzugreifen, verwenden Sie das Objekt Rows. Das Objekt für Spalten lautet können bei beiden Objekten sowohl mit dem Index als auch mit dem Namen arbeiten. Columns. Sie Wenn Sie den Namen verwenden, setzen Sie diesen in Anführungszeichen. Da die Zeilenüberschriften Zahlen sind, werden diese, genau wie Namen, in Anführungszeichen geschrieben. Sub ZeileSelektieren() Rows(4).Select Rows("4").Select End Sub Sub SpalteSelektieren() Columns(4).Select Columns("D").Select End Sub Wenn Sie gleichzeitig auf mehrere Zeilen oder Spalten zugreifen möchten, können Sie den Index nicht benutzen, sondern müssen den Namen verwenden. Rows("7:9").Select Columns("C:E").Select Sie können auch Zeilen und Spalten gleichzeitig markieren. Hierzu ist dann allerdings das Range-Objekt erforderlich. Sub ZeilenUndSpalten() Range("C:E,3:5").Select End Sub Abbildung 7.9: Selektierte Zeilen und Spalten 116 Datei: xvba07.doc, Seite117 5. April 2008 7.5 Arbeiten mit Zeilen und Spalten Zeilen oder Spalten einfügen Um eine Zeile oder eine Spalte in Ihr Tabellenblatt einzufügen, verwenden Sie die Methode Insert. Sub ZeileEinfuegen() Rows(8).Insert End Sub Sub SpalteEinfuegen() Columns(4).Insert End Sub Zeilen oder Spalten löschen Die Methode Delete ist das Pendant zur Methode Insert. Sie veranlasst, dass Zeilen oder Spalten gelöscht werden. Sub SpalteLoeschen() Columns(4).Delete End Sub Zeilen oder Spalten kopieren Um eine Zeile oder eine Spalte zu kopieren, verwenden Sie die Methode Copy gefolgt von der Destination, also dem Ziel. So kopieren Sie den Inhalt der Zeile 8 und fügen ihn in Zeile 14 ein: Sub ZeileKopieren() Rows(8).Copy Destination:=Rows(14) End Sub So kopieren Sie den Inhalt der Spalte 4 und fügen ihn in Spalte 7 ein: Sub SpalteKopieren() Columns(4).Copy Destination:=Columns(7) End Sub Zeilen oder Spalten ein- und ausblenden Wenn Sie Zeilen ausblenden möchten, verwenden Sie die Eigenschaft Hidden gefolgt vom booleschen Wert True. Um die Zeilen wieder einzublenden, ändern Sie lediglich den booleschen Wert von True auf False ab. Die beiden nachfolgenden Beispiele blenden gleich mehrere Zeilen bzw. Spalten aus. Sub ZeilenAusblenden() Rows("7:9").Hidden = True End Sub 117 III – Praktisches Arbeiten Sub ZeileLoeschen() Rows(8).Delete End Sub Datei: xvba07.doc, Seite118 5. April 2008 Kapitel 7 Tabellenobjekte per VBA steuern Sub SpaltenAusblenden() Columns("C:E").Hidden = True End Sub Höhe von Zeilen oder Breite von Spalten festlegen Um die Höhe einer Zeile festzulegen, verwenden Sie die Eigenschaft RowHeight gefolgt von der Angabe in Punkt; Sie können den Wert für die Zeilenhöhe bzw. Spaltenbreite nicht in Millimetern und Zentimetern angeben. Sub ZeilenHoehe() Rows("7:9").RowHeight = 30 End Sub Wenn Sie die Breite einer Spalte verändern möchten, benutzen Sie die Eigenschaft ColumnWidth. Sub SpaltenBreite() Columns("C:E").ColumnWidth = 15 End Sub Automatische Anpassung der Höhe oder Breite (AutoFit) Wenn Sie in Excel eine Spalte automatisch an den längsten Eintrag anpassen wollen, doppelklicken Sie auf die Trennlinie zwischen den Spaltenüberschriften. Diesen Effekt können Sie auch mittels VBA herbeiführen. Die Methode dazu lautet AutoFit. Sie kann sowohl für Spalten als auch für Zeilen verwendet werden. Sub AutomatischeAnpassung() Rows("7:9").AutoFit Columns("C:E").AutoFit End Sub 7.6 Objekte kombinieren Mit den Zellen-, Zeilen- und Spaltenobjekten sind Sie ja nun vertraut. Sie wissen zudem, dass Objekte kombiniert werden können. Bei einigen Konstellationen ist das allerdings nicht ganz einfach und somit eine richtige Herausforderung. Die letzte belegte Zelle einer Zeile oder Spalte finden Wenn Sie die letzte belegte Zelle einer Spalte finden möchten, verwenden Sie das Objekt Cells. Zur Erinnerung: Bei diesem Objekt wird in den runden Klammern immer an erster Stelle der Zeilenindex und an zweiter Stelle der Spaltenindex eingetragen. Um die letzte Zelle zu finden, geben wir als Zeilenindex die letzte Zelle überhaupt an. Hierfür zählen Sie entweder alle Zeilen (Rows.Count) oder tragen direkt den Wert 65536 ein. Damit wären wir also bei der letzten Zeile einer Spalte angelangt. 118 Datei: xvba07.doc, Seite119 5. April 2008 7.6 Objekte kombinieren Nun müssen wir uns noch nach oben bewegen. Dies geschieht mittels der Eigenschaft End. Innerhalb der runden Klammern dieser Eigenschaft muss die Richtung angegeben werden. Dazu benutzen wir die xlDirection-Konstante xlUp. Weitere xlDirection-Konstanten sind: xlDown, xlToRight und xlToLeft. III – Praktisches Arbeiten Sub LetzteBelegteZelleSpalte() Cells(Rows.Count, 1).End(xlUp) _ .Interior.Color = vbRed Cells(65536, 2).End(xlUp) _ .Interior.Color = vbBlue End Sub Abbildung 7.10: Die jeweils letzte belegte Zelle in Spalte A und B wurden eingefärbt Wenn Sie die letzte belegte Zelle einer Zeile finden möchten, verwenden Sie ein ähnliches Prinzip. Diesmal müssen wir im Objekt Cells die Anzahl an Spalten übergeben. Sie können auch hier wahlweise die Spalten zählen oder gleich die maximale Spaltenanzahl eintragen. In den runden Klammer der Eigenschaft End verwenden wir die xlDirection-Konstante bewegen wir uns von der letzten Spalte nach links zurück, bis ein Eintrag gefunden wird. xlToLeft. Damit Sub LetzteBelegteZelleZeile() Cells(1, Columns.Count).End(xlToLeft). _ Interior.Color = vbGreen Cells(2, 256).End(xlToLeft). _ Interior.Color = vbYellow End Sub 119 Datei: xvba07.doc, Seite120 5. April 2008 Kapitel 7 Tabellenobjekte per VBA steuern Abbildung 7.11: In den Zeilen 1 und 2 wurde die letzte befüllte Zelle eingefärbt Die erste leere Zelle einer Spalte finden Nachdem Sie wissen, wie die letzte belegte Zelle gefunden werden kann, gehen wir einen Schritt weiter. In der Regel sucht man ja die erste leere Zelle, damit dort ein Eintrag ergänzt werden kann. Um dies umzusetzen, muss der vorangegangene Code lediglich um das Objekt Offset erweitert werden. Damit wird eine Zeile nach unten oder rechts gesprungen: Sub ErsteFreieZelleSpalte() Cells(Rows.Count, 1).End(xlUp).Offset(1, 0). _ Interior.Color = vbRed Cells(65536, 2).End(xlUp).Offset(1, 0). _ Interior.Color = vbBlue End Sub 120 Datei: xvba07.doc, Seite121 5. April 2008 7.6 Objekte kombinieren III – Praktisches Arbeiten Abbildung 7.12: In den Spalten A und B wurde jeweils die erste leere Zelle eingefärbt Sub ErsteFreieZelleZeile() Cells(1, Columns.Count).End(xlToLeft).Offset(0, 1). _ Interior.Color = vbGreen Cells(2, 256).End(xlToLeft).Offset(0, 1). _ Interior.Color = vbYellow End Sub Abbildung 7.13: In den Zeilen 1 und 2 wurde jeweils die erste leere Zelle eingefärbt 121 Datei: xvba07.doc, Seite122 5. April 2008 Kapitel 7 Tabellenobjekte per VBA steuern 7.7 Tabellenblätter und andere Blattarten In diesem Abschnitt lernen Sie den Unterschied zwischen Sheet und Worksheet kennen. Sie lernen zudem die wichtigsten Grundlagen rund um die Verwendung von Tabellenblättern mittels VBA. Sheets oder Worksheets? Wenn Sie mit dem Makrorekorder Aufzeichnungen vornehmen, treffen Sie oft auf das Objekt anstelle von Worksheets. Sie mögen sich bereits gefragt haben, worin der Unterschied besteht. Sheets Wenn Sie in Excel mit der rechten Maustaste auf die Blattregister klicken und aus dem Kontextmenü den Befehl Einfügen wählen, öffnet sich das gleichnamige Dialogfeld. Dieses präsentiert bereits die Antwort. Abbildung 7.14: Die verschiedenen Blattarten Auf der Registerkarte Allgemein stehen insgesamt fünf Tabellenblattarten zur Verfügung. Die meisten sind Überbleibsel aus der Version Excel 95. Sie dienten damals, als VBA noch in Deutsch verfügbar war, zur Unterstützung in der Programmierung. Heute, mit den modernen Mitteln, werden sie kaum noch gebraucht. Einzig das Tabellen- und das Diagrammblatt sind noch aktuell und werden es auch bleiben. Bei den angegebenen Blättern handelt es sich um unterschiedliche Blattarten. Nur das Tabellenblatt kann mittels des Objekts Worksheets angesprochen werden. Die anderen Blätter sind lediglich Sheets. Um es anders auszudrücken: auf sämtliche Blätter, einschließlich des Tabellenblatts, können Sie über das Objekt Sheets zugreifen. Programmierer bevorzugen die Trennung von Worksheets und Sheets, weil daraus hervorgeht, wann ein Tabellenblatt und wann eine andere Blattart angesprochen wird. 122 Datei: xvba07.doc, Seite123 5. April 2008 7.7 Tabellenblätter und andere Blattarten Ein Tabellenblatt können Sie somit über Sheets oder Worksheets erreichen. Sub Tabellenblatt2Aktivieren() Worksheets("Tabelle2").Activate End Sub Wenn Sie versuchen, auf ein Diagrammblatt über Worksheets zuzugreifen, würde dies fehlschlagen. Bei Diagrammblättern ist nur das Objekt Sheets zugelassen: Sub DiagrammblattAktivieren() Sheets("Diagramm1").Activate End Sub Zellen eines bestimmten Tabellenblattes ändern Bis jetzt haben Sie lediglich gelernt, wie Sie die Zellen des aktiven Tabellenblattes ändern können. Dabei haben wir einfach das Objekt Range verwendet. Wenn Sie jedoch direkt die Zellen eines anderen Tabellenblattes ändern möchten, ohne diese vorher zu selektieren, dann kombinieren Sie die Objekte Worksheets und Range. Sub ZellenFarbeDesBlatts2Aendern() Worksheets(2).Range("B6:C10").Interior.Color = vbYellow End Sub Ein Tabellenblatt einfügen Mittels der Methode Add können Sie ein neues Tabellenblatt in Ihre Mappe einfügen. Ohne Argumente wird das neue Tabellenblatt vor dem aktiven Tabellenblatt eingefügt. Worksheets.Add Mittels des Arguments Before können Sie festlegen, vor welchem bestehenden Tabellenblatt das neue eingefügt werden soll. Die folgende Codezeile fügt das neue Tabellenblatt vor dem ersten Tabellenblatt ein: Worksheets.Add Before:=Worksheets(1) Mit dem Argument After können Sie veranlassen, dass das neue Tabellenblatt hinter einem bestehenden eingefügt. wird. Die nächste Beispielzeile zeigt, wie ein neues Tabellenblatt hinter dem letzten vorhandenen Tabellenblatt eingefügt wird: Worksheets.Add After:=Worksheets(Worksheets.Count) Sie können auch gleich mehrere Tabellenblätter einfügen. Verwenden Sie dazu zusätzlich das Argument Count. Worksheets.Add After:=Worksheets(Worksheets.Count), Count:=3 123 III – Praktisches Arbeiten Sie können auf das Tabellenblatt über seinen Index oder seinen Namen zugreifen: Datei: xvba07.doc, Seite124 5. April 2008 Kapitel 7 Tabellenobjekte per VBA steuern Hinweis: Alle Blattarten berücksichtigen Bedenken Sie, dass mit dem Objekt Worksheets nur Tabellenblätter berücksichtigt werden. Falls auch Diagrammblätter in Ihrer Arbeitsmappe vorhanden sind, müssen Sie unter Umständen mit dem Objekt Sheets arbeiten. Ein Tabellenblatt verschieben Das Verschieben eines Tabellenblatts ist dem Einfügen sehr ähnlich. Verwenden Sie dazu die Methode Move, sowie das der Argument Before oder das Argument After. Die folgende Prozedur zeigt, wie das Tabellenblatt mit dem Namen Tabelle3 an die letzte Stelle innerhalb der Arbeitsmappe verschoben wird. Sub TabellenblattVerschieben() Worksheets("Tabelle3").Move After:=Sheets(Sheets.Count) End Sub Ein Tabellenblatt kopieren Wenn Sie ein bestehendes Tabellenblatt kopieren möchten, verwenden Sie die Methode Copy. Auch hier können Sie wieder die Argumente Before und After einsetzen. Das folgende Beispiel kopiert das Tabellenblatt mit dem Namen Tabelle1. Das neue Tabellenblatt wird an letzter Stelle in der Arbeitsmappe eingefügt. Durch das Kopieren ist das neue Tabellenblatt das aktive. Diesem geben wir gleich einen neuen Namen: Sub TabellenblattKopieren() Worksheets("Tabelle1").Copy After:=Sheets(Sheets.Count) ActiveSheet.Name = "MeinNeuesTabellenblatt" End Sub Ein Tabellenblatt löschen Um ein Tabellenblatt oder einen anderen Blatttyp aus der Arbeitsmappe zu entfernen, verwenden Sie die Methode Delete. Sub TabellenblattLoeschen() Sheets(Sheets.Count).Delete End Sub Sobald die Löschanweisung erfolgt ist, fragt Excel, ob das Arbeitsblatt wirklich gelöscht werden soll. Abbildung 7.15: Sicherheitsabfrage beim Versuch, Tabellenblätter zu löschen 124 Datei: xvba07.doc, Seite125 5. April 2008 7.7 Tabellenblätter und andere Blattarten Sie können diese Abfrage unterdrücken, indem Sie vor der Löschanweisung die Anweisung Applicatigefolgt vom booleschen Wert False, einfügen. Beachten Sie, dass die Eigenschaft DisplayAlerts direkt dem Application-Objekt zugewiesen wird. Sie befinden sich somit auf der höchsten Hierarchiestufe von Excel. Sämtliche Eingabeaufforderungen und Warnmeldungen der Applikation werden damit dauerhaft ausgeschaltet. Es ist daher dringend zu empfehlen, die Meldung am Ende der Prozedur wieder zu aktivieren, indem ihr der boolesche Wert True zugewiesen wird. on.DisplayAlerts, Sub TabellenblattLoeschenOhneRueckfrage() Application.DisplayAlerts = False Sheets(Sheets.Count).Delete Application.DisplayAlerts = True End Sub Ein Tabellenblatt schützen Sub BlattSchuetzen() Worksheets(1).Protect MsgBox "Das Tabellenblatt ist nun geschützt." End Sub Sobald Sie die obige Prozedur ausgeführt haben, können am Tabellenblatt so lange keine Änderungen mehr vorgenommen werden, bis der Blattschutz wieder aufgehoben wurde. Beim Versuch, einen Wert in eine Zelle einzutragen, erscheint die folgende Warnmeldung: Abbildung 7.16: Der Blattschutz ist aktiv, Zellen können nicht verändert werden Wenn Sie Zellen zur Bearbeitung freigeben möchten, müssen Sie deren Sperre aufheben, noch bevor Sie den Blattschutz aktivieren. 1. Markieren Sie die Zellen, in denen eine Eingabe möglich sein soll. 2. Klicken Sie in der Multifunktionsleiste auf der Registerkarte Start in der Gruppe Zahl auf das Startprogramm für ein Dialogfeld. Das Dialogfeld Zellen formatieren wird geöffnet. 3. Wechseln Sie zur Registerkarte Schutz. 4. Deaktivieren Sie das Kontrollkästchen Gesperrt. 5. Schließen Sie das Dialogfeld, indem Sie auf OK klicken. 125 III – Praktisches Arbeiten Wenn Sie ein Tabellenblatt per VBA mit einem Blattschutz versehen möchten, dann verwenden Sie die Methode Protect. Der nachfolgende Code tut dies und zeigt zudem ein Meldungsfeld an, das darüber informiert, dass das Blatt nun geschützt ist. Datei: xvba07.doc, Seite126 5. April 2008 Kapitel 7 Tabellenobjekte per VBA steuern Wenn Sie den Blattschutz aufheben möchten, verwenden Sie die Unprotect-Methode. Sub BlattschutzAufheben() Worksheets(1).Unprotect MsgBox "Der Blattschutz wurde aufgehoben." End Sub Blattschutz mit Kennwort Wenn Sie einen Blattschutz mit Kennwort vornehmen möchten, benutzen Sie zusätzlich zur Methode Protect das Argument Password: Sub BlattSchuetzenPasswort() Worksheets(1).Protect Password:="RichtigEinsteigen" End Sub Sollte nun ein Benutzer des Tabellenblattes versuchen, den Blattschutz manuell aufzuheben, wird er aufgefordert, das Kennwort einzugeben. Abbildung 7.17: Der Blattschutz kann nur durch die Eingabe des Kennworts aufgehoben werden Gehen Sie wie folgt vor, um den kennwortgeschützten Blattschutz per VBA aufzuheben: Sub PasswortSchutzAufheben() Worksheets(1).Unprotect Password:="RichtigEinsteigen" End Sub Drucken (Blatt oder Bereich) Um ein Tabellenblatt auszudrucken verwenden Sie die Methode PrintOut. Sie können die Anzahl der Kopien, die gedruckt werden sollen, gleich mit angeben. Verwenden Sie dazu das Argument Copies. Sub TabellenblattZweimalAusdrucken() Worksheets(1).PrintOut Copies:=2 End Sub Falls Sie nur einen bestimmten Bereich des Tabellenblattes ausdrucken möchten, verwenden Sie anstelle des Objekts Worksheets das Objekt Range: Sub NurBereichAusdrucken() Range("C4:E6").PrintOut Copies:=1 End Sub 126 Datei: xvba07.doc, Seite127 5. April 2008 7.9 Zusammenfassung 7.8 Übungen zu diesem Kapitel In diesem Abschnitt finden Sie einige Übungen zu diesem Kapitel. Die richtigen Antworten und Lösungen finden Sie wie immer auf der Website www.richtig-einseigen.de. Übung 7.1 Fügen Sie per VBA in die Zelle C5 den Text »Excel-VBA« ein, ohne die Zelle zuvor zu selektieren. Hinweis: Dies lässt sich mit nur einer einzigen Codezeile ausführen. Übung 7.2 Geben Sie manuell in Zelle D8 einen Wert ein und nehmen Sie einige Formatierungen vor. Löschen Sie dann per VBA die Zellenformate von D8. Der darin enthaltene Wert soll erhalten bleiben. Fügen Sie per VBA in die Zelle B3 einen Kommentar ein. Der Kommentar soll den Text »Richtig einsteigen« anzeigen. Übung 7.4 Weisen Sie den Zeilen 3 bis 5 eine gelbe Hintergrundfarbe zu. Hinweis: Dies ist mit nur einer Codezeile möglich. 7.9 Zusammenfassung Dieses Kapitel war ein ziemlicher Brocken. Umso besser ist es, wenn wir an dieser Stelle einen kleinen Zwischenstopp einlegen und rekapitulieren, was es alles zu verdauen gibt. ■ Zu Beginn des Kapitels haben wir uns vorwiegend mit Zellen befasst. Sie können nun auf saubere Weise und ohne Performanceverluste auf Zellen zugreifen. Sie wissen, wie Zellen eingefügt und wieder gelöscht werden können. Sie können Zellinhalte löschen, verschieben oder kopieren. ■ Ein weiteres Thema waren die Zellkommentare. Sie sind jetzt in der Lage, Kommentare in Ihrem Tabellenblatt einzufügen und bei Bedarf wieder zu entfernen. Sie können sogar den Inhalt eines Kommentars per VBA erstellen. ■ Dann haben wir einen kurzen Ausflug in die Thematik des AutoFilters unternommen. Sie können den AutoFilter nun per VBA aktivieren bzw. die Filterpfeile ein- oder ausblenden. ■ Sie haben gelernt, was Bereiche, Zeilen und Spalten sind und wie diese in VBA gehandhabt werden. Sie können nun Bereiche erstellen, markieren, berechnen und löschen. 127 III – Praktisches Arbeiten Übung 7.3 Datei: xvba07.doc, Seite128 5. April 2008 Kapitel 7 Tabellenobjekte per VBA steuern ■ Nachdem zuerst der Zugriff auf einzelne Objekte beschrieben wurde, haben Sie anschließend gelernt, wie diese miteinander kombiniert werden können. Dieses Wissen ist unerlässlich für eine erfolgreiche Programmierung mit Excel-VBA. ■ Am Ende des Kapitels haben Sie alles zum Thema Tabellenblätter erfahren. Sie kennen nun auch den Unterschied zwischen Worksheets und Sheets. 128 Datei: xvba99.doc, Seite309 5. April 2008 Stichwortverzeichnis *.bas 64 *.bmp 215 *.cls 64 *.exe 29 *.frm 64 *.gif 215 *.jpg 215 *.png 215 ?subject 276 A Absolut 36 Activate 103 ActiveCell 105 ActiveX 206 ActiveX-Befehlsschaltfläche Backcolor 43 Eigenschaften 43 einfügen 42 Font 44 FontColor 44 Add 113, 123 AddComment 108 Address 142, 194 After 123 Aktivierreihenfolge 256 Anchor 272 And 132 Anführungszeichen 81 Anzeige 252 Application 92 Application.Goto 302 Application.InputBox 87 Application.Volatile 190 Apply 220 Arrays 147 dynamisch 153 eindimensional 147 zweidimensional 149 Attachments 279 Aufzeichnung 31 Ausgabedialog 79 Ausgeblichen 219, 227 Auswahl 193 AutoFilter 110 Kriterien 111 AutoFit 118 B BackColor 209 Basic for Applications 29 Befehlsschaltfläche 42 Before 123 BeforeSave 202, 203 Benannte Bereiche 113 berechnen 114 löschen 114 markieren 114 Benutzer Bereich 114 Benutzername 109 Bereiche 112 aktivieren 112 selektieren 112 Bereichsfunktionen 190 Bildlaufleiste 207, 252 Blattschutz 126 bln 74, 83, 84, 85 Boolean 73 Brightness 219 byt 74, 83, 84, 85 C Call 43 Caller 194 Caption 97, 251 Case Is 134 CBool 71 CByte 71 CCur 71 CDate 71 CDbl 71 CDec 71 Cells 92, 95, 104 Characters 92 ChartArea 232 ChartObject 226 ChartType 228 ChDir 287 ChDrive 287 Choose 193 CInt 71 Clear 106, 206 ClearComments 109 ClearContents 107 ¶ 309 Stichwortverzeichnis ClearFormats 107 CLng 71 cls 62 Code kommentieren 68 umbrechen 69 Codefenster 52 Color 98 ColorType 219 Column(s) 92 Columns 116 ColumnWidth 118 Comments 92 Const 79 Contrast 219 Copies 126 Copy 107, 117, 124 CopyFile 296 CopyFolder 291 Count 123 CreateItem 278 Criteria1 111 Criteria2 111 CSng 71 cur 74 CurDir 287 Currency 70 CurrentRegion 115 Cut 107 CutCopyMode 107 CVar 71 D Dateien auf Existenz prüfen 293 kopieren 296 löschen 293 umbenennen 294 verschieben 295 verwalten 293 Dateiinformationen 291, 292 Datenfelder 147 Datenpunkte 236 Datenreihen 235 Datentyp 69 konvertieren 71 Präfix 74 prüfen 73 Unterschiede 69 Variant 71 Datumssuche 304 dbl 74 Debug.Print 165 310 Debuggen 170 Cursor-Position 173 im Einzelschritt 172 Prozedurschritt 172 dec 74 Decimal 70 Deklaration 75 Delete 106, 114, 117, 124 Destination 107, 117 Diagramm ausdrucken 231 Datenpunkte 236 Datenreihen 235 eingebettet 228 formatieren 231 Grundlagen 225 korrekt ansprechen 229 Legende 233 Objekt-Model 225 Diagrammblatt 230 Diagrammfläche 231 Diagrammhaupttypen 227 Diagrammname 230 Diagrammtitel 233 Diagrammtypen 226 Dialogfeld, interne 88 Diese Arbeitsmappe 35 Digitales Zertifikat 24 Dim 75 Dimensionierung 69 Dir 216, 286, 293 Direktbereich 161 Direktfenster 161 DisplayAlerts 125 Do Until … Loop 145 Do While … Loop 144 Double 70 Drucken 126 dtm 74 Dynamische Arrays 153 E Editor 53 Elemente ein-/ausblenden 53 Formate 55 Eigenschaften 96 Eigenschaftenfenster 43, 51 Registerkarten 52 Eindimensionale Arrays 147 Einzelschritt 172 Einzug 54 Elemente platzieren 56 verankern 56 Datei: xvba99.doc, Seite311 5. April 2008 Stichwortverzeichnis ElseIf 130 E-Mail Anhang 279 Attachments 279 versenden 278 E-Mail-Adressen einfügen 275 entfernen 277 EnableEvents 206 End Sub 39 EnterKeyBehavior 259 EntireColumn 106 EntireRow 106 Entscheidungen 129 Verschachtelt 132 Entwicklertools 21 Entwicklungsumgebung 37, 49, 53 Elemente anordnen 55 Elemente ein-/ausblenden 53 Ereignis deaktivieren 206 Ereignisprozedur zusammenstellen 200 Ereignisprozeduren, Grundlagen 199 Erkennung 58 Erste freie Zelle 120 Excel-Objekte 92 Excel-Optionen 21 Exit Do 144 Exit For 138 F Falsch 73 Farbpalette 140 Fehlertoleranzen 174 Field 111 File System Object 283 FileCopy 296 Find 302, 304 FindFormat 305 FindNext 302 FollowHyperlink 273 For … Next 135 For Each 142 Formate kopieren 107 Formula 114, 180 FormulaLocal 180 FormulaR1C1 104, 180 Formularmodul 60 Formularschaltfläche Bearbeitungsmodus 41 einfügen 40 Entwurfsmodus 41 Modus-Typen 41 umbenennen 42 frm 62 FSO 283 Function 179, 180 Funktion erstellen 180 für Prozedur 191 Kategorie wechseln 184 mehrere Argumente 187 ohne Argumente 186 unbestimmte Anzahl Argumente 188 verwenden 182 G Gitterraster 253 GoTo 174 Grafik an Bereich ausrichten 220 einfügen 215 Formate übertragen 220 Formatierungsmöglichkeiten 218 Höhe und Breite 220 korrekt ansprechen 217 löschen 221 H Haltepunkte 166 HasFormula 194 HasLegend 234 HasTitle 233 Height 220 Helligkeit 219 Hex 73 Hidden 117 Hierarchie 91 Hilfe 56 Hyperlink einer Schaltfläche zuweisen 273 entfernen 274 ersetzen 274 extern 271 intern 271 I If … Then 131 If … Then … Else 130 If … Then … ElseIf 130 Iif 133 Index 93, 104 InputBox 87 Insert 105, 117, 215 Installation 21 int 74, 83, 84, 85 Intelligente Erkennung 58 IntelliSense 58 Interior 98 311 Stichwortverzeichnis Internes Dialogfeld 88 Intersect 204 IsArray 73 IsDate 73 IsEmpty 73 IsError 73 IsMissing 73 IsNull 73 IsNumeric 73 IsObject 73 K Kategorie 182 Kategorie wechseln 184 Kill 293 Klassenmodul 60 Kommentar 68, 108 Datum und Zeit 109 einfügen 108 entfernen 109 umbrechen 68 Konstante 74, 79 Kontrast 219 konvertieren 71 L LBound 151 Left 277 Legend 234 Legende 233 Letzte belegte Zelle 118 lng 74 Location 228 Logische Operatoren 132 Lokal-Fenster 166 Long 70 Lower Boundary 151 M mailto 276 Makro Absolut 36 analysieren 37 aufzeichnen 30 Aufzeichnung 31 ausführen 32 Beschreibung 31 Code bereinigen 39 löschen 34 Relativ 36 Makroarbeitsmappe 34 Makroname 31 Makrooptionen 33 312 Makrorekorder 29 Makros aktivieren 28 deaktivieren 23 Mappenereignisse 202 mdl 62 Methoden 93 Arbeitsmappe 93 Bereich 95 Tabellenblatt 94 Zelle 95 MkDir 290 Module 59 einfügen 61 exportieren 63 importieren 64 löschen 64 umbenennen 61 Modultypen 59 Formularmodul 60 Klassenmodul 60 Standardmodul 60 Move 124 MoveFile 295 MoveFolder 290 MsgBox 80 Schaltfläche 82, 85 Symbol 85 Tabulator 81 Zeilenumbruch 81 Multifunktionsleiste 21 MultiLine 259 N Nachrichtendialog 79 Name As 294 Namenfeld 230 Namenskonventionen 67 Names 113, 114 Neuberechnungen 190 Neue Arbeitsmappe 35 NewWindow 273 Nothing 100 Now 109 NumberFormat 305 O Obergrenze 147 obj 74 Objekte 99 Objektkatalog 100 Oct 73 Öffentliche Variable 78 Office-Schaltfläche 21 Datei: xvba99.doc, Seite313 5. April 2008 Stichwortverzeichnis Offset 104, 120 On Error 174 On Error GoTo 0 176 On Error GoTo Sprungmarke 176 On Error Resume Next 174 Option Base 1 149 Option Explicit 77 Optionen 53 Optionsfeld 252 Or 132 Orientation 242 P Parameter-Array 188 Password 126 PasteSpecial 107 Path 215, 285 PERSONAL.XLSB 34 löschen 35 Persönliche Makroarbeitsmappe 34 Pfad auf Existenz prüfen 286 PickUp 220 PictureFormat 219 Pictures 215 PivotFields 242 PivotTable aktualisieren 244 Elemente formatieren 244 Grundlagen 239 Hierarchie 239 löschen 244 PlotArea 232 Points 237 Präfix 74 Preserve 154 PrintOut 126, 231 Projekt-Explorer 37, 50 Protect 125 Prozeduransicht 53 Prozedurschritt 172 Public 78 Q QuickInfo 276 R Rabattstaffel 192 Range 92, 95, 104 ReDim 153 referenzieren 99 RefersTo 113 Refresh 244 Rekursion 206 Relativ 36 Relative Verzeichnisse 288 RmDir 290 Row(s) 92 RowHeight 118 Rows 116 Rückwärtsschleife 137 S Schaltfläche 82, 85 Schaltfläche mit Hyperlink 273 Schleifen Do Until ... Loop 145 Do While ... Loop 144 For ... Next 135 For Each 142 rückwärts 137 schrittweise 136 verschachteln 139 vorzeitig verlassen 138 While ... Wend 143 Schleifentypen 134 Schnellzugriff (Symbolleiste), Makro aufnehmen 44 Schwarzweiß 219, 221, 227 ScreenTip 272, 276 ScrollBar 252 Select 103 Select Case 134 SeriesCollection 235 Set 99 Set = Nothing 100 SetSourceData 228 Shapes 217 Sheets 122, 230 ShowModal 263 sht 62 Sicherheitseinstellungen 22 Sicherheitswarnung 27 Single 70 sng 74 Source 228 Spalten 116 ein- / ausblenden 117 einfügen 117 kopieren 117 löschen 117 Spaltenbreite 118 Speicherort für Makros 34 Sprungmarke 176 Standardmodul 60 Standardsteuerelemente 207 Static 78 Statische Variable 78 Step 136 313 Stichwortverzeichnis Steuerelement Code hinterlegen 212 einfügen 208 formatieren 209 umbenennen 208 Steuerelemente 206 stf 74 str 74 Str 72 String 70 SubAddress 272 Symbol 85 Symbole 18 Systeminformationen 291 T Tabellenblatt einfügen 123 kopieren 124 löschen 124 schützen 125 verschieben 124 Tabellenereignisse 202 Tabledestination 242 TableRange1 244 TableRange2 244 Tabulator 81 Target 203 Tastenkombination 33 Testfenster 161 Textfeld 252 TextToDisplay 272 ThisWorkbook.Path 215 U Überwachungsfenster 168 UBound 151 Umwandlung Datentyp 71 Unload Me 267 Unprotect 126 Untergrenze 147 Upper Boundary 151 URL 272 UsedRange 114 UserForm Aktivierreihenfolge 256 aufrufen 264 Bezeichnungsfelder 257 Daten an Tabelle 262 einfügen 249 Einstellungen 252 Elemente ausrichten 254 erstellen 257 Formatierungen 252 314 UserForm (Fortsetzung) Gitterraster 253 Grundlagen 249 Kontrollkästchen 267 Optionsfelder 264 Rahmen 265 Schaltflächen 260 Textfelder 257 Textfelder mit Zeilenumbruch 259 umbenennen 250 Werkzeugsammlung 251 UserName 109 V Value 104 var 74 Var 72 Variable 74 abfragen 165 deklarieren 75 öffentlich 78 statisch 78 Variablendeklaration 54 erzwingen 76 Variant 70, 71 VBA 16, 29 VBA-Editor 37 vbCritical 85 vbDirectory 286 VBE 37, 49 verankern 56 Verzeichnisse abfragen 285 anlegen 290 auf Existenz prüfen 286 kopieren 291 löschen 290 relativ 288 verschieben 290 verwalten 285 wechseln 287 Verzweigungen Siehe Entscheidungen Virengefahr 28 Visual Basic for Applications 16 Visual Basic-Editor 49 Visual Basic-Hilfe 57 Vollständige Modulansicht 53 Vorkenntnisse 16 vsb 207 W Wahr 73 Wenn 133 Werkzeugsammlung 251 Datei: xvba99.doc, Seite315 5. April 2008 Stichwortverzeichnis Werte kopieren 107 While … Wend 143 Width 220 Windows-Befehle 284 Windows-Explorer 283 With 145 Workbook(s) 92 Workbooks 93 Worksheet(s) 92 Worksheets 94, 122 X xlAnd 111 xlDown 119 xlOr 111 xlPasteColumnWidths 108, 130, 133, 184, 193, 200, 202, 203, 235, 240, 241, 277, 284, 287, 304 xlPasteValuesAndNumberFormats 108 xlShiftDown 105 xlShiftToRight 105 XLSTART 35 xlToLeft 119 xlToRight 119 xlUp 119 Z Zählschleife 135 Zeichenfläche 231 Zeilen 116 ein- / ausblenden 117 einfügen 117 kopieren 117 löschen 117 Zeilenhöhe 118 Zeilenumbruch 81 Zellen ansprechen 103 einfügen 105 Formate löschen 107 Inhalt löschen 106 kopieren 107 löschen 106 verschieben 107 Werte löschen 107 Zellenbezug 104 Zertifikat 24 Zusammenfassungen 145 Zweidimensionale Arrays 149 315