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

Documents pareils