vba mit excel - readingsample - beck-shop.de · pdf file65 4 kapitel 4 sprachelemente in vba...
TRANSCRIPT
Galileo Computing
VBA mit Excel
Das umfassende Handbuch
Bearbeitet vonBernd Held
1. Auflage 2013. Buch. ca. 918 S.ISBN 978 3 8362 2579 3
Format (B x L): 16 x 24 cm
Weitere Fachgebiete > EDV, Informatik > Programmiersprachen: Methoden >Microsoft Programmierung
schnell und portofrei erhältlich bei
Die Online-Fachbuchhandlung beck-shop.de ist spezialisiert auf Fachbücher, insbesondere Recht, Steuern und Wirtschaft.Im Sortiment finden Sie alle Medien (Bücher, Zeitschriften, CDs, eBooks, etc.) aller Verlage. Ergänzt wird das Programmdurch Services wie Neuerscheinungsdienst oder Zusammenstellungen von Büchern zu Sonderpreisen. Der Shop führt mehr
als 8 Millionen Produkte.
LeseprobeIn diesem Auszug erfahren Sie von Bernd Held alles über die prak-tische Anwendung der VBA-Sprachelemente. Außerdem lernen Sie, wie Sie Diagramme programmieren. Außerdem erhalten Sie das vollständige Inhalts- und Stichwortverzeichnis aus dem Buch.
Bernd Held
VBA mit Excel – Das umfassende Handbuch918 Seiten, 2013, mit DVD, 49,90 € ISBN 978-3-8362-2579-3
www.galileocomputing.de/3426
»Sprachelemente in VBA in der praktischen Anwendung« »Diagramme programmieren«
Inhaltsverzeichnis
Index
Der Autor
Wissen, wie’s geht.
65
4
Kapitel 4
Sprachelemente in VBA in der praktischen Anwendung
Das Wesentliche, was eine Programmiersprache ausmacht, sind ihre
Sprachelemente. In diesem Kapitel erfahren Sie, wie Sie mithilfe von
Abfragen, Schleifen und anderen Anweisungen Ihre Programme flexi-
bel gestalten können.
Die Sprachelemente lassen sich nicht mit dem Makrorekorder aufzeichnen und müs-
sen von Ihnen selbst erstellt werden. Der richtige Einsatz der Sprachelemente macht
letztendlich die Kunst der Programmierung aus.
Sie finden alle Beispiele auf der mitgelieferten CD-ROM in der Datei SPRACHELE-
MENTE.XLS.
4.1 Verzweigungen
Mit Verzweigungen können Sie in Excel bestimmte Zustände abfragen und je nach
Zustand anders reagieren. Dieses Sprachelement kann nicht mit dem Makrorekorder
aufgezeichnet werden und stellt mit das wichtigste Element in der Programmierung
dar. Jede Verzweigung hat eine oder mehrere Bedingungen, dann einen Zweig, der
eintritt, wenn die Bedingung zutrifft, sowie einen Zweig, der abgearbeitet wird, wenn
die Bedingung nicht zutrifft.
Bei den Verzweigungen unterscheidet man zwei Formen:
� Normalform:
IF Bedingung Then Aktion1 Else Aktion2
� Blockform:
If Bedingung ThenAktion1aAktion1bAktion1c
Else
4 Sprachelemente in VBA in der praktischen Anwendung
66
Aktion2aAktion2b
End if
Wird die Blockform verwendet, können mehrere Schritte nacheinander durchge-
führt werden. Beachten Sie aber, dass die Anweisung mit einem End If abgeschlossen
werden muss.
Es folgen nun einige typische Beispiele für den Einsatz von Verzweigungen.
4.1.1 Normale Verzweigungen
Schriftschnitte abfragen
Fragen Sie im nächsten Beispiel nach, ob eine Zelle den Schriftschnitt Fett enthält,
und geben Sie je nach Ergebnis eine Meldung auf dem Bildschirm aus.
Sub SchriftschnittFett()Sheets("Verzweigungen").Activate
If Range("A1").Font.Bold = True ThenMsgBox "Schriftschnitt Fett"
ElseMsgBox "Schriftschnitt nicht Fett"
End If
End Sub
Listing 4.1 Schriftschnitte ermitteln
Selbstverständlich können Sie in der Abfrage auch mehrere Zustände abfragen. Dazu
verwenden Sie zwischen den beiden Abfragen den Operator And, wenn beide Bedin-
gungen erfüllt sein müssen, bzw. den Operator Or, wenn nur eine von beiden Bedin-
gungen erfüllt sein muss. So fragen Sie im nächsten Beispiel aus Listing 4.2 ab, ob eine
Zelle mit dem Schriftschnitt Fett und der Schriftfarbe Rot formatiert ist:
Sub SchriftschnittFettUndFarbeRot()
Sheets("Verzweigungen").Activate
If Range("A1").Font.Bold = True And _Range("A1").Font.ColorIndex = 3 ThenMsgBox "Schriftschnitt Fett und Schriftfarbe Rot"
ElseMsgBox "Schrift nicht Fett oder Schrift nicht rot"
4.1 Verzweigungen
67
4
End If
End Sub
Listing 4.2 Schriftschnitt und Schriftfarbe abfragen
Im zweiten Fall erstellen Sie eine Abfrage, in der die Zelle B1 entweder die Schriftfarbe
Rot oder den Schriftschnitt Kursiv erhalten muss. Sie sehen das Makro für diese
Aufgabe in Listing 4.3:
Sub SchriftschnittKursivOderFarbeRot()
Sheets("Verzweigungen").Activate
If Range("A2").Font.Italic = True Or _Range("A2").Font.ColorIndex = 3 ThenMsgBox "Eine der beiden Bedingungen trifft zu!"
ElseMsgBox "Keine der beiden Bedingungen trifft zu!"
End If
End Sub
Listing 4.3 Schriftschnitt und Schriftfarbe abfragen (Variante 2)
Zellen auf Werte prüfen
Wenn Sie gezielt nach Werten in den Zellen fragen möchten, prüfen Sie vorher, ob die
Zelle einen numerischen Wert aufweist. Dazu setzen Sie die Funktion IsNumeric aus
Listing 4.4 ein.
Sub WerteÜberprüfen()
Sheets("Verzweigungen").ActivateRange("A3").Select
If IsNumeric(ActiveCell.Value) _Then MsgBox "In Zelle " & ActiveCell.Address & _" steht ein numerischer Wert!" _
Else MsgBox "Zelle " & ActiveCell.Address & _" steht ein Textwert!"
End Sub
Listing 4.4 Prüfung von Zellen auf numerischen Inhalt
4 Sprachelemente in VBA in der praktischen Anwendung
68
Tipp
Neben der Funktion IsNumeric gibt es weitere Funktionen, mit denen Sie Ihre Daten
prüfen können. Eine davon ist die Funktion IsDate. Die Funktion IsDate gibt den
Wert True zurück, wenn der Ausdruck ein Datum ist oder in ein gültiges Datum
umgewandelt werden kann. Andernfalls wird der Wert False zurückgegeben. In
Windows liegen gültige Datumswerte im Bereich zwischen dem 1. Januar 100 n. Chr.
und dem 31. Dezember 9999 n. Chr. vor. Auf anderen Betriebssystemen können
andere Bereiche gelten.
Zellen auf Datumswerte prüfen
Im Beispiel aus Listing 4.5 wird der Eintrag in Zelle A4 überprüft:
Sub ZelleAufDatumswertPrüfen()
Sheets("Verzweigungen").ActivateRange("A4").Select
If IsDate(ActiveCell.Value) ThenMsgBox "Gültiges Datum in Zelle " & ActiveCell.Address
ElseMsgBox "Es handelt sich um kein gültiges Datum!"
End If
End Sub
Listing 4.5 Zellen auf Datumswert prüfen
Hin und wieder müssen Sie über ein Makro prüfen, ob eine Zelle bereits einen Wert
enthält. Hierzu setzen Sie die Funktion IsEmpty ein oder geben folgende Zeile ein:
If ActiveCell.Value = "" then
Die elegantere Variante sieht wie folgt aus:
Sub ZelleLeer()
Sheets("Verzweigungen").ActivateRange("A5").Select
If IsEmpty(ActiveCell) ThenMsgBox "Die Zelle " & ActiveCell.Address & " ist leer"
ElseMsgBox "Zelle enthält den Wert: " & ActiveCell.Value
4.1 Verzweigungen
69
4
End If
End Sub
Listing 4.6 Zelle auf Inhalt prüfen
Neben den Funktionen IsEmpty und IsDate gibt es weitere Prüffunktionen, die Sie
Tabelle 4.1 entnehmen können.
4.1.2 Verzweigungen in Blöcke einteilen
Bei den bisherigen Beispielen haben Sie jeweils eine Aktion im Then- bzw. Else-Zweig
ausgeführt. Wenn Sie mehrere Anweisungen innerhalb einer Bedingung ausführen
möchten, dann bietet sich – wie auch bei den letzten Beispielen durchgeführt – die
Blockform an.
Mehrzeiliger Zweig
Im nächsten Beispiel soll auf dem Tabellenblatt Verzweigungen der Name des in
Windows angemeldeten Anwenders ausgelesen werden. Im Fall, dass der richtige
Anwender »vor dem« PC sitzt (hier Held), soll das Wort OK in die Zelle A1 geschrieben
Funktion Beschreibung
IsEmpty Gibt einen Wert vom Typ Boolean zurück, der angibt, ob eine Vari-
able initialisiert wurde.
IsArray Gibt einen Wert vom Typ Boolean zurück, der angibt, ob eine Vari-
able ein Datenfeld ist.
IsDate Gibt einen Wert vom Typ Boolean zurück, der angibt, ob ein Aus-
druck in ein Datum umgewandelt werden kann.
IsError Gibt einen Wert vom Typ Boolean zurück, der angibt, ob ein Aus-
druck ein Fehlerwert ist.
IsNull Gibt einen Wert vom Typ Boolean zurück, der angibt, ob ein Aus-
druck keine gültigen Daten (Null) enthält.
IsNumeric Gibt einen Wert vom Typ Boolean zurück, der angibt, ob ein Aus-
druck als Zahl ausgewertet werden kann.
IsObject Gibt einen Wert vom Typ Boolean zurück, der angibt, ob ein Bezeich-
ner eine Objekt-Variable darstellt.
Tabelle 4.1 Die Prüffunktionen von Excel
4 Sprachelemente in VBA in der praktischen Anwendung
70
werden. Im anderen Fall soll das Wort Falsch in die Zelle A1 und der Name des
Anwenders in die Zelle B1 geschrieben werden.
Sub AnwenderOK()
If Environ("username") = "Held" ThenSheets("Verzweigungen").Range("A1").Value = "OK"
ElseSheets("Verzweigungen").Range("A1").Value = "Falsch"Sheets("Verzweigungen").Range("B1").Value = _Environ("username")
End If
End Sub
Listing 4.7 Anwender auslesen
Mehrere Verzweigungen verschachteln
Selbstverständlich können Sie mehrere Bedingungen ineinander verschachteln. Zur
Verdeutlichung der Funktionsweise soll die Zelle A10 im Tabellenblatt Verzweigun-
gen überwacht werden. Je nach Wert der Zelle soll in der Nebenzelle ein Eintrag vor-
genommen werden.
Sub VerschachteltesIF()
Sheets("Verzweigungen").ActivateRange("A10").Select
If ActiveCell.Value < 10 ThenActiveCell.Offset(0, 1).Value = "In Ordnung"ActiveCell.Interior.ColorIndex = xlColorIndexNone
ElseIf ActiveCell.Value <= 15 ThenActiveCell.Offset(0, 1).Value = "langsam kritisch"ActiveCell.Interior.ColorIndex = xlColorIndexNone
ElseIf ActiveCell.Value >= 16 ThenActiveCell.Offset(0, 1).Value = "zu hoch"ActiveCell.Interior.ColorIndex = 3
End If
End Sub
Listing 4.8 Mehr als zwei Möglichkeiten in einer IF-Anweisung abfragen
Bei einem Wert über 16 wird der Zellenhintergrund automatisch mit der Farbe Rot
gefüllt.
4.2 Die Anweisung »Select Case« für mehr Übersicht
71
4
4.1.3 Die Kurzform einer Verzweigung
Neben der Verzweigung If Then Else gibt es eine weitere Möglichkeit, um Werte zu
überprüfen. Die Funktion heißt IIF.
Die Funktion IIF hat folgende Syntax:
IIf(expr, truepart, falsepart)
� Mit dem Argument expr geben Sie den Ausdruck an, der ausgewertet werden soll.
� Das Argument truepart liefert den zurückgegebenen Wert oder Ausdruck, wenn
expr den Wert True ergibt.
� Das Argument falsepart stellt den zurückgegebenen Wert oder Ausdruck dar,
wenn expr den Wert False liefert.
Diese Funktion wertet immer sowohl den Teil truepart als auch den Teil falsepart
aus, auch dann, wenn nur einer von beiden Teilen zurückgegeben wird.
In einem Beispiel angewendet, überprüfen Sie den Inhalt einer Zelle. Sofern der
Inhalt numerisch ist, schreiben Sie in die Nebenzelle den Text »Numerisch«. Sollte es
sich um einen Text handeln, dann schreiben Sie in die Nebenzelle den Text »Alpha-
numerisch«.
Sub AlternativVerzweigung()
ActiveCell.Offset(0, 1).Value = _IIF(IsNumeric(ActiveCell), "Numerisch","Alphanumerisch")
End Sub
Listing 4.9 Kurzprüfung auf numerischen Inhalt
Das Ergebnis dieser Auswertung schreiben Sie über die Anweisung ActiveCell.Off-
set(0, 1).Value in die Nebenzelle. Dabei weist die Eigenschaft Offset zwei Argu-
mente auf. Das erste Argument gibt die Zeilenverschiebung bekannt – von der
aktiven Zelle aus betrachtet. Da Sie in derselben Zeile bleiben möchten, ist demnach
die Verschiebung gleich 0. Das zweite Argument gibt die Spaltenverschiebung, von
der aktiven Zelle aus gesehen, bekannt. Da das Ergebnis in die Nebenspalte geschrie-
ben werden soll, wird dieses Argument mit dem Wert 1 bestückt.
4.2 Die Anweisung »Select Case« für mehr Übersicht
Das Makro in Listing 4.8 war doch recht unübersichtlich. Eine bessere Lösung, um
diese Aufgabe umzusetzen, ist die Verwendung eines anderen Sprachelements, näm-
lich der Select Case-Anweisung.
4 Sprachelemente in VBA in der praktischen Anwendung
72
Sub SelectCase()
Sheets("Verzweigungen").ActivateRange("A10").Select
Select Case ActiveCell.ValueCase Is < 10ActiveCell.Offset(0, 1).Value = "In Ordnung"ActiveCell.Interior.ColorIndex = xlColorIndexNone
Case Is <= 15ActiveCell.Offset(0, 1).Value = "langsam kritisch"ActiveCell.Interior.ColorIndex = xlColorIndexNone
Case Is >= 16ActiveCell.Offset(0, 1).Value = "zu hoch"ActiveCell.Interior.ColorIndex = 3
End Select
End Sub
Listing 4.10 Mehrere Farben in einer übersichtlichen CASE-Anweisung abfragen
Tabelle 4.2 enthält eine Liste der Vergleichsoperatoren und die Bedingungen, unter
denen das Ergebnis True, False oder 0 wird:
4.2.1 Indizes in Farben umsetzen
Im nächsten Beispiel (Listing 4.11) werden mithilfe der Select Case-Anweisung Farben
anhand des Farbindex umgesetzt. In Excel hat jede Farbe eine eindeutige Nummer.
Vergleichsoperator Erklärung
< Kleiner als
<= Kleiner oder gleich
> Größer als
>= Größer oder gleich
= Gleich
<> Ungleich
Tabelle 4.2 Die Vergleichsoperatoren in Excel
4.2 Die Anweisung »Select Case« für mehr Übersicht
73
4
Ausgehend von der Nummer, die in Zelle A15 steht, wird die dazugehörige Farbe in
der Nebenzelle B15 angezeigt.
Sub FarbenIndexUmsetzen()
Sheets("Verzweigungen").ActivateRange("A15").Select
Select Case ActiveCell.ValueCase 1 'schwarzActiveCell.Offset(0, 1).Interior.ColorIndex = 1
Case 2 'weißActiveCell.Offset(0, 1).Interior.ColorIndex = 2
Case 3 'rotActiveCell.Offset(0, 1).Interior.ColorIndex = 3
Case 4 'hellgrünActiveCell.Offset(0, 1).Interior.ColorIndex = 4
Case 5 'blauActiveCell.Offset(0, 1).Interior.ColorIndex = 5
Case 6 'gelbActiveCell.Offset(0, 1).Interior.ColorIndex = 6
Case 7 'violettActiveCell.Offset(0, 1).Interior.ColorIndex = 7
Case 8 'hellblauActiveCell.Offset(0, 1).Interior.ColorIndex = 8
Case 9 'braunActiveCell.Offset(0, 1).Interior.ColorIndex = 9
Case 10 'dunkelgrünActiveCell.Offset(0, 1).Interior.ColorIndex = 10
Case ElseMsgBox "Dieser Index ist im Makro nicht zugeordnet!"ActiveCell.Offset(0, 1).Interior.ColorIndex = _
xlColorIndexNoneEnd Select
End Sub
Listing 4.11 Farbindizes ermitteln
Wie Sie dieses Makro noch besser automatisieren können, sodass die Farbe sich
sofort nach der Eingabe des Index automatisch anpasst, erfahren Sie in Kapitel 12.
4 Sprachelemente in VBA in der praktischen Anwendung
74
4.2.2 Zahlen in Texte umwandeln
In der nächsten Aufgabe aus Listing 4.12 werden Zahlen in Texte umgesetzt. Ausge-
wertet wird die Zelle A20. Die Zahlen 1 bis 10 sollen in Form der Texte Eins bis Zehn in
der Nebenzelle B21 ausgegeben werden. In dem Fall, dass eine Zahl außerhalb des
Gültigkeitsbereiches in der Zelle steht, soll der Buchstabe X mit der Formatierungs-
option xLFill in die Nebenzelle eingefügt werden. Diese Option bewirkt, dass der
Buchstabe so oft wiederholt wird, bis die ganze Zelle damit ausgefüllt ist. Wahr-
scheinlich haben Sie diese Art von Formatierung schon einmal auf bestimmten
Bankformularen gesehen.
Sub ZahlenInTextUmsetzen()
Sheets("Verzweigungen").ActivateRange("A20").SelectActiveCell.Offset(0, 1).HorizontalAlignment = xlGeneral
Select Case ActiveCell.ValueCase 1: ActiveCell.Offset(0, 1).Value = "Eins"Case 2: ActiveCell.Offset(0, 1).Value = "Zwei"Case 3: ActiveCell.Offset(0, 1).Value = "Drei"Case 4: ActiveCell.Offset(0, 1).Value = "Vier"Case 5: ActiveCell.Offset(0, 1).Value = "Fünf"Case 6: ActiveCell.Offset(0, 1).Value = "Sechs"Case 7: ActiveCell.Offset(0, 1).Value = "Sieben"Case 8: ActiveCell.Offset(0, 1).Value = "Acht"Case 9: ActiveCell.Offset(0, 1).Value = "Neun"Case 10: ActiveCell.Offset(0, 1).Value = "Zehn"Case Else
MsgBox "Diese Zahl kennt das Makro nicht!"ActiveCell.Offset(0, 1).Value = "X"ActiveCell.Offset(0, 1).HorizontalAlignment= xlFill
End Select
End Sub
Listing 4.12 Zahleneingaben in ausgeschriebene Texte umwandeln
4.2.3 Mit VBA Formate prüfen
Die Select Case-Anweisung können Sie auch verwenden, um zu prüfen, welches For-
mat eine bestimmte Zelle hat. Sehen Sie sich dazu das Beispiel aus Listing 4.13 an:
4.2 Die Anweisung »Select Case« für mehr Übersicht
75
4
Sub FormatErkennen()
Sheets("Verzweigungen").ActivateRange("A25").Select
Select Case ActiveCell.NumberFormatCase "General"
MsgBox "Das Standardformat"Case "0.00"
MsgBox "Einfache Zahl mit zwei Kommastellen"Case "#,##0.00"
MsgBox "Zahl mit Trennzeichen und 2 Kommastellen"Case "@"
MsgBox "Textformat"Case Else
MsgBox "Format wurde nicht erkannt"End Select
End Sub
Listing 4.13 Zahlenformate prüfen
4.2.4 Fensterstatus ermitteln
Wenn Sie in die obere rechte Ecke Ihres Fensters sehen, werden Sie drei Symbole er-
kennen. Diese drei Symbole stellen den Status Ihres Arbeitsfensters dar. Welchen
Status das Fenster gerade hat, können Sie über die Select Case-Anweisung heraus-
finden.
Sub FensterStatusErmitteln()Dim Str As String
Select Case Application.WindowStateCase xlMaximizedStr = "xlMaximized"
Case xlMinimizedStr = "xlMinimized"
Case xlNormalStr = "xlNormal"
End Select
MsgBox "Das Fenster ist gerade im Status: " & StrEnd Sub
Listing 4.14 Fensterstatus ermitteln
4 Sprachelemente in VBA in der praktischen Anwendung
76
4.2.5 Makro bei ungültigem Wert beenden
Im letzten Beispiel mit der Anweisung Select Case geht es darum, den Wert in Zelle
A30 zu überprüfen. Steht in dieser Zelle der Buchstabe A, B oder C, wird das Makro in
Listing 4.15 fortgesetzt. Weist die Zelle jedoch einen anderen Wert auf, wird das Makro
sofort abgebrochen.
Sub GültigkeitenAbfragen()
Sheets("Verzweigungen").ActivateRange("A30").Select
Select Case ActiveCell.ValueCase Is = "A", "B", "C"Case ElseMsgBox "Ende des Makros"Exit Sub
End Select
MsgBox "Das Makro geht weiter ..."'weitere Befehle ...
End Sub
Listing 4.15 Gültigkeiten abfragen mit der CASE-Anweisung
bei Unterscheidung von Groß- und Kleinschreibung
Tipp
Übrigens wird im letzten Makro die Groß- und Kleinschreibung unterschieden. Nur
die korrekte Schreibweise liefert das gewünschte Ergebnis.
Möchten Sie erreichen, dass Excel zwischen Groß- und Kleinschreibung nicht unter-
scheidet, ergänzen Sie obiges Makro noch um die Kleinschreibweise der Buchstaben,
oder setzen Sie die Funktion UCase ein.
Sub GültigkeitenAbfragenII()
Sheets("Verzweigungen").ActivateRange("A30").Select
Select Case UCase(ActiveCell.Value)Case Is = "A", "B", "C"Case ElseMsgBox "Ende des Makros"
4.2 Die Anweisung »Select Case« für mehr Übersicht
77
4
Exit SubEnd SelectMsgBox "Das Makro geht weiter..."'weitere Befehle...
End Sub
Listing 4.16 Gültigkeiten abfragen bei Ignorierung
von Groß- und Kleinschreibung
Die Funktion UCase wandelt Kleinbuchstaben automatisch in Großbuchstaben um.
Analog dazu ändert die Funktion LCase Großbuchstaben in Kleinbuchstaben um.
4.2.6 Excel-Version feststellen
In der nächsten Aufgabe für dieses Sprachelement sollen Sie feststellen, mit welcher
Excel-Version Sie arbeiten. Für diese Aufgabe können Sie die Eigenschaft Version aus-
werten, die über einen numerischen Wert Ihre Excel-Installation identifiziert.
Sub ExcelVersionFeststellen()
MsgBox Application.Version
Select Case Val(Application.Version)Case 5MsgBox "Excel 5"
Case 7MsgBox "Excel 7/95"
Case 8MsgBox "Excel 8/97"
Case 9MsgBox "Excel 2000"
Case 10MsgBox "Excel 2002"
Case 11MsgBox "Excel 2003"
Case 12MsgBox "Excel 2007"
Case 14MsgBox "Excel 2010"
Case 15MsgBox "Excel 2013"
Case ElseMsgBox "Unbekannte Version von Excel"
4 Sprachelemente in VBA in der praktischen Anwendung
78
End Select
End Sub
Listing 4.17 Excel-Version ermitteln
Werten Sie über die Funktion Val die Versionsnummer aus, die Ihnen die Eigenschaft
Version meldet. Innerhalb der Select Case-Anweisung überprüfen Sie die Versions-
nummern. Trifft eine Bedingung zu, wird eine Meldung am Bildschirm ausgegeben,
die Ihnen die Excel-Version meldet. Danach wird die Select Case-Anweisung direkt
beendet.
4.3 Schleifen in Excel praxisgerecht einsetzen
Schleifen werden in Excel dazu verwendet, Abläufe mehrmals hintereinander durch-
zuführen. Die Schleifen werden so lange durchlaufen, bis eine oder mehrere Bedin-
gungen zutreffen, die dann einen Abbruch der Schleife bewirken. Je nach verwende-
ter Schleife findet die Abbruchprüfung am Anfang oder am Ende der Schleife statt.
Lernen Sie auf den nächsten Seiten klassische Beispiele für den sinnvollen Einsatz
von Schleifen kennen.
4.3.1 »For Next«-Schleifen
Sie können die Schleife For Next verwenden, um einen Block von Anweisungen eine
bestimmte Anzahl von Wiederholungen mal ausführen zu lassen. For Next-Schleifen
verwenden eine Zählervariable, deren Wert mit jedem Schleifendurchlauf erhöht
oder verringert wird. Sie brauchen daher nicht daran zu denken, den Zähler selbst
hoch- oder herunterzusetzen.
Die Syntax dieser Schleife lautet:
For Zähler = Anfang To Ende [Step Schritt][Anweisungen][Exit For][Anweisungen]Next [Zähler]
� Das Argument Zähler ist erforderlich und ist eine numerischen Variable, die als
Schleifenzähler dient.
� Das Argument Anfang repräsentiert den Startwert von Zähler.
4.3 Schleifen in Excel praxisgerecht einsetzen
79
4
� Mit dem Argument Ende legen Sie den Endwert von Zähler fest. Das Argument
Schritt ist optional. Hier können Sie den Betrag bestimmen, um den Zähler bei
jedem Schleifendurchlauf verändert wird. Falls kein Wert angegeben wird, ist die
Voreinstellung eins.
� Unter Anweisungen steht eine oder mehrere Anweisungen zwischen For und Next,
die so oft wie angegeben ausgeführt werden.
Innerhalb einer Schleife kann eine beliebige Anzahl von Exit For-Anweisungen an
beliebiger Stelle als alternative Möglichkeit zum Verlassen der Schleife verwendet
werden.
Üben Sie diese Art von Schleife anhand der nächsten Aufgaben.
Tabellenblätter einfügen
Im ersten Beispiel (Listing 4.18) sollen in eine neue Arbeitsmappe genau 50 Tabellen-
blätter eingefügt werden. Manuell wäre das ein wenig mühselig. Leichter geht es mit-
hilfe einer For Next-Schleife.
Sub TabellenblätterAnlegen()Dim intTab As Integer
Workbooks.Add
For intTab = 1 To 50Worksheets.Add
Next ibtTab
End Sub
Listing 4.18 Neue Tabellenblätter einfügen
Info
Die Tabellenblätter haben den Namen Tabelle1 bis Tabelle(N), je nachdem, wie
hoch Sie den Wert für die Tabellenblätter standardmäßig unter Extras • Optionen •
Allgemein (Excel 97–Excel 2003) bzw. bei den Excel-Optionen auf dem Register
Häufig verwendet (Excel 2007) eingestellt haben.
In Excel 2010 und Excel 2013 können Sie diese Einstellung unter Datei • Optionen •
Allgemein • Beim Erstellen neuer Arbeitsmappen • So viele Arbeitsblätter einfü-
gen vornehmen.
4 Sprachelemente in VBA in der praktischen Anwendung
80
Tabellenblätter benennen
Jetzt möchten Sie den neu eingefügten Tabellenblättern andere Namen geben. Dabei
soll als Tabellenblattname Ihr eigener Name mit dem Zusatz einer fortlaufenden
Nummer gewählt werden.
Sub TabellenNamenFestlegen()Dim intTab As Integer
For intTab = 1 To 50Worksheets(intTab).Name = _Environ("UserName") & intTab
Next intTab
End Sub
Listing 4.19 Mehrere Tabellenblätter mit
fortlaufender Nummerierung benennen
Jede zweite Zeile ausblenden
Im nächsten Beispiel soll auf einem Tabellenblatt jede zweite Zeile ausgeblendet wer-
den. Dabei sollen lediglich die ersten 20 Zeilen betroffen sein. Realisieren können Sie
diese Aufgabe mit folgendem Makro aus Listing 4.20:
Sub JedeZweiteZeileAusblenden()Dim intZ As Integer
Sheets("Schleifen").ActivateFor intZ = 1 To 20 Step 2Rows(intZ).Hidden = True
Next intZ
End Sub
Listing 4.20 Jede zweite Zeile ausblenden
Setzen Sie die Eigenschaft Hidden auf den Wert True, wenn Sie Zeilen ausblenden
möchten. Wenn Sie dasselbe Makro mit der Anweisung Rows(intZ).Hidden = False
starten, werden Ihre ausgeblendeten Zeilen wieder eingeblendet.
Tipp
Wenn Sie die Anweisung Rows.Hidden = False einsetzen, werden alle Zeilen wieder
eingeblendet.
4.3 Schleifen in Excel praxisgerecht einsetzen
81
4
Tabellenblätter pro Arbeitsmappe ermitteln
Wie schon vorher erwähnt wurde, müssen Sie bei dieser Schleife einen Zähler mitlau-
fen lassen. Wenn Sie die vorherigen Beispiele betrachten, werden Sie feststellen, dass
die Zahl nach dem Argument To jeweils fix ist. Diesen Wert können Sie aber auch, je
nach Aufgabe, variabel halten. So bietet sich der variable Zähler an, wenn Sie in einer
Arbeitsmappe auf jedem Tabellenblatt einen bestimmten Eintrag vornehmen müs-
sen. Das Problem ist jetzt nur, dass Sie nicht davon ausgehen können, dass sich in
jeder Mappe gleich viele Tabellenblätter befinden. Also müssen Sie zuerst einmal
herausfinden, wie viele Tabellenblätter die Arbeitsmappe enthält.
Sub EintragVornehmen()Dim intTab As Integer
For intTab = 1 To ActiveWorkbook.WorkSheets.CountWorksheets(intab).Range("E1").Value = Date
Next intTab
End Sub
Listing 4.21 Auf allen Tabellenblättern einen Eintrag vornehmen
Mehrere Tabellen mit Datumsfunktion ausstatten
Über die Eigenschaft Count ermitteln Sie die Anzahl der Tabellenblätter (Worksheets)
in der vorliegenden Arbeitsmappe. Genauso oft soll die Schleife durchlaufen werden,
die dafür sorgt, dass das aktuelle Datum auf jedem Tabellenblatt in Zelle E1 eingetra-
gen wird.
Passwortvergabe auf allen Tabellenblättern in einer Arbeitsmappe
In Excel können Sie sowohl die Arbeitsmappe als auch einzelne Tabellenblätter vor
Veränderungen schützen. Wenn Sie alle Tabellenblätter schützen und dabei dasselbe
Passwort verwenden möchten, können Sie ebenfalls die For Next-Schleife wie in Lis-
ting 4.22 einsetzen:
Sub PasswortAufAllenTabellenblätternSetzen()Dim intTab As Integer
For intTab = 1 To Worksheets.CountSheets(intTab).Protect "Passwort"
Next intTab
End Sub
Listing 4.22 Einheitliche Passwortvergabe auf allen
Tabellenblättern einer Arbeitsmappe
4 Sprachelemente in VBA in der praktischen Anwendung
82
Mithilfe der Methode Protect können Sie eine Tabelle schützen. Das Passwort geben
Sie in doppelten Anführungszeichen ein.
Schutz auf allen Tabellenblättern aufheben
Um alle Tabellenblätter der Arbeitsmappe wieder ändern zu können, heben Sie den
Blattschutz mit dem Makro aus Listing 4.23 wieder auf:
Sub PasswortLöschenAufAllenTabellenblättern()Dim intTab As Integer
For intTab = 1 To Worksheets.CountSheets(intTab).Unprotect "Passwort"Next intTab
End Sub
Listing 4.23 Passwort auf allen Tabellenblättern einer Arbeitsmappe löschen
Mithilfe der Methode Unprotect heben Sie den Blattschutz einer Tabelle auf. Je nach-
dem, ob Sie überhaupt ein Passwort beim Schützen der Tabelle vergeben haben, müs-
sen Sie das Passwort der Methode mitgeben oder eben weglassen.
Tipp
Wenn Sie für jedes Tabellenblatt ein anderes Passwort verwenden möchten, kön-
nen Sie beispielsweise den jeweils aktuellen Zählerstand wie in Listing 4.24 verwen-
den und diesen an das Passwort anhängen.
Sub PasswortAufAllenTabellenblätternDynamisch()Dim intTab As Integer
For intTab = 1 To Worksheets.CountSheets(intTab).Protect "Passwort" & intTab
Next intTab
End Sub
Listing 4.24 Dynamisches Passwort in Tabellen setzen
Hier lautet das Passwort des ersten Blattes Passwort1, das Passwort des zweiten Blat-
tes Passwort2 usw. Beim Aufheben dieser Passwörter müssen Sie genauso vorgehen
wie beim Setzen der Passwörter.
4.3 Schleifen in Excel praxisgerecht einsetzen
83
4
Sub PasswortEntfernenAufAllenTabellenblättern()Dim intTab As Integer
For intTab = 1 To Worksheets.CountSheets(intTab).Unprotect "Passwort" & intTab
Next intTab
End Sub
Listing 4.25 Dynamisches Passwort in Tabellen entfernen
Arbeitsmappen ausdünnen
Auch zum Ausdünnen von Tabellenblättern aus Arbeitsmappen eignet sich diese
Schleife sehr gut. Nehmen wir an, Sie wollen alle Tabellenblätter bis auf das erste Blatt
aus einer Arbeitsmappe löschen:
Sub LöscheAlleTabellenBisAufDieErste()Dim intTab As Integer
Application.DisplayAlerts = False
For intTab = ActiveWorkbook.Sheets.Count To 1 Step –1Sheets(intTab).Delete
Next intTab
Application.DisplayAlerts = True
End Sub
Listing 4.26 Löschen von Tabellenblättern
Die Eigenschaft DisplayAlerts setzen Sie auf den Wert False. Damit brauchen Sie das
Löschen der einzelnen Tabellenblätter nicht jeweils zu bestätigen. Vergessen Sie
nicht, am Ende des Makros die Eigenschaft DisplayAlerts wieder auf den Wert True
zu setzen, damit zukünftig Meldungen wieder angezeigt werden. Um eine Tabelle zu
löschen, setzen Sie die Methode Delete ein.
Achten Sie darauf, dass Sie die Schleife beim Löschen von Tabellen rückwärts laufen
lassen müssen!
4.3.2 »For Each Next«-Schleifen
Die Schleife For Each Next wiederholt eine Gruppe von Anweisungen für jedes Ele-
ment in einem Datenfeld oder einer Auflistung.
4 Sprachelemente in VBA in der praktischen Anwendung
84
Die Syntax dieser Schleife lautet:
For Each Element In Gruppe[Anweisungen][Exit For][Anweisungen]Next [Element]
Das Argument Element stellt die Variable zum Durchlaufen der Elemente unserer
Auflistung oder des Datenfeldes dar. Bei Auflistungen ist für Element nur eine Vari-
able vom Typ Variant, eine allgemeine Objektvariable oder eine beliebige spezielle
Objektvariable zulässig. Bei Datenfeldern ist für Element nur eine Variable vom Typ
Variant zulässig. Das nächste Argument Gruppe steht für den Namen einer Objekt-
auflistung oder eines Datenfeldes. Das letzte Argument, Anweisungen, ist optional
und führt eine oder mehrere Anweisungen durch, die für jedes Element in Gruppe
ausgeführt werden sollen.
Auch diese wichtige Schleife üben wir nun anhand praxisnaher Aufgaben.
Verdopplung der Werte innerhalb einer Markierung
Im ersten Beispiel für eine For Each Next-Schleife (Listing 4.27) sollen innerhalb einer
Markierung alle Werte verdoppelt werden.
Sub ZellenInMarkierungMultiplizieren()Const Multi = 2Dim Zelle As Range
For Each Zelle In SelectionIf IsNumeric(Zelle.Value) = True ThenZelle.Value = Zelle.Value * Multi
End IfNext Zelle
End Sub
Listing 4.27 Werte innerhalb eines markierten Bereichs verdoppeln
Die Variable Zelle wird als Range deklariert. Damit haben Sie Zugriff auf alle Befehle,
die für Zellen angeboten werden. In einer Schleife arbeiten Sie alle Zellen der Markie-
rung ab. Prüfen Sie innerhalb der Schleife über die Funktion IsNumeric, ob die Zelle
auch einen numerischen Wert enthält.
4.3 Schleifen in Excel praxisgerecht einsetzen
85
4
Tabellenblatt durchsuchen
Auch bei der Suche nach Daten leistet Ihnen diese Schleife gute Dienste. So sucht das
folgende Makro auf dem aktiven Tabellenblatt nach einem Suchbegriff, den Sie vor-
her in einer Input-Box eingegeben haben. Das Makro klappert nun jede Zelle inner-
halb der Markierung ab und hält sofort an, wenn es bei der Suche fündig wird. Die
gefundene Zelle wird dann markiert. Falls das Makro zu keinem Ergebnis kommt,
wird eine Meldung auf dem Bildschirm ausgegeben. Vor dem Start des Makros mar-
kieren Sie bitte noch den Bereich, in dem Excel nach dem Begriff suchen soll.
Sub DatenSuchen()Dim Zelle As RangeDim strText As String
strText = InputBox _("Bitte geben Sie den Suchbegriff ein!")
If strText = "" Then Exit Sub
For Each Zelle In ActiveSheet.UsedRangeIf Zelle = strText ThenZelle.SelectExit Sub
End IfNext Zelle
MsgBox "Suchbegriff nicht gefunden!"End Sub
Listing 4.28 Tabellenblatt durchsuchen
Im obigen Makro wird eine Eingabe vom Benutzer gefordert. Drückt der Anwender in
der Input-Box auf die Schaltfläche Abbrechen, wird das durch die Zeile If strText =
"" Then Exit Sub abgefangen. Die Suche wird dann erst gar nicht begonnen. Im Nor-
malfall, also wenn der Anwender einen Suchbegriff eingibt und mit OK bestätigt,
wird innerhalb der Markierung auf dem Tabellenblatt gesucht.
Ganze Arbeitsmappe durchsuchen
Das Beispiel ist auf eine Markierung innerhalb eines Tabellenblattes beschränkt.
Möchten Sie die Suche auf die ganze Arbeitsmappe ausdehnen, verwenden Sie das
Makro aus Listing 4.29:
Sub DatenSuchenInGanzerArbeitsmappe()Dim Zelle As RangeDim Blatt As Worksheet
4 Sprachelemente in VBA in der praktischen Anwendung
86
Dim strText As String
strText = InputBox("Bitte geben Sie den Suchbegriff ein!")If strText = "" Then Exit SubFor Each Blatt In ActiveWorkbook.WorksheetsFor Each Zelle In Blatt.UsedRangeIf Zelle = strText ThenDebug.Print Blatt.Name & vbTab & Zelle.AddressEnd If
Next ZelleNext Blatt
End Sub
Listing 4.29 Ganze Arbeitsmappe durchsuchen
In der Variablendeklaration machen Sie bekannt, dass Sie mit dem Worksheet-Objekt
arbeiten möchten. Diesem geben Sie im Makro den Namen Blatt. Danach arbeiten
Sie alle Tabellen der Arbeitsmappe ab und durchlaufen in einer zweiten For Each
Next-Schleife alle Zellen des jeweils benutzten Bereichs (UsedRange) der Tabelle.
Entspricht der Zellenwert dem vorher eingegebenen Wert, dann geben Sie die Zellen-
adresse sowie den Namen der Tabelle im Direktfenster der Entwicklungsumgebung
aus.
Auf Formelsuche im Tabellenblatt
Besonders mühselig ist es, auf einem Tabellenblatt nach Formelzellen zu suchen.
Dazu können Sie durch das Drücken der Taste (F5) den Gehe zu-Dialog aufrufen,
dann auf die Schaltfläche Inhalte klicken und anschließend die Option Formeln
aktivieren. Nach der Bestätigung mit OK werden dann alle Zellen der Tabelle mar-
kiert, die Formeln oder auch Verknüpfungen enthalten. Das folgende Beispiel aus Lis-
ting 4.30 ermittelt zunächst die Anzahl der Formeln auf einem Tabellenblatt:
Sub FormelnZählen()Dim intz As IntegerDim Zelle As Range
On Error GoTo fehlerFor Each Zelle In ActiveSheet.Cells.SpecialCells(xlFormulas)intz = intz + 1
Next Zelle
MsgBox "Anzahl der Formeln in der Tabelle: " & intzExit Sub
4.3 Schleifen in Excel praxisgerecht einsetzen
87
4
fehler:MsgBox "Es konnten auf dem Tabellenblatt <" & _ActiveSheet.Name & "> keine Formeln gefunden werden!"
End Sub
Listing 4.30 Formeln auf Tabellenblatt zählen
Die Methode SpecialCells eignet sich hervorragend, um bestimmte Zellen wieder-
zufinden. Neben Formelzellen können Sie so auch Zellen mit Kommentaren
(xlCellTypeNotes) aufstöbern, leere Zellen (xlCellTypeBlanks) oder auch Zellen mit
Konstanten (xlCellTypeConstants) ermitteln.
Umlaute im Tabellenblatt umsetzen
Wenn Sie z. B. in Excel einen Text vorliegen haben, der Umlaute aufweist, können Sie
elegant die Schleife For Each Next dazu einsetzen, um diese Zeichen zu ersetzen. Mar-
kieren Sie vorher alle Zellen, in denen Sie Umlaute umsetzen möchten, und starten
Sie das Makro aus Listing 4.31.
Sub UmlauteErsetzen()Dim Zelle As Range
For Each Zelle In SelectionWith Selection.Replace What:="ä", _Replacement:="ae", LookAt:=xlPartReplace What:="ö", _Replacement:="oe", LookAt:=xlPartReplace What:="ß", _Replacement:="ss", LookAt:=xlPartReplace What:="ü", _Replacement:="ue", LookAt:=xlPart
End WithNext Zelle
End Sub
Listing 4.31 Umlaute in Tabellenblatt austauschen
Wochenenden farblich hervorheben
Im nächsten Beispiel sollen im Bereich A1:K1, wo jeweils Datumsangaben stehen, alle
Samstage bzw. Sonntage farbig hervorgehoben werden. Dazu setzen Sie die Funktion
4 Sprachelemente in VBA in der praktischen Anwendung
88
Weekday ein. Diese Funktion meldet für den Sonntag den Index 1 und für den Samstag
den Index 7 – ein wenig ungewöhnlich zwar, aber es klappt hervorragend.
Sub WochenendeFormatieren()Dim zelle As Range
For Each Zelle In ActiveSheet.Range("A1:K1")If WeekDay(Zelle, 2) > 5 ThenZelle.Interior.ColorIndex = 15
ElseZelle.Interior.ColorIndex = xlColorIndexNone
End IfNext Zelle
End Sub
Listing 4.32 Wochenenden farbig hervorheben
Im obigen Beispiel haben Sie konkret schon einen ganz bestimmten Bereich A1:K1
vorgegeben, für den die Wochenendprüfung durchgeführt werden soll. Als Zellen-
hintergrund verwenden Sie einen leichten Grauton. Sicherheitshalber kann auch
hier dafür gesorgt werden, dass normale Wochentage keinen Hintergrund erhalten,
indem Sie der Eigenschaft ColorIndex die Konstante xlColorIndexNone zuweisen.
Nullen auffüllen
Im nächsten Praxisbeispiel soll ein Bereich mit Nullen aufgefüllt werden. Stellen Sie
sich vor, Sie haben Ihre monatlichen Ausgaben in einer Tabelle erfasst und möchten
nun die Zellen in einem vorher festgelegten Bereich durchsuchen. Alle Zellen, die in
diesem Bereich keinen Eintrag aufweisen, sollen mit der Zahl 0 gefüllt werden.
Legen Sie mit der Anweisung Set zunächst einen Bereich fest, für den Sie diese Aktion
durchführen möchten.
Abbildung 4.1 Sie können die Wochenenden farbig hervorheben.
4.3 Schleifen in Excel praxisgerecht einsetzen
89
4
Sub NullenAuffüllen()Dim Zelle As RangeDim Bereich As Range
Set Bereich = Sheets("Nullen").Range("B2:H10")For Each Zelle In BereichIf Zelle.Value = "" ThenZelle.Value = 0
End IfNext Zelle
End Sub
Listing 4.33 Bereich mit Nullen initialisieren
Abbildung 4.2 Die Ausgangstabelle
Abbildung 4.3 Die leeren Zellen wurden mit dem Wert 0 aufgefüllt.
4 Sprachelemente in VBA in der praktischen Anwendung
90
Extremwerte ermitteln und kenntlich machen
Die Ermittlung von Spitzen- bzw. Niedrigstwerten ist in Excel leicht möglich. In VBA
setzen Sie für diese Aufgabe die Funktionen Max bzw. Min ein. So wird im folgenden
Beispiel aus Listing 4.34 innerhalb eines vorher definierten Bereichs sowohl der
Maximalwert als auch der niedrigste Wert ermittelt und farbig gekennzeichnet.
Sub AusreisserInBereichErmitteln()Dim Zelle As RangeDim Bereich As Range
Set Bereich = Sheets("Ausreißer").Range("A3:F14")
For Each Zelle In BereichIf Zelle = Application.Min(Bereich) ThenWith Zelle.Font.ColorIndex = 10 'grün.Font.Bold = TrueEnd With
End IfIf Zelle = Application.Max(Bereich) ThenWith Zelle.Font.ColorIndex = 3 'rot.Font.Bold = True
End With
Abbildung 4.4 Die höchsten und die niedrigsten Kosten des letzten Halbjahrs
(Zur besseren Übersicht wurden beide Zellen in der Abbildung markiert.)
4.3 Schleifen in Excel praxisgerecht einsetzen
91
4
End IfNext Zelle
End Sub
Listing 4.34 Extremwerte farbig hervorheben
Durchschnittliche Kosten ermitteln
Wenn Sie in der Tabelle aus der vorherigen Aufgabe die durchschnittlichen Kosten
ermitteln möchten, müssen Sie zuerst feststellen, wie viele Zellen in der Markierung
enthalten sind. Dies gelingt Ihnen über die Methode Count. Danach summieren Sie
zunächst einmal alle Werte aus den markierten Zellen und speichern diese in der
Variablen Avg. Wählen Sie für diese Variable nicht den Datentyp Integer, der bei die-
sen großen Zahlen nicht mehr ausreicht, sondern definieren Sie dazu eine Variable
vom Typ Long. Um den Durchschnittswert zu bekommen, dividieren Sie die Gesamt-
summe aus der Variablen Avg durch die Anzahl der markierten Zellen, die Sie in der
Variablen i zwischengespeichert haben. Bringen Sie die Zahl am Ende mit der Funk-
tion Format noch in das gewünschte Format.
Sub DurchschnittskostenErmitteln()Dim zelle As RangeDim Avg As LongDim i As Integer
Sheets("Ausreißer").ActivateAvg = 0'Anzahl markierter Zellen ermitteln
i = Selection.Cells.Count
For Each zelle In SelectionAvg = Avg + zelle.Value
Next zelle
Avg = Avg / iMsgBox "Durchschnittliche Kosten: " _& Format(Avg, "#,##0 €")
End Sub
Listing 4.35 Durchschnittliche Kosten ermitteln
4 Sprachelemente in VBA in der praktischen Anwendung
92
Zeilen einblenden
Erinnern Sie sich an ein vorangegangenes Beispiel, in dem Sie Zeilen ausgeblendet
haben? Blenden Sie diese jetzt wieder ein, indem Sie folgendes Makro aus Listing 4.36
verwenden:
Sub AusgeblendeteZeilenEinblenden()Dim Zeile As Range
For Each Zeile In Sheets("Verzweigungen").UsedRange.RowsZeile.Hidden = False
Next Zeile
End Sub
Listing 4.36 Zeilen einblenden
Das Makro überprüft, wie viele Zeilen auf dem aktuellen Tabellenblatt mit Daten
belegt sind. In einer Schleife werden dann alle Zeilen durchlaufen und die ausgeblen-
deten Zeilen wieder eingeblendet.
Abbildung 4.5 Die durchschnittlichen Kosten im Juni betragen 452 Euro.
4.3 Schleifen in Excel praxisgerecht einsetzen
93
4
Tipp
Wenn Sie genau hinsehen, werden Sie merken, dass Ihr Bildschirm bei diesem
Makro mehr oder weniger stark flackert. Verantwortlich dafür ist die Bildschirm-
aktualisierung, die Sie aber mit der Anweisung
Application.Screenupdating = False
ausschalten können. Ihren Augen zuliebe sollten Sie sich angewöhnen, diese Anwei-
sung zu Beginn jedes Makros einzusetzen. Am Ende eines jeden Makros können Sie
die Bildschirmaktualisierung mit der Anweisung
Application.Screenupdating = True
wieder einschalten. Bei längeren Makros empfiehlt es sich, hin und wieder die Bild-
schirmaktualisierung einzuschalten, damit der Anwender nicht fälschlicherweise
meint, Ihr Makro sei abgestürzt.
Bereichsnamen ermitteln
Sicher wissen Sie, dass Sie in Excel mit benannten Bereichen arbeiten können. For-
meln werden so sprechender und insgesamt leichter verständlich. Wie aber ermit-
teln Sie die Namen und deren Zellenadressen in einer Arbeitsmappe?
Sub NamenInArbeitsmappeAusgeben()Dim BerName As Name
For Each BerName In ActiveWorkbook.NamesMsgBox "Name: " & BerName.Name & vbLf _& "Adresse: " & BerName.RefersToLocal
Next BerName
End Sub
Listing 4.37 Alle verwendeten Namen der Arbeitsmappe ausgeben
Geben Sie zuerst an, dass Sie mit dem Objekt Name arbeiten möchten. Danach suchen
Sie die Arbeitsmappe nach verwendeten Namen ab und geben diese in einem Mel-
dungsfenster aus. Interessant sind der Name selbst sowie seine Adresse, also die Zell-
position innerhalb der Arbeitsmappe.
Einheitliche Kopf- und Fußzeilen
Im nächsten Beispiel werden Sie für eine einheitliche Gestaltung der Kopf- und Fuß-
zeilen sorgen. Dabei arbeiten Sie alle Tabellen einer Arbeitsmappe ab, rufen die Sei-
tenansicht auf und stellen die gewünschten Kopf- und Fußzeilen ein. Folgende
Informationen sollen enthalten sein:
4 Sprachelemente in VBA in der praktischen Anwendung
94
� Kopfzeile links: der Firmenname
� Kopfzeile Mitte: der Name des Tabellenblatts
� Kopfzeile rechts: das aktuelle Datum
� Fußzeile links: der komplette Speicherpfad inklusive Dateiname
� Fußzeile Mitte: bleibt leer
� Fußzeile rechts: Seitennummerierung
Sub KopfUndFuß()Dim Tabelle As Worksheet
Application.ScreenUpdating = FalseFor Each Tabelle In ActiveWorkbook.WorksheetsWith Tabelle.PageSetup.LeftHeader = "Firmenname".CenterHeader = "Tabellenname &A".RightHeader = "&D".LeftFooter = "Pfad : " & ActiveWorkbook.FullName.CenterFooter = "".RightFooter = "Seite &P von &N"
End WithNext Tabelle
Set Tabelle = NothingApplication.ScreenUpdating = True
End Sub
Listing 4.38 Alle Tabellen mit einer einheitlichen Kopf- und Fußzeile ausstatten
Definieren Sie im ersten Schritt eine Objektvariable vom Typ Worksheet. Schalten Sie
danach die Bildschirmaktualisierung aus, indem Sie die Anweisung Application.
ScreenUpdating = False einsetzen. Setzen Sie danach eine Schleife auf, die alle Tabel-
len der aktiven Arbeitsmappe durchläuft und über das Objekt PageSetup einheitliche
Kopf- und Fußzeilen einstellt. Den Namen der jeweiligen Tabelle bekommen Sie über
die Eigenschaft Name. Die Seitennummerierung für die Kopf- und Fußzeile kann über
sogenannte Steuerzeichen (z. B. &P oder &N) eingefügt werden. Den kompletten
Namen der gespeicherten Arbeitsmappe können Sie über die Eigenschaft FullName
abfragen. Heben Sie am Ende des Makros den Objektverweis wieder auf, um Speicher
freizugeben, und schalten Sie die Bildschirmaktualisierung wieder ein.
4.3 Schleifen in Excel praxisgerecht einsetzen
95
4
4.3.3 Die Schleife »Do Until Loop«
Die Do Until Loop-Schleife wiederholt einen Block mit Anweisungen, bis eine Bedin-
gung den Wert True erhält. Die Bedingung wird jeweils am Ende der Schleife geprüft.
Als Abbruchbedingung können Sie alles Mögliche abfragen; so können Sie z. B. eine
Abbruchbedingung festlegen, wenn ein bestimmter Wert erreicht ist oder eine Zelle
einen bestimmten Text aufweist.
Die Syntax dieser Schleife sieht wie folgt aus:
Do [{Until} Bedingung][Anweisungen][Exit Do][Anweisungen]Loop
Die Bedingung stellt einen numerischen Ausdruck oder Zeichenfolgenausdruck dar,
der entweder True oder False ergibt. Liefert die Bedingung den Wert 0, so wird die
Bedingung als False interpretiert. Hinter den Anweisungen verbergen sich eine oder
mehrere Anweisungen, die so lange wiederholt werden, bis die Bedingung durch True
erfüllt ist.
Innerhalb einer Do Until Loop-Anweisung kann eine beliebige Anzahl von Exit Do-
Anweisungen an beliebiger Stelle als Alternative zum Verlassen einer Do Loop-
Anweisung verwendet werden. Exit Do wird oft in Zusammenhang mit der Auswer-
tung einer Bedingung (zum Beispiel If Then) eingesetzt und hat zur Folge, dass die
Ausführung mit der ersten Anweisung im Anschluss an Loop fortgesetzt wird.
Üben Sie den Einsatz dieser Schleife an ein paar ausgesuchten Beispielen.
In der folgenden Aufgabe soll eine Liste in Excel verwaltet werden. Anhand eines Zel-
lenkennzeichens sollen Aktionen abgeleitet werden können.
Funktionsumfang
Die Aktionen sind:
� Zeilen ausblenden (Zellenkennzeichen = H)
� Zeilen einfügen (Zellenkennzeichen = I)
� Zeilen kopieren (Zellenkennzeichen = C)
� Zeilen löschen (Zellenkennzeichen = D)
� Zeilen mit Kopien löschen (Zelleninhalt = Kopie)
� Keine Aktion (Zellenkennzeichen = O)
4 Sprachelemente in VBA in der praktischen Anwendung
96
Zeilen ausblenden
Um Zeilen auszublenden, wird das Zellenkennzeichen H verwendet. Die Do Until
Loop-Schleife arbeitet in Spalte A so lange Zeilen ab, bis sie auf die Abbruchbedingung
stößt. Die Abbruchbedingung ist gegeben, wenn die erste leere Zelle in Spalte A
erreicht wird.
Sub BestimmteZeilenAusblenden()
Sheets("Until").ActivateRange("A1").SelectDo Until IsEmpty(ActiveCell.Value)If ActiveCell.Value = "H" ThenSelection.EntireRow.Hidden = True
End IfActiveCell.Offset(1, 0).SelectLoop
End Sub
Listing 4.39 Zeilen ausblenden bei Bedingung
Abbildung 4.6 Die Ausgangstabelle
4.3 Schleifen in Excel praxisgerecht einsetzen
97
4
Indem Sie die Eigenschaft Hidden auf den Wert True setzen, wird die aktuelle Zeile aus-
geblendet. Danach wird der Mauszeiger mithilfe der Offset-Eigenschaft auf die
nächste Zeile gesetzt.
Zeilen einfügen
Für das Einfügen von Zeilen wurde das Zellenkennzeichen I vereinbart.
Sub BestimmteZeilenEinfügen()
Sheets("Until").ActivateRange("A1").Select
Do Until IsEmpty(ActiveCell.Value)If ActiveCell.Value = "I" ThenSelection.EntireRow.InsertActiveCell.Offset(2, 0).Select
ElseActiveCell.Offset(1, 0).Select
End IfLoop
End Sub
Listing 4.40 Zeilen einfügen bei Bedingung
Verwenden Sie die Methode Insert, um Zeilen einzufügen, und setzen Sie danach
den Mauszeiger zwei Zellen nach unten.
Zeilen löschen
Das Zellenkennzeichen für den Vorgang »Zeilen löschen« lautet D.
Sub BestimmteZeilenLöschen()
Sheets("Until").ActivateRange("A1").SelectDo Until ActiveCell.Value = ""If ActiveCell.Value = "D" ThenSelection.EntireRow.Delete
ElseActiveCell.Offset(1, 0).Select
End If
4 Sprachelemente in VBA in der praktischen Anwendung
98
Loop
End Sub
Listing 4.41 Zeilen löschen bei Bedingung
Die Methode Delete löscht im obigen Makro jeweils eine gesamte Zeile. Beim Lösch-
vorgang muss der Mauszeiger nicht per Befehl verschoben werden, er setzt den
Mauszeiger automatisch in die nächste Zelle.
Zeilen kopieren
Beim Zellenkennzeichen C soll die aktuelle Zeile kopiert und mit dem Zusatz Kopie
bei der Nr. versehen werden.
Sub BestimmteZeilenkopieren()
Sheets("Until").ActivateRange("A1").Select
Do Until IsEmpty(ActiveCell.Value)If ActiveCell.Value = "C" ThenSelection.EntireRow.CopySelection.EntireRow.InsertActiveCell.Offset(0, 5).Value = _ActiveCell.Offset(0, 5).Value & " Kopie"ActiveCell.Offset(2, 0).SelectApplication.CutCopyMode = False
ElseActiveCell.Offset(1, 0).Select
End IfLoop
End Sub
Listing 4.42 Zeilen kopieren bei Bedingung
Setzen Sie die Methoden Copy und Insert ein, um eine Zeile zu kopieren bzw. einzu-
fügen. Über die Eigenschaft Offset greifen Sie auf die Spalte F zu und ergänzen in der
aktiven Zelle den Text Kopie.
4.3 Schleifen in Excel praxisgerecht einsetzen
99
4
Kopien entfernen
Wenn Sie die Kopien wieder entfernen möchten, müssen Sie die Spalte F durchlau-
fen. Immer wenn dort in einer Zelle das Wort Kopie auftaucht, muss die ganze Zeile
entfernt werden.
Sub KopienEntfernen()
Sheets("Until").ActivateRange("F1").Select
Do Until IsEmpty(ActiveCell.Value)If Right(ActiveCell.Value, 5) = "Kopie" ThenSelection.EntireRow.Delete
ElseActiveCell.Offset(1, 0).Select
End ifLoop
End Sub
Listing 4.43 Doppelte Zeilen entfernen
Mit der Funktion Right prüfen Sie, ob der Text Kopie in der Zelle vorhanden ist. Dabei
legen Sie im ersten Argument fest, welche Zelle untersucht werden soll (aktive Zelle),
Abbildung 4.7 Zeilen kopieren und kennzeichnen
4 Sprachelemente in VBA in der praktischen Anwendung
100
und im zweiten Parameter bestimmen Sie, wie viele Zeichen der Zelle von rechts
gesehen mit einbezogen werden sollen. Entspricht der Zellenteil dem Text Kopie,
dann wird die Methode Delete angewendet, um die ganze Zeile zu löschen.
Tipp
Neben der Funktion Right, die jeweils ein oder mehrere Zeichen von rechts über-
prüft, gibt es selbstverständlich auch eine Funktion Left, die die Überprüfung eines
Textes von der linken Seite beginnt. Die Argumente entsprechen dabei den Argu-
menten der Right-Funktion.
Info
Neben diesen beiden Funktionen gibt es die Funktion Mid, die einen Teil eines Tex-
tes prüfen kann. Dabei sind jedoch drei Argumente notwendig. Das erste Argument
bestimmt den Text oder die Zelle, der bzw. die untersucht werden soll. Das zweite
Argument bestimmt, ab welcher Position gesucht werden soll. Im letzten Argument
geben Sie an, für wie viele Zeichen diese Funktion bestimmt ist.
So meldet die Funktion Mid("Excel 2013 VBA", 7, 4) den Wert 2013.
Datumstest durchführen
Stellen Sie sich ein Tabellenblatt vor, bei dem in Zelle A1 das heutige Datum steht. In
der zweiten Zeile steht eine Datumsreihe, die in Zelle A2 beginnt und in Zelle I2
endet. Wie müsste jetzt ein Makro lauten, das so lange in Zeile 2 nach rechts läuft, bis
das aktuelle Datum erreicht ist?
Sub AufHeutigemDatumStoppen()
Sheets("Until2").ActivateRange("A2").SelectDo Until Date = ActiveCell.ValueActiveCell.Offset(0, 1).Select
Loop
End Sub
Listing 4.44 Datumstest durchführen (Variante 1)
Setzen Sie die Do Until Loop-Schleife beginnend in Zelle A2 auf. Versetzen Sie mit der
Offset-Eigenschaft so lange den Mauszeiger nach rechts, bis der Wert der Funktion
Date mit einer Zelle übereinstimmt.
4.3 Schleifen in Excel praxisgerecht einsetzen
101
4
Gleich an dieser Stelle gibt es eine alternative Möglichkeit, diese Aufgabe zu lösen.
Dabei kommt die folgende Lösung ohne den Select-Befehl innerhalb der Schleife
aus.
Sub AufHeutigemDatumStoppen2()
Sheets("Until2").Activatei = 1Do Until Date = Cells(2, i).Valuei = i + 1
LoopCells(2, i).Select
End Sub
Listing 4.45 Datumstest durchführen (Variante 2)
Mithilfe der Cells-Auflistung kann jede Zelle der Tabelle angesprochen werden.
Dabei liefert das erste Argument die jeweilige Zeile, und das zweite Argument gibt
Auskunft über die Spalte. Der Schnittpunkt aus beiden Angaben liefert die Koordi-
nate der angesprochenen Zelle. Da in der zweiten Variante auf den Select-Befehl ver-
zichtet wurde, muss stattdessen eine Variable in der Schleife hochgezählt werden.
Beide Makros liefern dasselbe Ergebnis, wobei das zweite Makro einen kleinen
Geschwindigkeitsvorteil gegenüber der Variante 1 hat, da auf die Methode Select
innerhalb der Schleife verzichtet werden kann.
Abbildung 4.8 Genaues Positionieren von Zellen
4 Sprachelemente in VBA in der praktischen Anwendung
102
Listen sortieren und doppelte Sätze löschen
Gegeben sei eine Liste, die aus einer Spalte (Spalte A) besteht. In dieser unsortierten
Liste sind Einträge mehrfach vorhanden. Außerdem liegt die Liste in unsortiertem
Zustand vor. Ihre Aufgabe besteht nun darin, alle doppelten Sätze zu ermitteln.
Sortieren Sie im ersten Schritt die Liste, und löschen Sie danach die doppelten Sätze.
Sub DoppelteSätzeEliminieren()Dim i As Long
Sheets("Until3").Activate
'zuerst sortierenColumns("A:A").SelectSelection.Sort Key1:=Range("A1"), Order1:=xlAscending, _Header:=xlGuess, OrderCustom:=1, MatchCase:=False, _Orientation:=xlTopToBottomi = 1'jetzt doppelte Sätze rausschmeißenDo Until IsEmpty(Cells(i, 1).Value)If Cells(i, 1).Value = Cells(i + 1, 1).Value ThenCells(i, 1).EntireRow.Delete
Elsei = i + 1
End IfLoop
End Sub
Listing 4.46 Doppelte Sätze löschen
Markieren Sie die komplette Spalte A, und wenden Sie die Methode Sort an. Schauen
Sie sich die Syntax der Methode Sort einmal etwas genauer an:
� Die Syntax:
Sort(Key1, Order1, Key2, Type, Order2, Key3, Order3, Header, OrderCustom,MatchCase, Orientation, SortMethod)
� Die Argumente der Methode Sort:
– Die ersten beiden Argumente müssen Sie immer gemeinsam betrachten. Das
erste Argument, Key, bestimmt das Sortierfeld, das zweite Argument die Sortier-
reihenfolge. Möglich dabei ist, entweder aufsteigend (xlAscending) oder abstei-
gend (xlDescending) zu sortieren. Insgesamt können Sie drei verschiedene
Sortierfelder bestimmen.
4.3 Schleifen in Excel praxisgerecht einsetzen
103
4
– Das Argument Type ist nur bei Pivot-Tabellenberichten interessant und wird
hier nicht näher behandelt.
– Das Argument Header legt fest, ob die erste Zeile Überschriften enthält oder
nicht. Dabei weisen Sie die Konstante xlGuess zu, wenn Sie die Entscheidung
darüber Excel selbst überlassen möchten. Setzen Sie die Konstante xlYes, wenn
der Sortierbereich eine Überschriftenzeile enthält, die natürlich nicht mitsor-
tiert werden darf. Wenn Sie die Konstante xlNo zuweisen, enthält der Sortier-
bereich wie im obigen Beispiel keine Überschriften.
– Das Argument OrderCustom wird bei benutzerdefinierten Sortierreihenfolgen
verwendet und ist in diesem Zusammenhang eher uninteressant.
– Das Argument MatchCase nimmt den Wert True an, wenn beim Sortieren Groß-
und Kleinschreibung berücksichtigt werden soll. Setzen Sie dieses Argument
auf den Wert False, wenn Groß- und Kleinschreibung nicht berücksichtigt wer-
den soll.
– Beim Argument Orientation wird die Sortierweise festgelegt. Hat das Argu-
ment den Wert xlSortRows, so wird von oben nach unten, also zeilenweise sor-
tiert. Wird das Argument auf xlSortColumns gesetzt, so wird von links nach
rechts, also spaltenweise sortiert.
– Das letzte Sortierkriterium legt den Sortieralgorithmus fest.
Anschließend werden die doppelten Sätze aus der Liste entfernt. Auch bei dieser Auf-
gabe kann auf den Befehl Select verzichtet werden, indem man mit der Auflistung
Cells arbeitet. Sollte ein Satz doppelt vorkommen, dann stehen beide Sätze nach
dem Sortiervorgang genau untereinander. Von daher kann man nun die aktuelle
Zeile (i) und die darunter liegende (i+1) miteinander vergleichen. Bei doppeltem Vor-
kommen wird die aktuelle Zeile über die Methode Delete gelöscht. Über die Eigen-
schaft EntireRow wird dabei auf die komplette Zeile zurückgegriffen.
Zeilen auf ein anderes Tabellenblatt übertragen
Oft kommt es vor, dass Sie aus einer Liste bestimmte Zeilen filtern und auf ein ande-
res Tabellenblatt kopieren müssen. Dazu legen Sie zuerst fest, welches die Ausgangs-
tabelle und welches die Zieltabelle sein soll. Die Namen der Tabellen definieren Sie
gleich zu Beginn des Makros als Blatt1 und Blatt2.
Das Ziel
Was soll konkret gemacht werden?
� Alle Zeilen im Tabellenblatt Until, die als Kürzel den Buchstaben C haben, sollen
auf das Tabellenblatt Ziel übertragen werden.
� Ermitteln Sie die Anzahl aller Tabellensätze der Liste.
4 Sprachelemente in VBA in der praktischen Anwendung
104
� Setzen Sie die ermittelte Anzahl als Abbruchbedingung für Ihre Do Until Loop-
Schleife ein.
� Ermitteln Sie, wie viele Sätze übertragen wurden.
� Geben Sie eine Meldung am Ende des Makros aus, die die Anzahl der übertragenen
Sätze enthält.
Das Makro für diese Aufgabe sehen Sie in Listing 4.47:
Sub SätzeAufAnderesTabellenblattÜbertragen1()Const Blatt1 = "Until"Const Blatt2 = "Ziel"Dim i As IntegerDim iAnz As Integer
Application.ScreenUpdating = FalseSheets(Blatt1).ActivateRange("A1").SelectiAnz = 0i = 0
Do Until i = ActiveSheet.UsedRange.Rows.CountIf ActiveCell.Value = "C" ThenSelection.EntireRow.Copy
Abbildung 4.9 Die Ausgangstabelle vor der Übertragungsaktion
4.3 Schleifen in Excel praxisgerecht einsetzen
105
4
Sheets(Blatt2).ActivateActiveSheet.PasteActiveCell.Offset(1, 0).SelectSheets(Blatt1).SelectActiveCell.Offset(1, 0).SelectiAnz = iAnz + 1
ElseActiveCell.Offset(1, 0).Select
End Ifi = i + 1LoopApplication.CutCopyMode = FalseApplication.ScreenUpdating = TrueMsgBox "Es wurden " & iAnz & " Sätze übertragen"
End Sub
Listing 4.47 Datensätze auf anderes Tabellenblatt übertragen (Variante 1)
Schalten Sie zu Beginn des Makros die Bildschirmaktualisierung aus. Gerade bei häu-
figem Blattwechsel flimmert das Bild sonst zu stark. Schonen Sie Ihre Augen und
Ihren Bildschirm, und setzen Sie die Eigenschaft Screenupdating auf den Wert False.
Im nächsten Schritt setzen Sie Ihre Zählvariablen auf den Wert 0, um auf Nummer
sicher zu gehen, dass diese beiden Variablen richtig initialisiert sind. Ermitteln Sie
nun mit der Methode Count die verwendeten Zeilen auf Ihrem Tabellenblatt. Das
Ergebnis dieser Abfrage verwenden Sie gleich als Abbruchbedingung für Ihre
Schleife. Setzen Sie die If-Anweisung ein, um zu ermitteln, ob die aktive Zelle das
richtige Kennzeichen C aufweist. Wenn nicht, können Sie mit der Eigenschaft Offset
gleich eine Zelle weiter nach unten gehen.
Stimmt das Kennzeichen überein, kopieren Sie mithilfe der Methode Copy die ganze
Zeile, wechseln auf das Tabellenblatt Ziel und fügen den Inhalt aus der Zwischen-
ablage mit der Methode Paste ein. Jetzt positionieren Sie den Zellenzeiger auf die
nächste freie Zelle der Spalte und addieren den Wert 1 zu der Variablen iAnz, die die
übertragenen Sätze zählt. Wechseln Sie im Anschluss auf Ihr Ausgangstabellenblatt
Blatt1, positionieren Sie den Zellenzeiger eine Zelle weiter nach unten, und addie-
ren Sie auch hier zur Zählvariable i den Wert 1. Sind alle Sätze untersucht worden,
wird der Ausschneide- bzw. Kopiermodus deaktiviert und der Laufrahmen entfernt,
indem Sie die Eigenschaft CutCopyMode auf den Wert False setzen. Schalten Sie nun
die Bildschirmaktualisierung wieder ein, und geben Sie mit der Funktion Msgbox die
Anzahl der übertragenen Sätze aus.
4 Sprachelemente in VBA in der praktischen Anwendung
106
Bei der zweiten Variante kann die Aufgabe noch schneller erledigt werden, da auf die
Tabellenwechsel und die Zellenpositionierung verzichtet wurde. Außerdem kann bei
dieser Lösung auf die Methode Copy sowie die Methode Paste verzichtet werden.
Sub SätzeAufAnderesTabellenblattÜbertragen2()Dim Tab1 As WorksheetDim Tab2 As WorksheetDim L As LongDim i As Long
Set Tab1 = ActiveWorkbook.Worksheets("Until")Set Tab2 = ActiveWorkbook.Worksheets("Ziel")
For L = 1 To Tab1.UsedRange.Rows.CountIf Tab1.Cells(L, 1).Value = "C" Theni = 1Do Until Tab2.Cells(i, 1) = ""i = i + 1
LoopTab2.Cells(i, 1).Value = Tab1.Cells(L, 1).ValueTab2.Cells(i, 2).Value = Tab1.Cells(L, 2).ValueTab2.Cells(i, 3).Value = Tab1.Cells(L, 3).ValueTab2.Cells(i, 4).Value = Tab1.Cells(L, 4).Value
End IfNext LMsgBox "Es wurden " & i & " Sätze übertragen"
End Sub
Listing 4.48 Datensätze auf anderes Tabellenblatt übertragen (Variante 2)
Abbildung 4.10 Alle Daten wurden übertragen.
4.3 Schleifen in Excel praxisgerecht einsetzen
107
4
Geben Sie zu Beginn des Makros bekannt, welches das Ziel und welches das Aus-
gangsblatt ist. Definieren Sie dazu zwei Objektvariablen vom Typ Worksheet. Die zu
übertragenden Informationen werden dabei von einem Blatt direkt in das Zielblatt
übertragen, indem die Auflistung Cells mit den jeweiligen Variablen für die Zeilen
bestückt wird.
4.3.4 Die Schleife »Do While Loop«
Die Do While Loop-Schleife wiederholt einen Block mit Anweisungen, solange eine
Bedingung den Wert True erhält. Die Prüfung der angegebenen Bedingung erfolgt
immer zu Beginn der Schleife. Als Abbruchbedingung können Sie alles Mögliche
abfragen; beispielsweise könnten Sie eine Schleife so oft wiederholen lassen, so lange
die Zellenformatierung der Zellen sich nicht ändert.
Die Syntax dieser Schleife sieht wie folgt aus:
Do [{While} Bedingung][Anweisungen][Exit Do][Anweisungen]Loop
Die Bedingung stellt einen numerischen Ausdruck oder Zeichenfolgenausdruck dar,
der entweder True oder False ergibt. Liefert die Bedingung den Wert 0, so wird die
Bedingung als False interpretiert. Hinter den Anweisungen verbergen sich eine oder
mehrere Anweisungen, die wiederholt werden, so lange die Bedingung True erfüllt
ist.
Innerhalb einer Do While Loop-Anweisung kann eine beliebige Anzahl von Exit Do-
Anweisungen an beliebiger Stelle als Alternative zum Verlassen einer Do While Loop-
Anweisung verwendet werden. Exit Do wird oft in Zusammenhang mit der Auswer-
tung einer Bedingung (zum Beispiel If Then) eingesetzt und hat zur Folge, dass die
Ausführung mit der ersten Anweisung im Anschluss an Loop fortgesetzt wird.
Nur bestimmte Zellen addieren mit »Do While«
Gegeben sei eine Liste, aus der Sie alle Werte addieren müssen, die über dem Wert
100 liegen. Das Ergebnis soll unterhalb der Liste im Schriftschnitt Fett und mit einfa-
cher Unterstreichung ausgegeben werden.
Erfassen Sie nun folgendes Makro:
Sub AlleGroßenZahlenAddieren()Dim summe As LongDim i As Long
4 Sprachelemente in VBA in der praktischen Anwendung
108
Const Grenzwert = 100
Sheets("While").Activatesumme = 0i = 1
Do While Cells(i, 1).Value <> ""If Cells(i, 1).Value > Grenzwert _Then summe = summe + Cells(i, 1).Valuei = i + 1
Loopi = i + 2Cells(i, 1).Value = summeWith Cells(i, 1).Font.Bold = True.Underline = True
End With
End Sub
Listing 4.49 Bedingte Zahlenaddition durchführen
Abbildung 4.11 Das Endergebnis: die Summe der Liste mit Zahlen > 100
4.3 Schleifen in Excel praxisgerecht einsetzen
109
4
Bestimmen Sie in der Variablen Grenzwert selbst, wie niedrig Sie die Schwelle legen
möchten. Deklarieren Sie die Variable summe als Datentyp Long, um ganz sicherzuge-
hen, dass der Datentyp auch für die Summierung ausreicht. Prüfen Sie mit der
Anweisung If, ob die Zellen über Ihrem Grenzwert liegen. Nur dann addieren Sie den
aktuellen Zellenwert, den Sie jeweils über die Auflistung Cells ansprechen, zur Vari-
able summe. Sobald die Schleifenbedingung nicht mehr erfüllt ist, wird über die Zellen-
variable i zwei Zellen nach unten verwiesen und der Inhalt der Variablen summe in die
Zelle geschrieben. Danach erfolgt die Formatierung der Zelle über die Eigenschaften
Bold und Underline. Beachten Sie die Anweisung With, die auch hier ein wenig für
Übersichtlichkeit und weniger Schreibarbeit sorgt.
Text in Spalten aufteilen
Ein häufiger Fall in der Praxis ist folgender: Sie bekommen eine Liste und möchten
diese weiterverarbeiten. In der Liste befinden sich in manchen Spalten jeweils zwei
Informationen, die Sie lieber getrennt in einzelnen Spalten haben möchten. Denken
Sie beispielsweise an eine Kundenliste, in der der Vor- und der Nachname in einer
einzigen Spalte stehen. Genauso verhält es sich mit der Postleitzahl und dem Wohn-
ort des Kunden. Auch hier wird oft nur eine Spalte verwendet. Die Aufgabe besteht
jetzt darin, eine solche Liste umzustellen. Dazu müssen Sie zum einen neue Spalten
einfügen und zum anderen die Einträge voneinander trennen.
Das Makro für diese Aufgabe können Sie in Listing 4.50 sehen:
Sub TextInSpaltenAufteilen()Dim Nachname As StringDim Vorname As String
Abbildung 4.12 Die Ausgangssituation
4 Sprachelemente in VBA in der praktischen Anwendung
110
Dim PLZ As StringDim Ort As StringDim i As IntegerDim i2 As IntegerDim i3 As Integer
Application.ScreenUpdating = FalseSheets("While2").ActivateColumns("B:B").Insert Shift:=xlToRightRange("B1").Value = "Vorname"Columns("D:D").Insert Shift:=xlToRightRange("D1").Value = "PLZ"Range("A2").Select
Do While ActiveCell.Value <> ""i = InStr(ActiveCell.Value, ",")i2 = Len(ActiveCell.Value)Nachname = Left(ActiveCell.Value, i – 1)Vorname = Mid(ActiveCell.Value, i + 2, i2 – i)ActiveCell.Value = NachnameActiveCell.Offset(0, 1).Value = VornameActiveCell.Offset(0, 4).SelectPLZ = Left(ActiveCell.Value, 5)i3 = Len(ActiveCell.Value)Ort = Mid(ActiveCell.Value, 7, i3 – 6)ActiveCell.Offset(0, –1).Value = PLZActiveCell.Value = OrtActiveCell.Offset(1, –4).Select
LoopApplication.ScreenUpdating = True
End Sub
Listing 4.50 Text in Spalten aufteilen
Zu Beginn des Makros definieren Sie Variablen für die jeweiligen Informationen, die
Sie auf die einzelnen Spalten verteilen möchten. Zusätzlich brauchen Sie noch drei
Variablen vom Typ Integer. Fügen Sie danach zwei neue Spalten für den Vornamen
und die Postleitzahl ein, und vergeben Sie die Spaltenüberschriften. Schreiben Sie
jetzt eine Do While Loop-Schleife, die durchlaufen wird, solange Excel auf keine Leer-
zeile stößt.
4.3 Schleifen in Excel praxisgerecht einsetzen
111
4
Trennen von Zellen
Jetzt geht’s ans Auseinanderreißen der einzelnen Spalteninhalte. Beginnen Sie mit
der Namensspalte. Zuerst müssen Sie ermitteln, an welcher Position das Komma in
der Namenszelle steht, da Sie anhand dieses Trennzeichens den Nachnamen vom
Vornamen sauber trennen können. Für diese Aufgabe setzen Sie die Funktion InStr
ein. Die Funktion InStr ermittelt die Position des ersten Auftretens einer Zeichen-
folge (,) innerhalb einer anderen Zeichenfolge (aktiven Zelle). Speichern Sie die ermit-
telte Position des Kommas in der Variablen i.
Länge von Zellen ermitteln
Jetzt müssen Sie noch wissen, aus wie vielen Zeichen der Name überhaupt besteht.
Dazu verwenden Sie die Funktion Len. Bauen Sie sich nun den Nachnamen mit dem
Befehl
Nachname = Left(ActiveCell.Value, i – 1).
zusammen.
Die Funktion Left erwartet zwei Argumente: Das erste Argument steht für die Zelle,
auf die die Funktion angewendet werden soll. Das zweite Argument ist die Anzahl der
Zeichen, die von links übertragen werden sollen. Die Anzahl der Zeichen ermitteln
Sie, indem Sie von der Variablen i den Wert 1 abziehen, da Sie ja schließlich das
Komma nicht mit übertragen möchten. Separieren Sie jetzt den Vornamen:
Vorname = Mid(ActiveCell.Value, i + 2, i2 – i)
Position des Kommas ermitteln
Dazu setzen Sie die Funktion Mid ein. Die Funktion Mid gibt einen Wert zurück, der
eine bestimmte Anzahl von Zeichen aus einer Zeichenfolge enthält. Dazu müssen Sie
der Funktion drei Argumente mitgeben. Zum einen ist das wieder die Zelle, auf die
diese Funktion angewendet werden soll, dann ist es die Startposition, ab der Zeichen
übertragen werden sollen, und zu guter Letzt ist es das Argument, das die Anzahl der
Zeichen angibt, die übertragen werden sollen. Die Startposition beginnt in unserem
Beispiel zwei Stellen hinter dem Kommatrennzeichen. Die Anzahl der Zeichen, die
übertragen werden sollen, ergibt sich aus der Gesamtlänge der Zelle abzüglich der
Zeichen bis zum Komma.
Übertragen Sie nun die Variableninhalte in die dafür vorgesehenen Zellen. Danach
springen Sie zu der Zelle, die die Postleitzahl und den Ort enthält.
Da die Postleitzahl genau aus fünf Zeichen besteht, können Sie diese Information mit
der Funktion Left direkt abgreifen und in der Variablen PLZ speichern. Anders ver-
hält es sich beim Ort. Dazu setzen Sie die Funktion Mid ein:
Ort = Mid(ActiveCell.Value, 7, i3 – 6)
4 Sprachelemente in VBA in der praktischen Anwendung
112
Position des Leerzeichens herausfinden
Das zweite Argument, die Startposition, ab der Zeichen übertragen werden sollen,
ergibt sich aus der Anzahl Zeichen der Postleitzahl und einem Leerzeichen. Die
Anzahl der zu übertragenden Zeichen ergibt sich aus der Gesamtlänge der Zelle
abzüglich des Wertes 6 (Postleitzahl inklusive eines Leerzeichens). Füllen Sie jetzt die
Zellen mit den Variablen für die Postleitzahl und den Ort. Danach positionieren Sie
den Mauszeiger in die nächste Zeile der Spalte A. Die Schleife beginnt dann wieder
von vorne und läuft so lange, bis alle Sätze verarbeitet worden sind.
Artikelnummern prüfen
In der nächsten Aufgabe sollen auf einem Tabellenblatt Artikelnummern geprüft
und falsche Artikelnummern ausgegeben werden. Dazu müssen Sie zuerst die Gül-
tigkeit Ihrer Artikelnummern festlegen:
Gültige Nummern sind:
� alle Artikelnummern, die genau sechs Zeichen lang sind und
� als letztes Zeichen den Buchstaben T enthalten.
Sub FalscheArtikelNummernErmitteln()Dim i As LongDim z As Integer
Sheets("ArtikelNummer").Activatei = 2z = 0
Do While Cells(i, 1).Value <> ""If Len(Cells(i, 1).Value) <> 6 _Or Right(Cells(i, 1).Value, 1) <> "T" Then
Abbildung 4.13 Das Endergebnis: Alle Informationen sind auf einzelne Spalten verteilt.
4.3 Schleifen in Excel praxisgerecht einsetzen
113
4
MsgBox "Falsche Artikelnummer in " & _Cells(i, 1).Addressz = z + 1
End Ifi = i + 1LoopMsgBox z & " falsche Artikelnummern gefunden!"End Sub
Listing 4.51 Artikelnummern prüfen
Haben Sie es bemerkt? In diesem Beispiel wurde die Funktion Right eingesetzt. Die
Funktion Right gibt einen Wert zurück, der eine bestimmte Anzahl von Zeichen von
der rechten Seite (dem Ende) einer Zeichenfolge enthält. Da Sie lediglich das letzte
Zeichen prüfen wollen, geben Sie als zweites Argument den Wert 1 ein. Die Gesamt-
länge der Zeichen einer Zeile können Sie über die Funktion Len ermitteln.
Abbildung 4.14 Prüfen der Artikelnummern
477
9
Kapitel 9
Diagramme und Pivot-Tabellen-berichte programmieren
In diesem Kapitel werden zwei Themen behandelt. Im ersten Teil ler-
nen Sie, wie Sie Diagramme erstellen, bearbeiten und löschen können.
Im zweiten Teil wird die Programmierung mit Pivot-Tabellenberichten
gezeigt.
Im ersten Teil werden unter anderem folgende Fragen beantwortet:
� Wie erstelle ich verschiedene Diagramme auf einem separaten Blatt?
� Wie erzeuge ich ein eingebettetes Diagramm?
� Wie kann ich Diagramme aus einer Arbeitsmappe entfernen?
� Wie kann ich Diagramme ansprechen?
� Wie kann ich Daten und ein Diagramm im Wechsel ein- und ausblenden?
� Wie kann ich Diagrammen Datenbeschriftungen hinzufügen?
� Wie kann ich Höhe und Breite eines Diagramms genau festlegen?
� Wie kann ich Diagramme selbst skalieren?
� Wie kann ich Diagramme als Grafik speichern?
� Wie kann ich Datenreihen formatieren?
� Wie erstelle ich ein dynamisches Diagramm?
Die Makros zur Programmierung von Diagrammen finden Sie auf der CD-ROM im
Verzeichnis KAP09 in der Datei DIAGRAMME.XLS.
Hinweis
Seit der Version von Excel 2000 ist es möglich, Diagramme direkt aus Pivot-Tabel-
lenberichten zu generieren.
Im Pivot-Teil des Kapitels finden Sie u. a. Antworten auf folgende Fragen:
� Wie kann ich einen Pivot-Tabellenbericht erstellen?
� Wie aktualisiere ich Pivot-Tabellenberichte?
� Wie kann ich Pivot-Tabellenberichte dynamisch erweitern?
9 Diagramme und Pivot-Tabellenberichte programmieren
478
� Wie kann ich Pivot-Tabellen sortieren?
� Welche Möglichkeiten bietet mir das AutoFormat bei Pivot-Tabellen?
� Wie kann ich das Seitenfeld einer Pivot-Tabelle bedienen?
� Wie kann ich einen Slicer einfügen? (ab Excel 2010)
Die Makros zur Programmierung von Pivot-Tabellenberichten finden Sie auf der CD-
ROM im Verzeichnis KAP09 in der Datei PIVOT.XLS bzw. PIVOT.XLSM.
9.1 Diagramme erstellen
Bei der Erstellung von Diagrammen haben Sie die Auswahl aus mehreren Diagramm-
typen. Für den richtigen Diagrammtyp ist die Eigenschaft ChartType verantwortlich.
In Tabelle 9.1 sehen Sie exemplarisch eine kleine Auswahl an möglichen Diagramm-
typen, die über eine xlChartType-Konstante identifiziert werden.
Diagrammtyp Konstante
Säulendiagramm (gruppiert) xlColumnClustered
Säulendiagramm (gestapelt) xlColumnStacked
Säulendiagramm 3D-Darstellung xl3DColumn
Balkendiagramm (gruppiert) xlBarClustered
Balkendiagramm (gestapelt) xlBarStacked
Liniendiagramm xlLine
Kreisdiagramm xlPie
Punktdiagramm xlXYScatter
Blasendiagramm xlBubble
Flächendiagramm xlArea
Ringdiagramm xlDoughnut
Netzdiagramm xlRadar
Oberflächendiagramm xlSurface
Kursdiagramm xlStockHLC
Tabelle 9.1 Die wichtigsten Diagrammtypen
9.1 Diagramme erstellen
479
9
Neben den in der Tabelle abgebildeten Diagrammtypen gibt es noch Zylinder-, Kegel-
und Pyramidendiagramme sowie zu jedem Diagramm zahlreiche Untertypen. Eine
komplette Liste der vorhandenen Diagramme in Excel bekommen Sie in der Online-
Hilfe unter dem Stichwort ChartType.
9.1.1 Kosten im Säulendiagramm darstellen
Das Säulendiagramm ist das Standarddiagramm in Excel. Sie können ein Säulendia-
gramm ganz schnell in Excel erstellen, indem Sie Ihren Datenbereich markieren und
einfach die Taste (F11) drücken. An diesem Standarddiagramm fehlen eigentlich nur
noch ein Titel und eventuell noch ein paar Datenbeschriftungen.
Erzeugen Sie ein Säulendiagramm, dessen Titel sich vom Tabellennamen ableitet.
Das Makro für diese Aufgabe lautet:
Sub DiagrammErstellen01()Dim Bereich As RangeDim s As String
Set Bereich = Range("A2:D6")s = ActiveSheet.NameCharts.AddWith ActiveChart.ChartType = xlColumnClustered.SetSourceData _Source:=Bereich, _PlotBy:=xlRows.HasTitle = True.ChartTitle.Text = s
End With
End Sub
Listing 9.1 Monatliche Kosten in einem Säulendiagramm darstellen
Im ersten Schritt legen Sie den Bereich fest, der die Datenbasis für das Diagramm ent-
hält. Dazu speichern Sie die Adresse des Bereichs in der Range-Variablen Bereich.
Danach ermitteln Sie den Namen des aktiven Tabellenblattes über die Eigenschaften
ActiveSheet und Name und speichern ihn in der Variablen s. Mit der Methode Add
erstellen Sie zunächst ein neues Diagrammblatt. Danach legen Sie das Aussehen des
Diagramms fest. Mit der Eigenschaft ChartType bestimmen Sie den Diagrammtyp.
9 Diagramme und Pivot-Tabellenberichte programmieren
480
Syntax und Argumente von »SetSourceData«
Über die Methode SetSourceData geben Sie an, woher Excel die Daten für das Dia-
gramm bekommt. Diese Methode benötigt zwei Argumente. Dem ersten Argument,
Source, übergeben Sie die Variable Bereich. Mit dem zweiten Argument, PlotBy, legen
Sie fest, wie die Daten angezeigt werden sollen. Wählen Sie entweder die Konstante
xlColumns oder xlRows.
Abbildung 9.1 Die Ausgangstabelle mit den monatlichen Kosten
Abbildung 9.2 Das Ergebnis: das erste Säulendiagramm per Makro
9.1 Diagramme erstellen
481
9
Die Eigenschaft HasTitle müssen Sie auf den Wert True setzen, damit eine Über-
schrift im Diagramm angezeigt werden kann. Die Überschrift des Diagramms erstel-
len Sie mithilfe der Eigenschaft ChartTitle und der Eigenschaft Text, die Sie aus der
Variablen s herausholen.
9.1.2 Das Zylinderdiagramm auf Knopfdruck
Eine Variante, die der Standarderstellung von Diagrammen entspricht – also Daten
zu markieren und danach die Taste (F11) zu drücken –, liefert das Makro aus Listing
9.2. Dieses Makro erstellt anhand der markierten Daten ein Zylinderdiagramm
(Abbildung 9.3) auf einem separaten Diagrammblatt.
Sub DiagrammblattEinfügen()
ActiveWorkbook.Names.Add _Name:="ST_Diagramm", RefersToR1C1:=SelectionCharts.AddActiveChart.ApplyCustomType _
Abbildung 9.3 Auch andere Diagrammtypen sind jederzeit einsetzbar.
9 Diagramme und Pivot-Tabellenberichte programmieren
482
ChartType:=xlCylinderColClustered
End Sub
Listing 9.2 Ein Diagramm anhand markierter Zellen einfügen
Mit dieser Lösung sind Sie nicht mehr auf den Standarddiagrammtyp fixiert, son-
dern können ganz flexibel selbst entscheiden, welchen Diagrammtyp Sie einsetzen
möchten.
9.1.3 Das Balkendiagramm aus Daten in der Umgebung
Bei der letzten Aufgabe haben Sie auf dem Tabellenblatt einen Datenbereich mar-
kiert und anschließend ein Makro gestartet, das Ihnen automatisch das Zylinder-
diagramm erstellt hat. Im Makro aus Listing 9.3 entfällt sogar noch der Schritt, bei
dem Sie Ihre Datenbasis über eine Markierung festlegen. Hier ermittelt Excel von
ganz allein die zur Darstellung benötigten Daten:
Sub DiagrammAusUmliegendemBereich()
Dim s As String
s = ActiveSheet.NameCharts.AddActiveChart.ChartType = xl3DBarClusteredActiveChart.SetSourceData _Source:=Sheets(s).Range("A2").CurrentRegion, _PlotBy:=xlColumns
End Sub
Listing 9.3 Diagramm aus umliegendem Datenbereich bilden
Das neue Diagrammblatt wird noch leer eingefügt. Über die Eigenschaft ChartType
können Sie ein Diagramm Ihrer Wahl (siehe Tabelle 9.1) festlegen. Die Datenbasis
für das Diagramm ermitteln Sie mit der Methode SetSourceData, der Sie im Ar-
gument Source das aktive Tabellenblatt, die Startzelle A2 sowie die Eigenschaft
CurrentRegion mitgeben. Die Eigenschaft CurrentRegion ermittelt automatisch für
Sie den umliegenden Bereich um Zelle A2, der von Leerzeilen bzw. Leerspalten um-
schlossen wird.
9.1 Diagramme erstellen
483
9
9.1.4 Tagesumsätze im Liniendiagramm anzeigen
Um Schwankungen in den Tagesumsätzen besser zu analysieren, können Sie ein Li-
niendiagramm generieren. Dazu erstellen Sie dieses Mal kein extra Diagrammblatt,
sondern ordnen das Diagramm neben den Umsatzdaten auf demselben Tabellen-
blatt an.
Das eingebettete Diagramm erstellen Sie mit dem Makro aus Listing 9.4:
Sub DiagrammErstellen02()Dim Dia As ChartObjectDim s As StringDim i As Integer
s = ActiveSheet.NameActiveSheet.ChartObjects.DeleteSet Dia = ActiveSheet.ChartObjects.Add _(175, 15, 300, 250)Dia.Name = "Umsätze April"i = ActiveSheet.Range("B1").End(xlDown).Row
Abbildung 9.4 Das Balkendiagramm mit nur einer einzigen Aktion erstellen
9 Diagramme und Pivot-Tabellenberichte programmieren
484
Range("A2:B" & i).CopyActiveSheet.ChartObjects("Umsätze April").ActivateActiveChart.SeriesCollection.Paste _Rowcol:=xlColumns, SeriesLabels:=False, _CategoryLabels:=True, Replace:=True, NewSeries:=TrueApplication.CutCopyMode = False
With ActiveChart.ChartType = xlLineMarkers.HasLegend = False.HasTitle = True.ChartTitle.Text = s
End WithRange("A1").Select
End Sub
Listing 9.4 Tägliche Umsätze in einem Liniendiagramm anzeigen
Im ersten Schritt ermitteln Sie den Tabellennamen der aktiven Tabelle. Dieser Tabel-
lenname soll später die Überschrift des Diagramms werden. Da Sie ein eingebettetes
Diagramm einfügen möchten, müssen Sie dafür Sorge tragen, dass bei mehrmaligem
Starten des Makros nicht mehrere Diagramme übereinander eingefügt werden.
Löschen Sie daher zu Beginn alle integrierten Diagramme auf dem Arbeitsblatt über
die Methode Delete. Danach fügen Sie mit der Methode Add ein noch leeres Chart-
Objekt in Ihre Tabelle ein. Dabei können Sie die genaue Position des ChartObjekts
exakt festlegen. Die vier Zahlenwerte entsprechen den Angaben zum linken Rand,
oberen Rand, Breite und Höhe. Die Angaben werden in Punkt ausgegeben und bezie-
hen sich relativ auf die obere linke Ecke der Zelle A1 oder auf die obere linke Ecke des
Diagramms.
Geben Sie als Nächstes dem eingebetteten Diagramm einen Namen. Als Nächstes
müssen Sie herausbekommen, wie viele Tagesumsätze im Diagramm angezeigt wer-
den sollen. Dazu ermitteln Sie die letzte belegte Zelle in Spalte B und speichern die
Zeilennummer in der Variablen i. Markieren Sie den Bereich, und kopieren Sie diesen
mit der Methode Copy. Markieren Sie danach das gerade eingefügte Diagramm. Um
die kopierten Daten einzufügen, verwenden Sie die Methode Paste der SeriesCollec-
tion-Auflistung.
� Die Syntax: Die Methode Paste verwendet mehrere Argumente und hat folgende
Syntax:
Paste(Rowcol, SeriesLabels, CategoryLabels, Replace, NewSeries)
9.1 Diagramme erstellen
485
9
� Die Argumente der Methode Paste:
– Im ersten Argument, RowCol, geben Sie Auskunft darüber, ob sich die Daten in
Zeilen oder Spalten befinden. Zulässig sind hierbei die Konstanten xlColumns
oder xlRows.
– Das Argument SeriesLabels bestimmt, woher Excel die Beschriftung für die
Datenreihen nehmen soll. Wird der Wert auf True gesetzt, wird der Inhalt der
Zelle in der ersten Spalte jeder Zeile (bzw. der ersten Zeile jeder Spalte) als Name
für die Datenreihe in der betreffenden Zeile (bzw. Spalte) verwendet. Setzen Sie
dieses Argument auf den Wert False, wenn der Inhalt der Zelle in der ersten
Spalte jeder Zeile (bzw. der ersten Zeile jeder Spalte) als erster Datenpunkt der
Datenreihe verwendet werden soll.
– Das Argument CategoryLabels weist den Wert True auf, wenn der Inhalt der ers-
ten Zeile (bzw. Spalte) als Rubrik des Diagramms verwendet wird. Setzen Sie das
Argument auf den Wert False, wenn der Inhalt der ersten Zeile (bzw. Spalte) als
erste Datenreihe im Diagramm verwendet werden soll.
– Das Argument Replace ist standardmäßig auf den Wert True gesetzt. Mit True
werden beim Ersetzen vorhandener Kategorien durch Informationen aus dem
kopierten Bereich Kategorien angewendet. Mit False werden neue Kategorien
eingefügt, ohne die alten zu ersetzen.
– Das Argument NewSeries hat dann den Wert True, wenn die Daten als eine neue
Datenreihe eingefügt werden sollen. Setzen Sie das Argument auf den Wert
False, wenn Sie die Daten als neue Datenpunkte in eine vorhandene Datenreihe
einfügen möchten.
Nach der Kopier- und Einfügeaktion ist nach wie vor der Kopierrahmen aktiv. Setzen
Sie die Eigenschaft CutCopyMode auf den Wert False, um den Ausschneide- bzw.
Kopiermodus zu deaktivieren und den Laufrahmen zu entfernen. Als letzte Aufgabe
weisen Sie dem Diagramm den richtigen Diagrammtyp zu, verzichten auf eine
Legende, indem Sie die Eigenschaft HasLegend auf den Wert False setzen, und zeigen
die Überschrift im Diagramm an.
Tipp
Ist Ihnen während der Diagrammerstellung zu viel Bewegung auf dem Bildschirm,
dann schalten Sie die Bildschirmaktualisierung zu Beginn des Makros mit der
Anweisung Application.Screenupdating = False ab. Am Ende des Makros schalten
Sie die Aktualisierung des Bildschirms wieder ein, indem Sie diese Eigenschaft auf
den Wert True setzen.
9 Diagramme und Pivot-Tabellenberichte programmieren
486
9.1.5 Tagesgenaue Formatierung im Punktdiagramm
Fügen Sie jetzt ein Punktdiagramm ein, aus dem Sie Ihre täglichen Ausgaben ablesen
können. Als Zusatzfunktion sollen alle Punkte aus der Vergangenheit mit der stan-
dardmäßig ausgewählten Farbe Blau belegt und alle in der Zukunft liegenden Plan-
werte mit einer anderen Farbe versehen werden. Des Weiteren soll die Überschrift
etwas größer erscheinen.
Das Makro für diese Aufgabe sehen Sie in Listing 9.5:
Sub PunktediagrammTagesgenau()Dim Dia As ChartObjectDim s As StringDim DArray As VariantDim Punkt As Point
s = ActiveSheet.Range("A4").ValueActiveSheet.ChartObjects.DeleteSet Dia = ActiveSheet.ChartObjects.Add _(25, 60, 450, 180)Dia.Name = "Ausgaben"Range("A3:H4").Copy
Abbildung 9.5 Das Ergebnis: Tagesumsätze im Liniendiagramm
9.1 Diagramme erstellen
487
9
ActiveSheet.ChartObjects("Ausgaben").ActivateActiveChart.SeriesCollection.Paste _Rowcol:=xlRows, SeriesLabels:=True, _CategoryLabels:=True, Replace:=True, NewSeries:=TrueApplication.CutCopyMode = False
With ActiveChart.ChartType = xlXYScatter.HasLegend = False.HasTitle = True.ChartTitle.Text = s.ChartTitle.Font.Name = "Arial".ChartTitle.Font.Size = 14.PlotBy = xlRowsEnd With
'Zweiter Teil des MakrosActiveSheet.ChartObjects("Ausgaben").ActivateWith ActiveChart.SeriesCollection(1)DArray = .XValuesFor Each Punkt In .Pointsi = i + 1If DArray(i) > Now ThenPunkt.MarkerBackgroundColorIndex = 2Punkt.MarkerForegroundColorIndex = 1
End IfNext
End WithRange("A1").Select
End Sub
Listing 9.5 Punktdiagramm einfügen und formatieren
Da auf die Erstellung eines Diagramms schon auf den vorigen Seiten ausgiebig einge-
gangen wurde, sehen wir uns direkt den zweiten Teil von Listing 9.5 an. Dort wird das
Diagramm aktiviert und die Datenreihe markiert. Jetzt lesen Sie die einzelnen Werte
der Datenreihe in das Datenfeld DArray ein. Im Anschluss daran wird eine For Each
Next-Schleife durchlaufen, in der geprüft wird, ob die einzelnen Punkte in der Ver-
gangenheit bzw. in der Zukunft liegen. Liegen die Punkte in der Zukunft, wird über
die MarkerBackgroundColorIndex-Eigenschaft die Punkt-Innenfläche mit der Farbe
Weiß versehen. Die Punktumrandung erhält die Farbe Schwarz und wird durch die
Eigenschaft MarkerForegroundColorIndex festgelegt.
9 Diagramme und Pivot-Tabellenberichte programmieren
488
9.1.6 Mittelwert in Diagramm bilden
In der folgenden Aufgabe wird aus einem Datenbereich ein Diagramm erstellt. Die
Ausgangstabelle sehen Sie in Abbildung 9.7.
Ihre Aufgabe besteht nun darin, ein Säulendiagramm zu erstellen. Dabei soll im Dia-
gramm eine Linie eingezeichnet werden, die den Mittelwert der Kosten darstellen
soll. Das Makro für diese Aufgabe finden Sie in Listing 9.6:
Abbildung 9.6 Das Endergebnis: punktgenaue Formatierung in Abhängigkeit vom
aktuellen Datum
Abbildung 9.7 Die Ausgangsbasis für Ihr Diagramm
9.1 Diagramme erstellen
489
9
Sub DiagrammMitMittelwertEinfügen()Dim Datenreihe As SeriesDim Punkt As PointDim i As IntegerDim e As Integer
Sheets("Tabelle10").ActivateCharts.AddActiveChart.ChartType = xlColumnClusteredActiveChart.SetSourceData _Source:=Sheets("Tabelle10").Range("A1:G2")ActiveChart.Location _Where:=xlLocationAsObject, Name:="Tabelle10"Set Datenreihe = _ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)
With DatenreiheFor Each Punkt In .PointsPunkt.ApplyDataLabelse = e + 1i = i + Punkt.DataLabel.Text
NextEnd WithRange("A3").Value = "Mittelwert"Range("B3:G3").Value = i / eActiveChart.SeriesCollection.Add _Source:=Sheets("Tabelle10").Range("B3:G3")ActiveChart.SeriesCollection(2).ChartType = _xlLineMarkersActiveChart.SeriesCollection(2).Name = Range("A3")
End Sub
Listing 9.6 Diagramm mit Mittelwert einfügen
Fügen Sie im ersten Schritt mithilfe der Methode Add ein noch leeres Diagramm ein.
Danach bestimmen Sie über die Eigenschaft ChartType den Diagrammtyp. Um ein
Säulendiagramm zu erzeugen, geben Sie dieser Eigenschaft die Konstante xlColumn-
Clustered. Bestimmen Sie nun, welche Daten im Diagramm angezeigt werden sollen.
Dazu geben Sie in der Methode SetSourceData die genaue Position Ihrer Daten auf
der Tabelle an. Verwenden Sie die Methode Location, um das neu eingefügte Dia-
gramm zu verschieben. Indem Sie dieser Methode die Konstante xlLocationAsObject
9 Diagramme und Pivot-Tabellenberichte programmieren
490
übergeben, bestimmen Sie, dass das Diagramm als Objekt in Ihrer Tabelle angeord-
net wird. Im Argument Name müssen Sie dann noch bestimmen, auf welcher Tabelle
das Diagramm eingebettet werden soll. Im nächsten Schritt legen Sie die Beschrif-
tung der Säulen fest. Dabei sollen die Kosten direkt über den einzelnen Säulen ange-
zeigt werden. Für diesen Zweck markieren Sie die komplette Datenreihe im
Diagramm mithilfe der Anweisung ActiveSheet.ChartObjects(1).Chart.SeriesCol-
lection(1).
Erstellen Sie danach eine Schleife, die jeden einzelnen Datenpunkt im Diagramm
durchläuft und mit der Methode ApplyDataLabels die Beschriftung der Säulen vor-
nimmt. Was genau angezeigt werden soll, geben Sie mit der Anweisung DataLabel.
Text an. Damit zeigen Sie die Kosten im Diagramm an. Wurden diese Schritte durch-
geführt, dann übertragen Sie die durchschnittlichen Kosten in die Tabelle sowie in
das Diagramm.
9.2 Diagramme löschen
Möchten Sie Diagramme aus Ihrer Arbeitsmappe entfernen, so wenden Sie die
Methode Delete an. Allerdings müssen Sie dabei unterscheiden, ob Sie Diagramm-
blätter oder eingebettete Diagramme aus Ihrer Arbeitsmappe löschen möchten.
Abbildung 9.8 Das Ergebnis – ein Diagramm mit Mittelwert
9.2 Diagramme löschen
491
9
9.2.1 Diagrammblätter aus Arbeitsmappe entfernen
Um alle Diagrammblätter aus einer Arbeitsmappe zu löschen, setzen Sie das Makro
aus Listing 9.7 ein:
Sub DiagrammeEntfernen()
Application.DisplayAlerts = FalseOn Error Resume NextActiveWorkbook.Charts.DeleteApplication.DisplayAlerts = False
End Sub
Listing 9.7 Alle Diagrammblätter aus einer Arbeitsmappe entfernen
Indem Sie die Eigenschaft DisplayAlerts auf den Wert False setzen, brauchen Sie die
einzelnen Löschungen nicht zu bestätigen. Die On Error-Anweisung sorgt dafür, dass
die Verarbeitung sauber abgefangen wird, wenn überhaupt kein Diagrammblatt in
der Arbeitsmappe enthalten ist. Die Eigenschaft Charts gibt eine Auflistung aller Dia-
grammblätter der aktiven Arbeitsmappe zurück, die Sie mithilfe der Methode Delete
löschen.
Vergessen Sie nicht, die Eigenschaft DisplayAlerts wieder auf den Wert True zu set-
zen, um die Anzeige von Warnungen und Meldungen zu ermöglichen.
9.2.2 Eingebettete Diagramme aus Arbeitsmappe löschen
Um alle eingebetteten Diagramme aus einer Arbeitsmappe zu entfernen, schreiben
Sie ein Makro mit zwei Schleifen. Dies könnte so aussehen wie in Listing 9.8:
Sub AlleEingebettetenDiagrammeLöschen()Dim i As IntegerDim e As Integer
For i = 1 To Sheets.CountSheets(i).ActivateFor e = ActiveSheet.ChartObjects.Count to 1 Step – 1ActiveSheet.ChartObjects(e).delete
Next eNext i
End Sub
Listing 9.8 Alle eingebetteten Diagramme einer Arbeitsmappe löschen
9 Diagramme und Pivot-Tabellenberichte programmieren
492
Das Makro aus Listing 9.8 besteht aus einer äußeren Schleife, die dafür sorgt, dass
Tabellenblatt für Tabellenblatt abgearbeitet wird. Die zweite Schleife kontrolliert, ob
es auf einzelnen Tabellenblättern ein oder auch mehrere eingebettete Diagramme
gibt, und löscht diese über die Methode Delete.
9.3 Diagramme identifizieren
Wie Sie schon in den vorherigen Beispielen gesehen haben, muss der Name eines
Diagramms bekannt sein, um gezielt darauf zugreifen zu können. Die folgende
Lösung schreibt alle Namen der in der Arbeitsmappe verwendeten Diagramme in
den Direktbereich Ihrer Entwicklungsumgebung.
Sub DiagrammNamenErmitteln()Dim Blatt As WorksheetDim i As IntegerDim Dia As ChartObject
For i = 1 To Sheets.CountFor Each Dia In Sheets(i).ChartObjectsDebug.Print "Tabellennamen: " & Sheets(i).Name & _vbLf & "Diagrammnamen: " & Dia.Name & _vbLf & vbLf
NextNext i
End Sub
Listing 9.9 Diagrammnamen und Position in den Direktbereich schreiben
Definieren Sie zuerst eine Variable vom Typ ChartObject. Danach bilden Sie eine
äußere Schleife, die alle Tabellenblätter der Arbeitsblätter ansteuert, sowie eine
innere Schleife, die die Namen der einzelnen Diagramme und deren Position mit der
Anweisung Debug.Print in den Direktbereich schreibt.
9.3.1 Diagramme umbenennen
Wenn ein neues Diagramm eingefügt wird, bekommt es den Namen Chart mit
einer fortlaufenden Nummer. Sie können diesen Namen ändern und durch einen
eigenen Namen ersetzen. Dazu starten Sie das folgende Makro aus Listing 9.10.
9.4 Datenbasis und Diagramm im Wechsel
493
9
Sub DiagrammUmbenennen()
On Error Resume NextSheets("Tabelle2").ChartObjects(1).Name = "NeuerName"MsgBox Sheets("Tabelle2").ChartObjects(1).Name
End Sub
Listing 9.10 Eingebettete Diagramme umbenennen
Über die Eigenschaft Name geben Sie dem Diagrammobjekt einen neuen Namen und
geben den Namen anschließend in einer Meldung auf dem Bildschirm aus.
9.4 Datenbasis und Diagramm im Wechsel
Um Platz auf Ihrer Tabelle zu sparen, können Sie Diagramm und Datenquelle auch
übereinander anordnen und diese im Wechsel ein- und ausblenden. Die beiden
Makros für diese Aufgabe entnehmen Sie Listing 9.11 und Listing 9.12:
Sub DiagrammAusblenden()
Sheets("Tabelle1").ChartObjects(1).Visible = False
End Sub
Listing 9.11 Diagramm ausblenden
Sub DiagrammEinblenden()
Sheets("Tabelle1").ChartObjects(1).Visible = True
End Sub
Listing 9.12 Diagramm einblenden
Nachdem Sie Ihr Diagramm direkt auf Ihre Datenbasis gelegt haben, starten Sie das
Makro DiagrammAusblenden, um die Datenbasis anzuzeigen, bzw. das Makro Diagramm-
Einblenden, um Ihr Diagramm wieder sichtbar zu machen. Diesen tollen Effekt errei-
chen Sie, indem die Eigenschaft Visible auf den Wert False bzw. auf den Wert True
gesetzt wird.
9 Diagramme und Pivot-Tabellenberichte programmieren
494
9.5 Datenbeschriftungen hinzufügen und auslesen
Stellen Sie sich vor, Sie haben ein Punktdiagramm, das Ihnen Ihre täglichen Kosten
anzeigt. Jetzt möchten Sie ganz gezielt einzelne Punkte dokumentieren, d. h., den
Punkten Bemerkungen hinzufügen. Diese Aufgabe können Sie über den Einsatz von
zwei Input-Boxen lösen. In der ersten Input-Box geben Sie den Punkt an, zu dem Sie
einen Kommentar hinzufügen möchten, und in der zweiten Input-Box erfassen Sie
den eigentlichen Kommentar zum Datenpunkt.
Das Makro zum Hinzufügen von Kommentaren zu einzelnen Datenpunkten sehen
Sie in Listing 9.13:
Sub DatenbeschriftungHinzufügen()Dim i As Integer
i = InputBox("Welcher Punkt soll kommentiert werden?", _"Kommentierung des Diagramms")If i = 0 Then Exit SubSheets("Punktediagramm").ChartObjects(1).SelectActiveChart.SeriesCollection(1) _.Points(i).ApplyDataLabels _Type:=xlDataLabelsShowLabel, AutoText:=TrueActiveChart.SeriesCollection(1). _Points(i).DataLabel.Text _= InputBox("Bitte Text der Kommentierung eingeben")
End Sub
Listing 9.13 Kommentare zu Datenpunkten in Diagrammen erfassen
Abbildung 9.9 Das Diagramm liegt über den Daten.
9.5 Datenbeschriftungen hinzufügen und auslesen
495
9
Mithilfe der Methode ApplyDataLabels weisen Sie einem Datenpunkt, der Datenreihe
oder allen Datenreihen im Diagrammblatt Datenbeschriftungen zu.
� Die Syntax: Die Methode hat folgende Syntax:
ApplyDataLabels(Type, LegendKey, AutoText, HasLeaderLines)
� Die Argumente der Methode ApplyDataLabels:
– Das Argument Type stellt den Typ der Datenbeschriftung dar. Zulässig ist eine
der XlDataLabelsType-Konstanten aus Tabelle 9.2.
– Das Argument LegendKey hat den Wert True, wenn Excel die Legende neben dem
Datenpunkt anzeigen soll. Dies ist aber in den meisten Fällen unerwünscht. Aus
diesem Grund ist der Standardwert für dieses Argument False.
– Beim Argument AutoText:=True erzeugt das Objekt, basierend auf dem Inhalt,
automatisch einen angemessenen Text.
– Dem Argument HasLeaderLines weisen Sie den Wert True zu, wenn die Reihe
Führungslinien besitzen soll.
In der zweiten Input-Box geben Sie den Text Ihrer Kommentierung ein, der über das
Objekt DataLabel als Text für den Datenpunkt eingefügt wird.
Konstante Beschreibung
xlDataLabelsShowNone keine Datenbeschriftung
xlDataLabelsShowValue Wert für den Datenpunkt (Wenn dieses
Argument nicht angegeben wird, wird ein
Wert angenommen.)
XlDataLabelsShowPercent Prozentsatz der Summe (nur für Kreis- und
Ringdiagramme verfügbar)
XlDataLabelsShowLabel Rubrikenbeschriftung für den Datenpunkt
(Dies ist der Standardwert.)
XlDataLabelsShowLabelAndPercent Prozentsatz der Summe und Rubriken-
beschriftung für den Datenpunkt (nur für
Kreis- und Ringdiagramme verfügbar)
Tabelle 9.2 Die Konstanten für die Datenbeschriftung bei Diagrammen
9 Diagramme und Pivot-Tabellenberichte programmieren
496
9.5.1 Datenbeschriftung aus Zellen verwenden
Wenn Sie möchten, kann die Beschriftung Ihrer Diagramme auch direkt aus Zellen
übernommen werden. Das können Sie sowohl für den Titel des Diagramms als auch
für die einzelne Punktbeschriftung vorsehen.
Im Makro aus Listing 9.14 werden sowohl der Diagrammtitel als auch die Beschrif-
tung der Datenpunkte aus Zellen bezogen:
Sub DatenbeschriftungAusZellen()Dim DatenReihe As SeriesDim Punkte As PointsDim Punkt As PointDim i As Integer
Range("A5").SelectSet DatenReihe = _ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)DatenReihe.HasDataLabels = TrueSet Punkte = DatenReihe.Points
For Each Punkt In Punktei = i + 1
Abbildung 9.10 Kommentar zum Datenpunkt erfassen
9.5 Datenbeschriftungen hinzufügen und auslesen
497
9
Punkt.DataLabel.Text = ActiveCell.Offset(0, i).ValuePunkt.DataLabel.Font.Bold = True
Next PunktActiveSheet.ChartObjects(1).Select
With ActiveChart.HasTitle = True.ChartTitle.Text = Range("A2").Value
End With
End Sub
Listing 9.14 Die Beschriftung eines Diagramms wird aus Zelleninhalten gebildet.
Erstellen Sie zuerst eine Variable vom Typ Series. Damit können Sie eine ganze
Datenreihe eines Diagramms darstellen. In der Variablen DatenReihe speichern Sie
die Datenreihe in Ihrem eingebetteten Diagramm. Indem Sie die Eigenschaft Has-
DataLabels auf den Wert True setzen, geben Sie bekannt, dass das eingebettete Dia-
gramm Datenbeschriftungen erhalten soll. Möchten Sie als Datenbeschriftung die
Bezeichnung des Datenpunkts anzeigen, dann verwenden Sie die Anweisung
Range("A4").Select; möchten Sie hingegen den Wert des Datenpunkts anzeigen, ver-
wenden Sie die Anweisung Range("A5").Select. Diese Angabe bestimmt, wo der
Startpunkt für die Beschriftung des Diagramms ist. Sie benötigen jetzt noch weitere
Variablen: eine Variable vom Typ Points, die alle Punkte in einer Datenreihe symbo-
lisiert, sowie eine Variable vom Typ Point, die genau einen Punkt in einer Datenreihe
darstellt. Mit der Anweisung Set weisen Sie der Variablen Punkte einen Verweis auf
das Objekt Points zu.
Nun können Sie mithilfe einer For Each Next-Schleife den einzelnen Diagrammpunk-
ten einen Text zuweisen. Den Text entnehmen Sie den Zelleneinträgen der Zeile 4
bzw. der Zeile 5. Dazu wenden Sie die Eigenschaft Text auf das Objekt DataLabels an.
Als Zellenbezug für die Beschriftung verwenden Sie die jeweils dazugehörige Zelle,
auf die Sie mit jedem Punkt ein Stück weiter nach rechts verweisen. Für das Versetzen
der Zelle ist die Eigenschaft Offset verantwortlich. Das erste Argument der Verschie-
bung stellt die Zeile dar und beinhaltet im Beispiel den Wert 0, was bedeutet, dass der
Mauszeiger in der aktuellen Zeile verbleibt. Das zweite Argument stellt die Spalten-
verschiebung dar und muss je Punkt um den Wert 1 erhöht werden. Um die einzelnen
Datenbeschriftungen deutlich erkennen zu können, formatieren Sie die Datenbe-
schriftung mit dem Schriftschnitt Fett. Dazu setzen Sie die Eigenschaft Bold ein. Im
Anschluss daran kümmern Sie sich um den Titel, den Sie aus der Zelle A2 beziehen.
Dazu markieren Sie das Diagramm und geben über die Eigenschaft HasTitle an, dass
ein Diagrammtitel angezeigt werden soll. Mit der Eigenschaft Text weisen Sie dem
9 Diagramme und Pivot-Tabellenberichte programmieren
498
Objekt ChartTitel einen Text zu, den Sie in diesem Fall aber aus einer Zelle entneh-
men.
9.5.2 Daten aus Diagrammen auslesen
Vielleicht ist es Ihnen auch schon einmal passiert: Sie haben zwar ein Diagramm in
einer Excel-Tabelle, die dazugehörige Datenbasis ist aber nicht mehr auffindbar. Sie
müssen jetzt zusehen, wie Sie wieder an die Datenbasis herankommen. Dazu können
Sie ein Makro verfassen, das Ihnen alle Werte aus dem Diagramm in eine Tabelle
schreibt.
Um aus einem eingebetteten Diagramm die einzelnen Werte herauszulesen, setzen
Sie das Makro aus Listing 9.15 ein:
Sub DiagrammWerteAuslesen()Dim s As StringDim i As VariantDim Element As ObjectDim iz As Integer
s = ActiveSheet.NameActiveSheet.ChartObjects(1).Selecti = UBound(ActiveChart.SeriesCollection(1).Values)
Abbildung 9.11 Die Beschriftungen des Diagramms aus Zellen
9.5 Datenbeschriftungen hinzufügen und auslesen
499
9
Worksheets(s).Cells(1, 1) = "Monate"
With Worksheets(s).Range(.Cells(2, 1), _.Cells(i + 1, 1)) = _Application.Transpose _(ActiveChart.SeriesCollection(1).XValues)
End Withiz = 2
For Each Element In ActiveChart.SeriesCollectionWorksheets(s).Cells(1, iz) = Element.NameWith Worksheets(s).Range(.Cells(2, iz), _.Cells(i + 1, iz)) = _Application.Transpose(Element.Values)
End Withiz = iz + 1
Next
End Sub
Listing 9.15 Datenwerte aus einem Diagramm auslesen
Abbildung 9.12 Die Ausgangsbasis: ein Diagramm, jedoch ohne Datenbasis
9 Diagramme und Pivot-Tabellenberichte programmieren
500
Ermitteln Sie zuerst einmal den Namen des Tabellenblatts, und speichern Sie ihn in
der Variablen s. Im nächsten Schritt aktivieren Sie das eingebettete Diagramm und
ermitteln über die Funktion UBound den höchsten Index der Datenreihe im Dia-
gramm. Für das Beispiel bedeutet dieser Index die Anzahl der Säulen. Über die Eigen-
schaft Cells positionieren Sie dann genau auf die erste Zelle des Tabellenblattes und
schreiben dort die Überschrift der Tabelle hinein. Im Anschluss daran markieren Sie
den Bereich (Zellen in Spalte A), in dem die X-Achsenbeschriftungen eingefügt wer-
den sollen. Setzen Sie die Funktion Transpose ein, um die Überschriften der X-Achse
einzufügen. Dabei dreht die Funktion Transpose die Richtung für das Einfügen der
Werte um. Da die X-Achsenbeschriftungen von links nach rechts vorliegen, sorgt
diese Funktion dafür, dass die Achsenbeschriftungen von oben nach unten eingefügt
werden. Damit haben Sie die erste Spalte mit den Überschriften der X-Achse gefüllt.
Positionieren Sie danach gleich in die zweite Spalte B, indem Sie die Variable iz auf
den Wert 2 setzen. Setzen Sie nun eine For Each Next-Schleife auf, bei der Sie alle
Datenwerte aus dem Diagramm lesen. In die erste Zeile schreiben Sie dabei jeweils
die Bezeichnung der Datenreihe. Die Werte transferieren Sie wieder mithilfe der
Funktion Transpose in die Spalten B und C.
Abbildung 9.13 Das Endergebnis: die restaurierte Datenbasis
9.6 Diagramme positionieren und skalieren
501
9
9.6 Diagramme positionieren und skalieren
Wenn Sie mit eingebetteten Diagrammen arbeiten, müssen Sie vorher genau festle-
gen, wo diese auf dem Tabellenblatt angeordnet werden sollen. Auf den vorigen Sei-
ten haben Sie dazu die Methode Add eingesetzt, der Sie die vier Argumente linker
Rand, oberer Rand, Breite und Höhe mitgegeben haben. Dabei wurde die Positionie-
rung jeweils in Punkt angegeben. Haben Sie ein eingebettetes Diagramm aber schon
erstellt und möchten Sie nachträglich die Position des Diagramms ändern, dann
müssen Sie anders vorgehen. Greifen Sie direkt auf ein eingebettetes Diagramm zu,
und verwenden Sie die beiden Eigenschaften Left und Top, um die obere linke Ecke
des Diagramms zu bestimmen:
Sub DiagrammPositionieren()
With ActiveSheet.Shapes("Diagramm 1").Left = Range("A5").Left.Top = Range("A5").Top
End With
End Sub
Listing 9.16 Eingebettetes Diagramm auf Tabellenblatt positionieren
Über die Eigenschaft ActiveSheet greifen Sie direkt auf das aktive Tabellenblatt zu.
Auf diesem Tabellenblatt befindet sich ein eingebettetes Diagramm, das Sie als
Shape-Objekt identifizieren können. Ein Shape-Objekt kann aber auch eine Auto-
Form, eine ClipArt oder ein anderes OLE-Objekt sein, d. h., Sie können damit auch die
Position von anderen Grafikelementen festlegen. Mit den Eigenschaften Left und
Top geben Sie die Position des angegebenen Diagramms auf dem Tabellenblatt an.
Dazu referieren Sie auf die Zelle A5. Das heißt, die linke obere Ecke soll in Zelle A5
beginnen.
9.6.1 Die Höhe und Breite eines Diagramms festlegen
Möchten Sie nachträglich die Höhe bzw. die Breite eines eingebetteten Diagramms
anpassen, verwenden Sie die Eigenschaften Height und Width:
Sub DiagrammHöheFestlegen()
ActiveSheet.ChartObjects("Diagramm 1").Height = 350
End Sub
Listing 9.17 Die Höhe eines eingebetteten Diagramms festlegen
9 Diagramme und Pivot-Tabellenberichte programmieren
502
Mit der Eigenschaft ActiveSheet greifen Sie abermals direkt auf das aktive Tabellen-
blatt zu. Dieses Mal sprechen Sie das eingebettete Diagramm aber direkt über das
Auflistungsobjekt ChartObjects an, dessen Höhe Sie durch die Eigenschaft Height
festlegen.
Wollen Sie lediglich die Breite eines Diagramms anpassen, setzen Sie die Eigenschaft
Width ein:
Sub DiagrammBreiteFestlegen()
ActiveSheet.ChartObjects("Diagramm 1").Width = 400
End Sub
Listing 9.18 Die Breite eines eingebetteten Diagramms festlegen
9.6.2 Diagramme platzieren
Sind Ihre eingebetteten Diagramme zu klein und möchten Sie diese als Vollbild in
Ihrer Arbeitsmappe umwandeln, dann starten Sie das Makro aus Listing 9.19:
Sub EingebettetesDiagrammZuDiagrammblatt()
ActiveSheet.ChartObjects(1).ActivateActiveChart.Location Where:=xlLocationAsNewSheet, _Name:="Diagramm in Groß"
End Sub
Listing 9.19 Eingebettetes Diagramm als Diagrammblatt ausgeben
Greifen Sie auf das erste eingebettete Diagramm auf Ihrer Tabelle zu, und wenden Sie
die Methode Location an, um das eingebettete Diagramm zu verschieben. Bei der
Methode Location können Sie im Argument Where entweder die Konstanten xlLoca-
tionAsNewSheet, xlLo-cationAsObject oder xlLocationAutomatic verwenden. In Lis-
ting 9.19 wird das eingebettete Diagramm in ein neues Diagrammblatt verschoben.
Aus diesem Grund verwenden Sie das Argument xlLocationAsNewSheet. Im Argu-
ment Name geben Sie an, wie das neue Diagrammblatt heißen soll.
Aber auch der umgekehrte Fall ist von Interesse. So können Sie ein Diagramm auf
einem Diagrammblatt auch als Objekt in eine Tabelle transferieren. So fügen Sie ein
neues Tabellenblatt ein und positionieren alle Diagramme aus der Arbeitsmappe, die
sich auf Diagrammblättern befinden, auf das neu eingefügte Tabellenblatt. Danach
positionieren Sie die transferierten Diagramme, die dann noch alle übereinander lie-
gen, untereinander und verkleinern die eingebetteten Diagramme ein wenig.
9.6 Diagramme positionieren und skalieren
503
9
Sub AlleDiagrammblätterInEineTabelleTransferieren()Dim Blatt As ObjectDim s As StringDim i As IntegerDim Ecke As Integer
Application.ScreenUpdating = FalseSheets.Add Before:=Worksheets(1)Range("A1").Selects = ActiveSheet.Name
For Each Blatt In ActiveWorkbook.SheetsBlatt.ActivateIf TypeName(ActiveSheet) = "Chart" Then _ActiveChart.Location Where:=xlLocationAsObject, _Name:=s
Next BlattSheets(s).ActivateEcke = 10
For i = 1 To ActiveSheet.ChartObjects.CountWith ActiveSheet.ChartObjects(i).Top = Ecke.Left = 10.Height = 150.Width = 350
End WithEcke = Ecke + 160
Next iApplication.ScreenUpdating = True
End Sub
Listing 9.20 Diagrammblätter als eingebettete Diagramme darstellen
Schalten Sie im ersten Schritt die Bildschirmaktualisierung ab. Danach fügen Sie ein
neues Tabellenblatt gleich zu Beginn der Arbeitsmappe ein. Dazu verwenden Sie die
Methode Add, der Sie als Argument Before den Index 1 übergeben. Speichern Sie den
Namen des neuen Tabellenblattes in der Variablen s, um später leichter auf dieses
Tabellenblatt zurückkehren zu können. In einer For Each Next-Schleife arbeiten Sie
sich Blatt für Blatt durch die Arbeitsmappe hindurch. Da nur Diagrammblätter verar-
beitet werden dürfen, fragen Sie mit der Funktion TypeName ab, ob es sich um ein Dia-
grammblatt handelt. Bei einem Diagrammblatt liefert die Funktion TypeName den
9 Diagramme und Pivot-Tabellenberichte programmieren
504
Wert Chart zurück, bei einer normalen Tabelle den Wert Worksheet. Wird ein Dia-
grammblatt ermittelt, so transferieren Sie mithilfe der Methode Location das Dia-
gramm auf das vorher neu eingefügte Tabellenblatt.
Haben Sie alle Tabellen der Arbeitsmappe überprüft, dann sorgen Sie für die richtige
Anordnung der eingebetteten Diagramme auf dem neuen Tabellenblatt. Excel hat
alle Diagramme aufeinander kopiert. Sie müssen nun diese übereinander liegenden
Diagramme auseinanderbringen und auf dem Tabellenblatt neu anordnen. Dazu set-
zen Sie eine For Next-Schleife auf, in der Sie alle eingefügten Diagramme verteilen.
Über die Eigenschaft Count ermitteln Sie die Anzahl der eingebetteten Diagramme
auf dem Tabellenblatt. In der Variablen Ecke definieren Sie jeweils den oberen Rand
des eingebetteten Diagramms. Zu Beginn setzen Sie die Variable auf den Wert 10 und
erhöhen diese Variable jeweils um mindestens die definierte Höhe des eingefügten
Diagramms.
Möchten Sie alle eingebetteten Diagramme in einer Tabelle markieren, dann setzen
Sie das Makro aus Listing 9.21 ein:
Abbildung 9.14 Alle Diagramme der Arbeitsmappe auf einem Tabellenblatt
9.6 Diagramme positionieren und skalieren
505
9
Sub AlleDiagrammeAufTabelleMarkieren()
With Worksheets("Tabelle20")If .Shapes.Count > 0 Then.Shapes.SelectAllEnd If
End With
End Sub
Listing 9.21 Alle eingebetteten Diagramme markieren
Fragen Sie zu Beginn des Makros ab, ob sich überhaupt Diagramme oder auch andere
Grafikobjekte wie Schaltflächen, ClipArts oder Ähnliches in der Tabelle befinden.
Setzen Sie für diese Aufgabe die Anweisung Shapes.Count ein. Liefert diese Abfrage ei-
nen Wert > 0, dann befinden sich »Shapes« in Ihrer Tabelle, die Sie über die Methode
SelectAll markieren können.
9.6.3 Diagramme skalieren
Mit VBA haben Sie die Möglichkeit, auf alle Elemente eines Diagramms zuzugreifen.
So können Sie beispielsweise auch die Skalierung eines oder mehrerer Diagramme
ändern.
Abbildung 9.15 Der Ausgangszustand: zwei Diagramme mit unterschiedlicher Skalierung
9 Diagramme und Pivot-Tabellenberichte programmieren
506
Wenn Sie Diagramme erstellen, orientiert sich Excel jeweils am höchsten Eintrag in
der Tabelle. Aus diesem Grund sehen die beiden Diagramme in Abbildung 9.15 auch
von der Skalierung her gesehen unterschiedlich aus. Die Dimensionen sind hierbei
verzerrt. Besser wäre hier eine einheitliche Skalierung zum Beispiel auf Basis des
gemeinsamen Maximalwertes.
Gerade wenn Sie noch mehr Diagramme auf einem Tabellenblatt integriert haben
und für alle Diagramme zwecks Vergleichbarkeit dieselbe Skalierung verwenden
möchten, dann können Sie das Makro aus Listing 9.22 anwenden:
Sub DiagrammSkalierungEinstellen()Dim i As IntegerDim maxWert As LongDim Schritt As Integer
maxWert = WorksheetFunction.Max(ActiveSheet.UsedRange)maxWert = maxWert * 1.1Schritt = maxWert / 5For i = 1 To ActiveSheet.ChartObjects.CountActiveSheet.ChartObjects(i).SelectWith ActiveChart.Axes(xlValue).MinimumScale = 0.MaximumScale = maxWert.MajorUnit = Schritt
End WithNext i
End Sub
Listing 9.22 Die Skalierung von mehreren Diagrammen auf einmal anpassen
Im ersten Schritt ermitteln Sie den höchsten Wert auf dem Tabellenblatt. Dieser Wert
soll mit einem kleinen Aufschlag später den obersten Wert der Skalierung darstellen.
Dazu setzen Sie die Funktion Max ein, die Sie auf die Eigenschaft UsedRange anwenden,
und speichern das Ergebnis daraus in der Variablen maxwert. Zum so ermittelten Wert
fügen Sie noch 10 Prozent hinzu, damit die größte Säule nicht direkt unter dem obe-
ren Rand hängt und noch ein wenig Luft hat. Dazu multiplizieren Sie die Variable
maxwert mit dem Faktor 1.1, was zusätzlichen 10 Prozent entspricht. Nun bestimmen
Sie die Schrittweite, bei der horizontale Trennlinien gezogen werden sollen. So könn-
ten Sie sich z. B. entschließen, genau fünf horizontale Trennlinien zuzulassen. Divi-
dieren Sie dazu die Variable maxwert durch den Wert 5, und speichern Sie das Ergebnis
daraus in der Variablen Schritt. Mit einer For Next-Schleife werden alle eingebette-
ten Diagramme des Tabellenblattes durchlaufen und wird die einheitliche Skalierung
eingestellt. Über die Anweisung ChartObjects.Count ermitteln Sie die Anzahl der ein-
9.7 Diagramme als Grafiken speichern
507
9
gebetteten Diagramme auf dem Tabellenblatt. Mithilfe der Methode Select aktivie-
ren Sie innerhalb der Schleife ein Diagramm nach dem anderen und wenden
folgende Eigenschaften auf die Achse an:
� Die Eigenschaft MinimumScale stellt den Minimalwert einer Größenachse dar und
wird im Beispiel auf den Wert 0 gesetzt.
� Mit der Eigenschaft MaximumScale geben Sie den höchsten Wert der Größenachse
bekannt, den Sie aus der Variablen maxwert nehmen.
� Über die Eigenschaft MajorUnit legen Sie die Schrittweite der Größenachse fest.
Den Wert dazu entnehmen Sie der Variablen Schritt.
9.7 Diagramme als Grafiken speichern
In Excel können Sie Diagramme über einen Grafikfilter umwandeln. Das bringt Vor-
teile, wenn Sie Diagramme an Personen ausliefern möchten, die kein Excel installiert
haben. Erstellen Sie aus den Excel-Diagrammen speicherschonende Grafikdateien im
GIF-Format. Auch wenn Sie Diagramme in Ihrer Textverarbeitung verwenden und
dabei keine Excel-Diagramme verknüpfen möchten, ist das Einbinden von Dia-
grammgrafiken die bessere Methode. Allerdings können diese umgewandelten Dia-
gramme dann nicht mehr aktualisiert werden. Das Makro aus Listing 9.23 wandelt
alle eingebetteten Diagramme einer Arbeitsmappe in GIF-Dateien um und legt diese
im Verzeichnis C:\ ab.
Abbildung 9.16 Das Endergebnis: Alle Diagramme sind einheitlich skaliert.
9 Diagramme und Pivot-Tabellenberichte programmieren
508
Sub DiagrammeAlsGrafikSpeichern()Dim Dia As ChartDim i As IntegerDim e As Integer
For i = 1 To Sheets.CountSheets(i).ActivateFor e = 1 To ActiveSheet.ChartObjects.CountActiveSheet.ChartObjects(e).SelectSet Dia = ActiveSheet.ChartObjects(e).ChartDia.Export Filename:="c:\" & _ActiveSheet.ChartObjects(e).Name & _".gif", FilterName:="GIF"
Next eNext i
End Sub
Listing 9.23 Alle eingebetteten Diagramme einer Arbeitsmappe
werden in Grafikdateien exportiert.
Das Makro aus Listing 9.23 besteht aus zwei For Next-Schleifen: Die äußere Schleife
arbeitet alle Tabellenblätter der aktiven Arbeitsmappe ab, die innere Schleife expor-
tiert alle eingebetteten Diagramme auf dem jeweiligen Tabellenblatt. Über die
Methode Filter exportieren Sie die Diagramme in ein Grafikformat. Dabei verwen-
det die Methode Filter die Argumente FileName und FilterName. Im Argument File-
Name geben Sie den Pfad sowie den Namen der Grafikdatei an. Dazu wenden Sie die
Eigenschaft Name auf das Chart-Objekt an. Im Argument FilterName wird der Name
des Grafikfilters angegeben, der verwendet werden soll.
Abbildung 9.17 Alle Diagramme wurden als Grafiken ins Verzeichnis C:\ exportiert.
9.8 Diagramme formatieren
509
9
Mit einem Doppelklick auf die jeweilige Grafikdatei im Windows-Explorer können
Sie die Diagrammgrafik öffnen.
9.8 Diagramme formatieren
In Excel haben Sie die Möglichkeit, Datenreihen in Diagrammen zu formatieren. Sie
können beispielsweise den Abstand von Säulen oder Balken beeinflussen, verschie-
dene Farben für die Diagrammobjekte einsetzen, bei der Beschriftung der Dia-
gramme aus einer breiten Auswahl von Schrifteffekten und Schriftschnitten wählen
und vieles mehr.
9.8.1 Gewinn und Verlust in einem Säulendiagramm präsentieren
In der folgenden Aufgabe werden in einem Säulendiagramm Monatsergebnisse dar-
gestellt. Damit auf einen Blick sichtbar wird, wenn ein Ergebnis in einem Monat
unter den Wert 0 fällt, also ein Verlust eingefahren wird, sollen solche Datenpunkte
mit der Hintergrundfarbe Rot belegt werden. Das Makro für diese Aufgabe sehen Sie
in Listing 9.24:
Sub SäulenVerschiedenfarbig()Dim Datenreihe As SeriesDim Punkt As PointDim i As IntegerDim DArray As Variant
Set Datenreihe = _ActiveSheet.ChartObjects(1).Chart.SeriesCollection(1)With DatenreiheDArray = .ValuesFor Each Punkt In .Pointsi = i + 1If DArray(i) < 0 ThenPunkt.Interior.ColorIndex = 3
ElsePunkt.Interior.ColorIndex = 33
End IfNext
End WithEnd Sub
Listing 9.24 Verschiedenfarbige Säulen, je nach Ergebnissituation
9 Diagramme und Pivot-Tabellenberichte programmieren
510
Definieren Sie zuerst eine Objektvariable vom Typ Series. Anschließend lesen Sie alle
Y-Werte in ein Datenfeld ein und durchlaufen danach eine For Each Next-Schleife, in
der die einzelnen Datenpunkte überprüft werden. Die Werte entnehmen Sie dem
Datenfeld DArray. Weist ein Datenpunkt einen Wert < 0 auf, so wird der Innenbereich
der Säule mit der Farbe Rot formatiert. Bei allen positiven Werten wird ein blauer
Farbton gewählt.
Das Makro aus Listing 9.24 hat noch einen kleinen Schönheitsfehler. Sie müssen das
Makro immer manuell starten, um das Diagramm neu zu formatieren. Wenn also
Daten in der Tabelle geändert wurden, ändert sich die Formatierung des Diagramms
nicht. Dem kann aber abgeholfen werden, indem Sie eine ereignisabhängige Funk-
tion programmieren.
Das Ereignis heißt Worksheet_Change und tritt ein, wenn sich irgendeine Zelle auf dem
aktiven Tabellenblatt ändert. Genau dieses Ereignis kann für die Aufgabenstellung
verwendet werden. Um das Ereignis einzustellen, gehen Sie wie folgt vor:
1. Wechseln Sie in die Entwicklungsumgebung.
2. Im Projekt-Explorer klicken Sie die Tabelle doppelt an, auf der sich Ihr Diagramm
befindet.
3. Geben Sie im Codebereich folgendes Ereignis ein:
Abbildung 9.18 Negative Monatsergebnisse werden rot formatiert.
9.8 Diagramme formatieren
511
9
Private Sub Worksheet_Change(ByVal Target As Range)
SäulenVerschiedenfarbig
End Sub
Listing 9.25 Makro automatisch bei Zellenänderung starten
Immer wenn Sie eine Zelle auf Ihrem Tabellenblatt verändern, sei es nun durch
direkte Eingabe oder auch durch eine Formel, wird das Makro SäulenVerschiedenfar-
big automatisch ausgeführt.
Lernen Sie noch mehr über den praktischen Einsatz von Ereignissen in Kapitel 12,
»Ereignisse in Excel einsetzen«.
Befindet sich das Diagramm auf einem eigenen Diagrammblatt, dann setzen Sie das
Makro aus Listing 9.26 ein, um die Säulen zu formatieren:
Sub SäulenVerschiedenfarbig()Dim Datenreihe As SeriesDim Punkt As PointDim i As IntegerDim DArray As Variant
On Error Resume NextSheets("Diagramm1").ActivateSet Datenreihe = _ActiveChart.SeriesCollection(1)With DatenreiheDArray = .ValuesFor Each Punkt In .Pointsi = i + 1If DArray(i) < 0 ThenPunkt.Interior.ColorIndex = 3
ElsePunkt.Interior.ColorIndex = 33
End IfNext
End With
End Sub
Listing 9.26 Diagrammblatt ansprechen und formatieren
9 Diagramme und Pivot-Tabellenberichte programmieren
512
9.8.2 Eine Ist-Darstellung in einem Säulendiagramm darstellen
Im nächsten Beispiel geht es darum, in einem Diagramm, in dem alle zwölf Monate
eines Jahres abgebildet sind, in Abhängigkeit vom aktuellen Datum die Säulen ver-
schieden zu formatieren. Stellen Sie sich also vor, heute wäre der 15. März 2013. Ihre
Aufgabe besteht nun darin, die Säulen von Januar bis zum aktuellen Monat März mit
der Farbe Gelb zu formatieren. Die restlichen Monate April bis Dezember sollen die
Farbe Blau bekommen. Das Makro für diese Aufgabe sehen Sie in Listing 9.27:
Sub DiagrammFärben()Dim i As IntegerDim j As IntegerDim datum1 As DateDim Datindex As Integer
Sheets("Tabelle5").Activatedatum1 = Range("A1").ValueDatindex = Month(datum1)
For i = 1 To DatindexActiveWindow.Visible = TrueActiveSheet.ChartObjects(1).ActivateActiveChart.ChartArea.SelectActiveChart.SeriesCollection(1).SelectActiveChart.SeriesCollection(1).Points(i).SelectWith Selection.Border.Weight = xlThin.LineStyle = xlAutomatic
End WithSelection.Shadow = FalseSelection.InvertIfNegative = FalseWith Selection.Interior.ColorIndex = 44.Pattern = xlSolid
End WithNext i
End Sub
Listing 9.27 Zweifarbiges Säulendiagramm erstellen
In Zelle A1 haben Sie die Tabellenfunktion =HEUTE() erfasst. Diese Funktion liefert
Ihnen das aktuelle Datum. Dieses Datum speichern Sie in der Variablen datum1. Im
Anschluss daran ermitteln Sie den Monat des Datums mithilfe der Funktion Month.
Diese Funktion gibt Ihnen einen Wert zwischen 1 und 12 zurück. Damit wissen Sie,
9.8 Diagramme formatieren
513
9
wie viele Säulen Sie färben müssen. In einer Schleife weisen Sie dann die gewünschte
Farbe zu.
9.8.3 Legenden formatieren
Wenn Sie möchten, können Sie direkt auf eine Legende zugreifen und ihre Beschrif-
tung formatieren. Dabei haben Sie die Möglichkeit, Schriftgröße, Schriftfarbe sowie
den Schriftschnitt festzulegen. Im folgenden Beispiel aus Listing 9.28 wird eine
Legende mit dem Schriftschnitt Fett und der Schriftfarbe Blau formatiert.
Sub LegendeFormatieren()ActiveSheet.ChartObjects(1).SelectActiveChart.HasLegend = True
With ActiveChart.Legend.Font.Bold = True.ColorIndex = 5
End With
End Sub
Listing 9.28 Legende eines eingebetteten Diagramms formatieren
Nachdem Sie das eingebettete Diagramm auf dem aktiven Tabellenblatt markiert
haben, blenden Sie mithilfe der Eigenschaft HasLegend, die Sie auf den Wert True set-
zen, die Legende ein. Im Anschluss daran wenden Sie die Eigenschaften Bold und
ColorIndex auf die Schrift der Legende an.
Abbildung 9.19 Monatsgenau formatieren
9 Diagramme und Pivot-Tabellenberichte programmieren
514
9.8.4 Zusätzliche Labels hinzufügen
Sollten Ihnen die Überschrift sowie die Achsenbeschriftungen nicht ausreichen, kön-
nen Sie zusätzliche Textfelder in Ihr eingebettetes Diagramm einfügen. Sehen Sie
sich dazu das Makro aus Listing 9.29 an.
Sub ZusätzlichesTextfeld()
ActiveSheet.ChartObjects(1).SelectActiveChart.HasTitle = TrueActiveChart.ChartTitle.Text = "Kosten und Leistung"ActiveChart.Shapes.AddLabel _(msoTextOrientationHorizontal, _10, 15, 0, 0).TextFrame.Characters.Text = "Zusatzinfo"
End Sub
Listing 9.29 Zusätzliches Feld in ein eingebettetes Diagramm einfügen
Mit der Methode AddLabel können Sie eine zusätzliche Beschriftung in Ihrem Dia-
gramm hinzufügen. Dabei geben Sie die Konstante msoTextOrientationHorizontal an
und legen die linke obere Ecke über die ersten beiden Argumente in der Klammer
fest. Das Objekt TextFrame stellt den Textrahmen dar und enthält sowohl den Text als
auch die Eigenschaften und Methoden zur Steuerung von Ausrichtung und Veranke-
rung des Textrahmens. Über die Eigenschaft Text schreiben Sie Ihren zusätzlichen
Text in das Textfeld.
Abbildung 9.20 Zusätzliche Labels sind immer möglich.
9.9 Dynamische Diagramme erzeugen
515
9
9.9 Dynamische Diagramme erzeugen
Viele Diagramme werden über Monate, ja sogar Jahre hinweg gepflegt und immer
wieder erweitert. Die Erweiterung von Diagrammen ist eine lästige Aufgabe, da Sie
erstens die Datenreihen einzeln erweitern und dabei zweitens genau aufpassen müs-
sen, dass Sie keine falschen Zellenbezüge angeben. Für diese Aufgabe ist eine Excel-
VBA-Lösung geradezu ideal. Stellen Sie sich vor, Sie markieren den Datenbereich, der
in einem Diagramm angezeigt werden soll, und starten ein Makro, das Ihnen das
bereits bestehende Diagramm dynamisch erweitert. Diese Funktionalität erinnert
stark an das Standarddiagramm, bei dem Sie ebenso den Datenbereich markieren
und anschließend die Taste (F11) drücken. Bei dieser Standardlösung ist der Nachteil,
dass Sie das Diagramm immer wieder neu erstellen und danach alle weiteren Forma-
tierungen am Diagramm manuell ausführen müssen. Außerdem wird bei dieser
Standardlösung ein neues Diagrammblatt eingefügt. Wenn Sie also ein bereits beste-
hendes und eingebettetes Diagramm flexibel erweitern möchten, setzen Sie das
Makro aus Listing 9.30 ein.
Das Erweitern von Diagrammen können Sie am besten vornehmen, wenn Sie den
Datenbereich benennen. Damit entfällt erstens viel Schreibarbeit, und zweitens
macht es das Makro leichter lesbar.
Sub DatenreihenErweitern()Dim Blatt As WorksheetDim s As String
s = ActiveSheet.NameSet Blatt = ActiveSheetOn Error Resume Next
Abbildung 9.21 Die Ausgangsbasis: Das Diagramm muss erweitert werden.
9 Diagramme und Pivot-Tabellenberichte programmieren
516
ActiveWorkbook.Names("DiaBereich").DeleteActiveWorkbook.Names.Add _Name:="DiaBereich", RefersToR1C1:=SelectionBlatt.ChartObjects(1).SelectActiveChart.SetSourceData _Source:=Sheets(s).Range("DiaBereich")
End Sub
Listing 9.30 Ein eingebettetes Diagramm dynamisch erweitern
Definieren Sie zuerst eine Objektvariable vom Typ Worksheet. Danach speichern Sie
den Namen der Tabelle, auf der sich das eingebettete Diagramm befindet, in der Vari-
ablen s. Da Sie den Datenbereich benennen möchten, der in Ihr eingebettetes Dia-
gramm eingeht, löschen Sie vorher einen eventuell schon bestehenden Namen über
die Methode Delete. Die On Error-Anweisung fügen Sie zur Sicherheit vor die Zeile
mit dem Befehl Delete ein. Diese Anweisung sorgt hier dafür, dass das Makro nicht
abstürzt, wenn noch kein Name für den Datenbereich vergeben wurde.
Im nächsten Schritt fügen Sie mithilfe der Methode Add einen neuen Namen ein, der
den Datenbereich für das Diagramm beinhalten soll. Als Argument übergeben Sie an
die Methode Add den Namen sowie den Zellenbezug, auf den sich der Name beziehen
soll. Im Argument RefersToR1C1 verweisen Sie auf die aktuell ausgewählten Zellen,
d. h., Sie müssen vor dem Start des Makros den Datenbereich markieren, der in das
Diagramm eingehen soll. Nach der Namensvergabe markieren Sie das eingebettete
Abbildung 9.22 Das Endergebnis: das erweiterte Diagramm
9.10 Pivot-Tabellenberichte erstellen
517
9
Diagramm und wenden die Methode SetSourceData an. Sie benötigt das Argument
Source. Es beinhaltet den Bereich, der die Quelldaten für das Diagramm enthält. Die-
ses Argument füllen Sie mit dem Inhalt der Variablen s, die den Namen der Tabelle
enthält, und mit dem vorher vergebenen Namen.
9.10 Pivot-Tabellenberichte erstellen
In Excel haben Sie die Möglichkeit, sehr schnell aussagekräftige Berichte zu erstellen.
Die wohl beste und sicherste Methode, in Excel Daten auszuwerten und aufzuberei-
ten, ist die Anwendung von Pivot-Tabellen. Der Begriff »Pivot« kommt aus dem Fran-
zösischen und bedeutet »Dreh- und Angelpunkt«. Damit wird schon einiges über die
Funktion ausgesagt: Sie können es drehen und wenden, wie Sie wollen – Sie werden
immer die richtigen Ergebnisse bekommen.
Bei der Arbeit mit Pivot-Tabellen gibt es zwei Punkte, die Sie beachten müssen:
� Ist der Pivot-Tabellenbericht aktualisiert?
� Greift die Pivot-Tabelle wirklich auf den gewünschten Datenbereich zu? (Das
heißt: Ist der Datenbereich nachträglich vergrößert worden?)
Beide Fragen werden noch in diesem Kapitel beantwortet.
Zuerst werden Sie über ein VBA-Makro einen Pivot-Tabellenbericht erstellen. Die
Ausgangstabelle sehen Sie in Abbildung 9.23.
Abbildung 9.23 Die Ausgangstabelle – eine Mitarbeiterliste
9 Diagramme und Pivot-Tabellenberichte programmieren
518
In einem Pivot-Tabellenbericht soll nun dargestellt werden, welche Vorgesetzten
welche Mitarbeiter an welchem Standort haben. Das Makro für diese Aufgabe sehen
Sie in Listing 9.31:
Sub PivotTabelleErstellen()Dim Bereich As Range
Sheets("Personal").ActivateSet Bereich = ActiveSheet.UsedRangeRange(Bereich.Address).SelectActiveSheet.PivotTableWizard _SourceType:=xlDatabase, SourceData:= _Bereich, TableDestination:="", TableName:="Pivot"With ActiveSheet.PivotTables("Pivot").PivotFields("Vorgesetzter").Orientation = xlPageField.PivotFields("Name").Orientation = xlRowField.PivotFields("Standort").Orientation = xlColumnField.PivotFields("Name").Orientation = xlDataField
End With
End Sub
Listing 9.31 Einen Pivot-Tabellenbericht erstellen
Im ersten Schritt aktivieren Sie das Tabellenblatt, das die Quelldaten für die Auswer-
tung enthält, und legen den verwendeten Bereich in der Variablen Bereich fest.
Danach markieren Sie den Quellbereich und wenden die Methode PivotTableWizard
an, die die Pivot-Tabelle erstellt.
� Die Syntax: Die Methode PivotTableWizard hat folgende Syntax:
PivotTableWizard(SourceType, SourceData, _TableDestination, TableName, RowGrand, _ColumnGrand, SaveData, HasAutoFormat, AutoPage, _Reserved, BackgroundQuery, OptimizeCache, _PageFieldOrder, PageFieldWrapCount, ReadData, _Connection)
� Die Argumente der Methode Pivot-TableWizard: Auf die wichtigsten Argumente
wird im Folgenden näher eingegangen.
– Im Argument SourceType geben Sie die Quelle der Daten in dem Bericht an.
Zulässig ist eine der in Tabelle 9.3 aufgeführten Konstanten.
9.10 Pivot-Tabellenberichte erstellen
519
9
– Beim Argument SourceData legen Sie den Datenbereich für den neuen Bericht
fest. Hierfür haben Sie vorher den verwendeten Bereich auf dem Tabellenblatt
in der Variablen Bereich definiert, die Sie hier nun als Argument angeben.
– Im Argument TableDestination können Sie eine Zieltabelle inklusive der Posi-
tion der ersten Zelle für den Pivot-Tabellenbericht angeben. Lassen Sie dieses
Argument leer, wenn der Pivot-Tabellenbericht auf einer neuen Tabelle, begin-
nend ab Zelle A1, eingefügt werden soll.
– Im Argument TableName geben Sie dem Pivot-Tabellenbericht einen Namen.
Dies ist sehr wichtig, um später bei der Anordnung der Pivot-Felder auf die rich-
tige Pivot-Tabelle zuzugreifen. Wird dieses Argument nicht gesetzt, vergibt
Excel eigene Namen für die Pivot-Tabellen, die die Bezeichnung Pivottable
und eine fortlaufende Nummer enthalten. Gerade diese fortlaufende Nummer
macht dann bei der weiteren Programmierung der Pivot-Tabelle Schwierigkei-
ten. Aus diesem Grund füllen Sie dieses Argument mit einem Namen, der kon-
stant bleibt.
Beginnen Sie jetzt mit der Anordnung Ihrer Datenfelder, und nutzen Sie dazu das
Auflistungsobjekt PivotFields. In diesem Auflistungsobjekt stehen alle verfügbaren
Feldnamen der Pivot-Tabelle, die den Spaltenüberschriften des Quellbereiches ent-
sprechen.
Hinweis
Wenn Sie nicht sicherstellen können, dass die Spaltenüberschriften Ihres Datenbe-
reiches konstant bleiben, können Sie die einzelnen Feldnamen auch über einen
Index ansprechen. Wenn die Spaltenüberschriften jedoch konstant bleiben, ver-
wenden Sie besser die Feldnamen für die bessere Lesbarkeit des Makros.
Mit der Eigenschaft Orientation legen Sie die Position des Feldnamens in der Pivot-
Tabelle fest. Tabelle 9.4 führt die Möglichkeiten auf, die Sie dabei haben.
Konstante Beschreibung
xlConsolidation mehrere Konsolidierungsbereiche
xlDatabase Microsoft Excel-Datenbank oder -Liste (Standard)
xlExternal externe Datenquelle
xlPivotTable gleiche Quelle wie ein anderer PivotTable-Bericht
Tabelle 9.3 Die möglichen Datenquellen-Konstanten bei Pivot-Tabellenberichten
9 Diagramme und Pivot-Tabellenberichte programmieren
520
9.11 Pivot-Tabellen aktualisieren
Bei Pivot-Tabellenberichten müssen Sie daran denken, dass Sie nach einer Änderung
der Quelldaten nicht vergessen, die Pivot-Tabelle auf den neuesten Stand zu bringen.
Dieser Vorgang geschieht in Excel nicht automatisch; dafür sind Sie verantwortlich.
9.11.1 Eine einzelne Pivot-Tabelle aktualisieren
Wenn Sie ganz gezielt eine einzelne Pivot-Tabelle in einer Arbeitsmappe aktualisie-
ren möchten, setzen Sie das Makro aus Listing 9.32 ein:
Sub EinzelnePivotTabelleAufBlattAktualisieren()
On Error GoTo fehlerSheets(1).PivotTables("Pivot").RefreshTableExit Sub
fehler:MsgBox "Es konnte keine Pivot-Tabelle gefunden werden!"
End Sub
Listing 9.32 Einzelne Pivot-Tabelle auf Tabellenblatt aktualisieren
Auf dem ersten Tabellenblatt in der aktiven Arbeitsmappe wird die Pivot-Tabelle
Pivot mithilfe der Methode RefreshTable auf den aktuellen Stand gebracht. Die
Anweisung On Error ist eine reine Sicherheitsmaßnahme, die verhindern soll, dass
das Makro abstürzt, wenn die richtige Pivot-Tabelle nicht gefunden werden kann.
Konstante Beschreibung
xlColumnField Im Spaltenbereich der Pivot-Tabelle wird der Standort ausgegeben.
xlDataField Im Datenbereich der Pivot-Tabelle wird die Anzahl der Mitarbeiter
gezählt.
xlHidden Mit dieser Konstante können Sie einzelne Datenfelder ausblenden.
xlPageField Im Seitenfeld der Pivot-Tabelle wird der gewünschte Vorgesetzte
eingestellt.
xlRowField Im Zeilenbereich werden die Namen der Mitarbeiter aufgelistet.
Tabelle 9.4 Die möglichen Ausrichtungskonstanten bei Pivot-Tabellenberichten
9.11 Pivot-Tabellen aktualisieren
521
9
9.11.2 Mehrere Pivot-Tabellen auf einem Tabellenblatt aktualisieren
Oft werden auch mehrere Pivot-Tabellen auf einem einzigen Tabellenblatt geführt.
Dabei können Sie alle Pivot-Tabellen auf einmal updaten, indem Sie das Makro aus
Listing 9.33 einsetzen:
Sub MehrerePivotTabellenAufBlattAktualisieren()Dim pt As PivotTable
On Error Resume NextFor Each pt In Sheets(1).PivotTablespt.RefreshTable
Next pt
End Sub
Listing 9.33 Mehrere Pivot-Tabellen auf einem Tabellenblatt aktualisieren
Definieren Sie eine Objektvariable vom Typ PivotTable, und setzen Sie eine For Each
Next-Schleife auf. Innerhalb der Schleife wenden Sie die Methode RefreshTable an,
um die einzelnen Pivot-Tabellenberichte zu aktualisieren.
9.11.3 Alle Pivot-Tabellen in Arbeitsmappe aktualisieren
Haben Sie in einer Arbeitsmappe mehrere Pivot-Tabellenberichte auf unterschiedli-
chen Tabellenblättern erstellt und möchten Sie diese nun automatisch aktualisieren,
dann setzen Sie das Makro aus Listing 9.34 ein:
Sub AllePivotTabellenInArbeitsmappeAktualisieren()Dim Blatt As WorksheetDim pt As PivotTable
For Each Blatt In ActiveWorkbook.WorkSheetsFor Each pt In Sheets(1).PivotTablespt.RefreshTable
Next ptNext Blatt
End Sub
Listing 9.34 Alle Pivot-Tabellen in der aktiven Arbeitsmappe aktualisieren
Die Aktualisierung aller Pivot-Tabellenberichte Ihrer aktiven Arbeitsmappe errei-
chen Sie über zwei Schleifen. In der ersten Schleife werden alle Tabellenblätter durch-
9 Diagramme und Pivot-Tabellenberichte programmieren
522
laufen. Mit der zweiten Schleife werden innerhalb eines durchlaufenen Blattes alle
Pivot-Tabellenberichte aktualisiert.
Möchten Sie diese Aktualisierung automatisch nach dem Öffnen der Arbeitsmappe
durchführen, dann wenden Sie das Ereignis Workbook_Open an. Dazu verfahren Sie wie
folgt:
1. Wechseln Sie in die Entwicklungsumgebung.
2. Klicken Sie im Projekt-Explorer den Eintrag DieseArbeitsmappe doppelt an.
3. Erfassen Sie das Ereignis Workbook_Open.
Private Sub Workbook_Open()
AllePivotTabellenInArbeitsmappeAktualisieren
End Sub
Listing 9.35 Nach dem Öffnen einer Arbeitsmappe werden alle Pivot-Tabellen aktualisiert.
In Kapitel 12, »Ereignisse in Excel einsetzen«, lernen Sie mehr über die Möglichkeiten,
die Ereignisse bieten.
9.12 Pivot-Tabellen dynamisch erweitern
Die zweite Gefahr neben der, die Aktualisierung der Pivot-Tabelle zu vergessen, ist,
dass der Anwender den Datenbereich erweitert und versäumt, diese Erweiterung sei-
ner Pivot-Tabelle mitzuteilen. Das manuelle Einstellen der Pivot-Tabelle auf den
neuen Bereich ist recht mühselig, wenn Sie mehrere Pivot-Tabellen nacheinander
auf den neuesten Stand bringen müssen. In beiden Fällen (fehlende Aktualisierung
bzw. falscher Quellbereich) ist die Auswirkung gleich: Die Pivot-Tabelle liefert nicht
die richtigen Ergebnisse.
Die Änderung des Quellbereichs, der die Daten für die Pivot-Tabelle enthält, hat zur
Folge, dass auch der Pivot-Tabelle diese Änderung mitgeteilt werden muss. Um diese
Aufgabe zu erledigen, benennen Sie Ihren Datenbereich vorher und erweitern die
Pivot-Tabelle mithilfe des Makros aus Listing 9.36:
Sub PivotTabellenDatenbereichErweitern()Dim pt As PivotTableDim Bereich As Range
Set Bereich = Sheets("Personal").UsedRangeActiveWorkbook.Names.Add _Name:="PivotBereich", _RefersTo:=Bereich, Visible:=True
9.12 Pivot-Tabellen dynamisch erweitern
523
9
Bereich.Select
For Each pt In Sheets(1).PivotTablesWith pt.PivotTableWizard SourceType:=xlDatabase, _SourceData:="PivotBereich"
End Withpt.RefreshTable
Next pt
End Sub
Listing 9.36 Dynamische Erweiterung einer Pivot-Tabelle
Ermitteln Sie zuerst einmal den verwendeten Bereich auf Ihrer Tabelle Personal,
und speichern Sie diesen Bereich in der Objektvariablen Bereich. Benennen Sie
danach den ermittelten Bereich, geben Sie diesem den Namen PivotBereich, und
markieren Sie ihn im Anschluss.
In Kapitel 5, »Zellen und Bereiche programmieren«, können Sie noch einmal nach-
schlagen, wie Sie Zellen bzw. Bereiche benennen können.
Abbildung 9.24 Der Datenbereich wurde nach unten erweitert.
9 Diagramme und Pivot-Tabellenberichte programmieren
524
Mithilfe einer For Each Next-Schleife greifen Sie auf alle Pivot-Tabellenberichte auf
dem ersten Blatt Ihrer Arbeitsmappe zu, erweitern den Datenbereich und aktualisie-
ren die Pivot-Tabellenberichte. Der neue Datensatz wird am Ende der Pivot-Tabelle
angehängt. Die Pivot-Tabelle muss jetzt neu sortiert werden.
9.13 Pivot-Tabellen sortieren
Bei der vorhergehenden Aufgabe haben Sie gesehen, dass die Pivot-Tabelle zwar
erweitert wurde, jedoch wurden die neuen Einträge am Ende der Pivot-Tabelle ange-
hängt. Pivot-Tabellenberichte lassen sich in Excel genauso sortieren wie ganz nor-
male Listen. Dazu setzen Sie den Zeiger einfach auf das Feld im Spaltenbereich der
Pivot-Tabelle (im Beispiel Name) und wählen danach aus dem Menü Daten den Befehl
Sortieren. Den Sortiervorgang können Sie aber auch mit dem nächsten Makro aus
Listing 9.37 automatisch erledigen lassen:
Sub PivotTabelleSortieren()Dim Pivot1 As PivotTable
ActiveSheet.PivotTables("Pivot").PivotSelect _"'Name'[All]", xlLabelOnlySelection.Sort Order1:=xlAscending, _Type:=xlSortLabels, OrderCustom:=1, _Orientation:=xlTopToBottom
End Sub
Listing 9.37 Pivot-Tabellen sortieren
Mithilfe der Methode PivotSelect können Sie einen Teil einer Pivot-Tabelle markie-
ren. Dabei müssen Sie der Methode den Namen des Datenfeldes übergeben, das Sie
markieren möchten. Im zweiten Argument legen Sie den Markierungsmodus über
eine Konstante fest. In Tabelle 9.5 sehen Sie die Konstanten, die Ihnen zur Verfügung
stehen.
Konstante Beschreibung
xlBlanks Es werden nur leere Felder innerhalb der Pivot-Tabelle markiert.
xlButton Markiert eine bzw. mehrere Schaltflächen in einem Pivot-
Tabellenbericht.
Tabelle 9.5 Möglichkeiten der Markierung bei Pivot-Tabellen
9.14 Pivot-Tabellen formatieren
525
9
Im Anschluss an die Markierung der Daten in der Pivot-Tabelle wenden Sie die
Methode Sort an, deren Argument Sie bereits in Kapitel 6, »Die Programmierung von
Spalten und Zeilen«, kennengelernt haben.
9.14 Pivot-Tabellen formatieren
Seit der Excel-Version 2000 haben Sie die Möglichkeit, die AutoFormate auch für
Pivot-Tabellenberichte einzusetzen. Dabei haben Sie die Auswahl aus über vierzig
verschiedenen AutoFormaten.
Eine komplette Liste der AutoFormate in Excel finden Sie in der VBA-Online-Hilfe
unter dem Stichwort »AutoFormat«.
Um z. B. die Pivot-Tabelle mit der Mitarbeiterauswertung zu formatieren, können Sie
das Makro aus Listing 9.38 einsetzen:
Sub PivotFormatEinstellen()Dim Pivot1 As PivotTable
Set Pivot1 = Worksheets(1).PivotTables(1)With Pivot1.TableRange1.AutoFormat Format:=xlClassic3
End With
End Sub
Listing 9.38 AutoFormate auf Pivot-Tabellen anwenden
Über die Eigenschaft TableRange1 können Sie einen Pivot-Tabellenbericht auswählen.
Dabei sind allerdings keine Seitenfelder (z. B. Vorgesetzter) inbegriffen. Möchten
xlDataAndLabel Hierbei werden sowohl der Zeilenbezeichner als auch der Daten-
bereich markiert (Standard-Einstellung).
xlDataOnly Es wird nur der Datenbereich der Pivot-Tabelle markiert.
xlFirstRow Die erste Zeile einer Pivot-Tabelle wird markiert.
xlLabelOnly Es erfolgt eine Markierung des angegebenen Datenfeldes.
xlOrigin Markiert das Feld in der Pivot-Tabelle, das im Schnittpunkt
zwischen Zeilen- und Spaltenbereich steht (Anzahl-Name).
Konstante Beschreibung
Tabelle 9.5 Möglichkeiten der Markierung bei Pivot-Tabellen (Forts.)
9 Diagramme und Pivot-Tabellenberichte programmieren
526
Sie die Formatierung jedoch für die komplette Pivot-Tabelle, also inklusive der Sei-
tenfelder, anwenden, verwenden Sie die Eigenschaft TableRange2. Auf den so bekannt
gemachten Bereich wenden Sie die Methode AutoFormat an, die den markierten
Bereich mit einem vordefinierten Format belegt.
9.15 Seitenfeld der Pivot-Tabelle bestimmen
Wenn Sie sich die bisherigen Beispiele zu den Pivot-Tabellenberichten angesehen
haben, wird es Sie eventuell noch interessieren, wie Sie das Seitenfeld (Vorgesetz-
ter) über VBA ermitteln bzw. setzen können. Mit dem Seitenfeld können Sie die
Anzeige der Daten einer Pivot-Tabelle einschränken. Standardmäßig werden alle
Daten einer Pivot-Tabelle angezeigt. In diesem Fall ist der Eintrag Alle im Seitenfeld
aktiv. Mit einem Mausklick auf dieses Seitenfeld können Sie bestimmen, welche
Daten Sie in der Pivot-Tabelle anzeigen möchten. Das Seitenfeld fungiert also als eine
Art Datenfilter.
9.15.1 Seitenfeldeinstellung auslesen
Um herauszufinden, welcher Eintrag gerade in einem Seitenfeld aktiviert ist, setzen
Sie das Makro aus Listing 9.39 ein.
Sub PivotSeitenfeldAuslesen()Dim Pivot1 As PivotTable
Set Pivot1 = Worksheets(1).PivotTables(1)With Pivot1MsgBox "Die Einstellung ist: " & _
Abbildung 9.25 Das AutoFormat »xlClassic3« in der Anwendung
9.15 Seitenfeld der Pivot-Tabelle bestimmen
527
9
.PageFields(1).CurrentPageEnd With
End Sub
Listing 9.39 Den Eintrag im Seitenfeld einer Pivot-Tabelle ermitteln
Über die Eigenschaft PageFields können Sie das Seitenfeld einer Pivot-Tabelle be-
stimmen. Mithilfe der Eigenschaft CurrentPage lesen Sie danach den aktuell einge-
stellten Wert des Seitenfeldes aus.
9.15.2 Seitenfelder initialisieren
Um alle Daten in einer Pivot-Tabelle anzuzeigen, setzen Sie die Eigenschaft Current-
Page auf den Wert "(All)". Sehen Sie sich dazu das Makro aus Listing 9.40 an:
Sub PivotSeitenfeldAlleAnzeigen()Dim Pivot1 As PivotTable
Set Pivot1 = Worksheets(1).PivotTables(1)With Pivot1.PageFields(1).CurrentPage = "(All)"End With
End Sub
Listing 9.40 Seitenfelder in Pivot-Tabellen initialisieren
Abbildung 9.26 Das eingestellte Seitenfeld auslesen
9 Diagramme und Pivot-Tabellenberichte programmieren
528
9.15.3 Seitenfelder in Abhängigkeit von Zellen setzen
Möchten Sie die Einstellung des Seitenfeldes einer Pivot-Tabelle in Abhängigkeit von
einer bestimmten Zelle auf Ihrem Tabellenblatt festlegen, dann setzen Sie das Makro
aus Listing 9.41 ein:
Sub SeitenfeldSetzen()
Dim Pivot1 As PivotTable
Set Pivot1 = Worksheets(1).PivotTables(1)With Pivot1.PageFields(1).CurrentPage = _ActiveSheet.Range("D1").Value
End With
End Sub
Listing 9.41 Seitenfeld einer Pivot-Tabelle in Abhängigkeit von einer Zelle setzen
Wenn Sie in die eben vorgestellte Lösung noch ein wenig mehr Automatismus ein-
bauen möchten, überwachen Sie im Hintergrund die Zelle D1 und aktualisieren die
Pivot-Tabelle automatisch, wenn sich die Zelle D1 ändert. Dazu gehen Sie wie folgt
vor:
1. Wechseln Sie in die Entwicklungsumgebung.
2. Klicken Sie die Tabelle, auf der sich Ihr Pivot-Tabellenbericht befindet, im Projekt-
Explorer doppelt an.
3. Erfassen Sie das Ereignis Worksheet_Change:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$D$1" Then SeitenfeldSetzen
End Sub
Listing 9.42 Pivot-Tabellenaktualisierung automatisch starten
Sobald sich die Zelle D1 ändert, wird die Pivot-Tabelle entsprechend aktualisiert und
angezeigt.
In Kapitel 12, »Ereignisse in Excel einsetzen«, lernen Sie mehr über die Möglichkeiten,
die Ereignisse Ihnen bieten.
9.16 Slicer einfügen
529
9
9.16 Slicer einfügen
Ab der Version Excel 2010 gibt es bei Pivot-Tabellen die Möglichkeit, einen sogenann-
ten Slicer hinzuzufügen. Damit lassen sich Pivot-Tabellen besser steuern und flexib-
ler filtern.
Sub SlicerObjectEinfügen()
ActiveWorkbook.SlicerCaches(1).DeleteActiveWorkbook.SlicerCaches.Add(Tabelle3.PivotTables(1), _"Standort").Slicers.Add _Tabelle3, , "Standort", "Regionsfilter", 50, 220, 150, 200
End Sub
Listing 9.43 Pivot-Tabellenaktualisierung automatisch starten
Löschen Sie zunächst einen eventuell bereits bestehenden Slicer, indem Sie die
Methode Delete einsetzen. Wenden Sie die Methode Add an, um der Pivot-Tabelle
einen Slicer hinzuzufügen. Dabei geben Sie bekannt, auf welches Datenfeld sich der
Slicer beziehen soll. Des Weiteren können Sie den Namen des Slicers und seine
Beschriftung festlegen. Die Positionsangaben stehen für oben, links sowie für die
Breite und Höhe des Slicers.
Abbildung 9.27 Der Slicer hilft bei der Bedienung der Pivot-Tabelle.
Inhalt
5
Inhalt
Vorwort .................................................................................................................................................. 27
1 Grundsätzliches zur Programmierung 31
1.1 Wie gehe ich von Anfang an richtig vor? ......................................................... 31
1.1.1 Den Makrorekorder einsetzen ................................................................ 32
1.1.2 Die Aufzeichnung des Makrorekorders ergänzen ................................ 34
1.1.3 Makro ausführen ...................................................................................... 35
1.1.4 Wie erfahre ich mehr über die einzelnen Befehle? .............................. 37
2 Die Arbeits- und Entwicklungsumgebung für die Programmierung in Excel 39
2.1 Die Scroll Area festlegen ...................................................................................... 40
2.2 Tabellenblätter ein- und ausblenden ................................................................ 40
2.3 Neue Module einfügen ........................................................................................ 41
2.4 Die Symbolleiste »Bearbeiten« .......................................................................... 42
2.4.1 Eigenschaften/Methoden anzeigen ...................................................... 43
2.4.2 Konstanten anzeigen ............................................................................... 43
2.4.3 QuickInfo oder Parameterinfo ................................................................ 44
2.4.4 Ganzes Wort ............................................................................................. 44
2.4.5 Einzüge vergrößern bzw. verkleinern .................................................... 44
2.4.6 Haltepunkte setzen .................................................................................. 45
2.4.7 Kommentare im Code hinterlegen ........................................................ 45
2.4.8 Lesezeichen setzen ................................................................................... 46
2.5 Automatische Syntaxprüfung ............................................................................ 46
2.5.1 Befehle in der nächsten Zeile fortsetzen ............................................... 47
2.5.2 Mehrere Befehle in einer Zeile ................................................................ 47
2.5.3 Automatische Anpassung der einzelnen Befehle ................................ 48
2.6 Schnelles Arbeiten über Tastenkombinationen ............................................. 49
2.7 Suchen und Ersetzen ............................................................................................. 50
2.8 Der Objektkatalog ................................................................................................. 51
Inhalt
6
2.9 Die Testumgebung ................................................................................................ 53
2.9.1 Hilfe im Direktfenster .............................................................................. 53
2.9.2 Code Schritt für Schritt durchlaufen lassen .......................................... 54
3 Datentypen, Variablen und Konstanten 55
3.1 Der Einsatz von Variablen ................................................................................... 55
3.1.1 Regeln für die Syntax von Variablen ...................................................... 56
3.1.2 Variablen am Beginn vom Makro deklarieren ...................................... 56
3.1.3 Variablendeklarationen erzwingen ....................................................... 57
3.1.4 Die wichtigsten Variablentypen ............................................................. 57
3.1.5 Noch kürzere Deklaration von Variablen .............................................. 58
3.1.6 Die unterschiedlichen Variablentypen .................................................. 59
3.1.7 Die Objektvariablen ................................................................................. 61
3.2 Die Verwendung von Konstanten ..................................................................... 63
4 Sprachelemente in VBA in der praktischen Anwendung 65
4.1 Verzweigungen ...................................................................................................... 65
4.1.1 Normale Verzweigungen ........................................................................ 66
4.1.2 Verzweigungen in Blöcke einteilen ........................................................ 69
4.1.3 Die Kurzform einer Verzweigung ........................................................... 71
4.2 Die Anweisung »Select Case« für mehr Übersicht ......................................... 71
4.2.1 Indizes in Farben umsetzen .................................................................... 72
4.2.2 Zahlen in Texte umwandeln ................................................................... 74
4.2.3 Mit VBA Formate prüfen ......................................................................... 74
4.2.4 Fensterstatus ermitteln ........................................................................... 75
4.2.5 Makro bei ungültigem Wert beenden ................................................... 76
4.2.6 Excel-Version feststellen ......................................................................... 77
4.3 Schleifen in Excel praxisgerecht einsetzen ...................................................... 78
4.3.1 »For Next«-Schleifen ............................................................................... 78
4.3.2 »For Each Next«-Schleifen ...................................................................... 83
4.3.3 Die Schleife »Do Until Loop« ................................................................... 95
4.3.4 Die Schleife »Do While Loop« ................................................................. 107
Inhalt
7
5 Zellen und Bereiche programmieren 115
5.1 Die Navigation ....................................................................................................... 115
5.1.1 Die übersichtlichere Mehrfachauswahl ................................................ 116
5.1.2 Relative Markierungsformen .................................................................. 117
5.1.3 Mischformen von Markierungen ........................................................... 120
5.1.4 Bestimmte Zellen ansteuern .................................................................. 121
5.1.5 Markierung und Zellen auslesen ............................................................ 124
5.1.6 Verwendete Zellen zählen ...................................................................... 125
5.1.7 Zellen im Verbund .................................................................................... 126
5.1.8 Alle Zellen markieren ............................................................................... 130
5.1.9 Die umliegenden Zellen markieren ........................................................ 130
5.1.10 Auf Zellen zugreifen, ohne darauf zu sitzen ......................................... 131
5.1.11 Aktive Zelle in definiertem Bereich? ...................................................... 132
5.2 Bereiche und Zellen benennen ........................................................................... 134
5.2.1 Bereich benennen .................................................................................... 134
5.2.2 Mehrere Zellen benennen ....................................................................... 135
5.2.3 Konstante als Namen vergeben ............................................................. 137
5.2.4 Bezüge von benannten Bereichen ermitteln ........................................ 138
5.2.5 Namensprüfung einer Zelle .................................................................... 139
5.2.6 Benannte Bereiche markieren ................................................................ 139
5.2.7 Namensprüfung eines Bereichs ............................................................. 140
5.2.8 Alle Namen protokollieren ...................................................................... 141
5.2.9 Namen ändern ......................................................................................... 142
5.2.10 Bezugsadressen von Namen ändern ..................................................... 143
5.2.11 Dynamische Datenbezüge herstellen .................................................... 144
5.2.12 Wo steht der Zellcursor? ......................................................................... 147
5.2.13 Namen verbergen .................................................................................... 148
5.2.14 Namen löschen ........................................................................................ 149
5.2.15 Benutzerdefinierte Listen erstellen ........................................................ 150
5.3 Die Formatierung von Zellen und Bereichen ................................................... 152
5.3.1 Schriftart ermitteln .................................................................................. 152
5.3.2 Schriftart ändern ...................................................................................... 152
5.3.3 Zelleninhalte löschen .............................................................................. 154
5.3.4 Schriftfarbe teilweise ändern ................................................................. 155
5.3.5 Grenzwerte sofort sichtbar ..................................................................... 156
5.3.6 Sonderzeichen einfügen .......................................................................... 156
5.3.7 Chemische Formeln formatieren ........................................................... 159
5.3.8 Rahmenart und -farbe bestimmen ........................................................ 160
5.3.9 Rahmen übertragen ................................................................................. 161
Inhalt
8
5.3.10 Zahlenformate festlegen ........................................................................ 162
5.3.11 Datumsformate festlegen ...................................................................... 163
5.3.12 Formate übertragen ................................................................................. 163
5.3.13 Formate löschen ....................................................................................... 164
5.3.14 Nur Zahlenformate übertragen .............................................................. 164
5.3.15 Die bedingte Formatierung ..................................................................... 166
5.3.16 Sparklines einsetzen ................................................................................ 174
5.3.17 Formate suchen und ersetzen ................................................................ 175
5.4 Formeln einsetzen ................................................................................................. 176
5.4.1 Werte addieren ......................................................................................... 176
5.4.2 Werte subtrahieren ................................................................................. 176
5.4.3 Werte multiplizieren ................................................................................ 177
5.4.4 Werte dividieren ....................................................................................... 178
5.4.5 Werte potenzieren ................................................................................... 178
5.4.6 Komplexere Berechnungen .................................................................... 179
5.5 Funktionen erfassen ............................................................................................. 179
5.5.1 Bedingtes Zählen von Werten (ZÄHLENWENN) ................................... 179
5.5.2 Bedingte Summierung (SUMMEWENN) ............................................... 180
5.5.3 Auskunftssystem erstellen (SVERWEIS) ................................................. 181
5.5.4 Offene-Posten-Verwaltung (WENN) ...................................................... 183
5.5.5 Zahlen summieren (SUMME) ................................................................. 184
5.5.6 Rechnungsfälligkeit ermitteln (EDATUM) ............................................. 185
5.5.7 Minimalwert ermitteln ............................................................................ 185
5.5.8 Auswertungen durchführen ................................................................... 186
5.5.9 Bereiche summieren ................................................................................ 191
5.5.10 Mittelwert über InputBox ermitteln ...................................................... 192
5.5.11 Eurokonvertierung leicht gemacht ........................................................ 193
5.5.12 Obergrenzen festlegen bzw. runden ..................................................... 195
5.5.13 Formeln und Verknüpfungen schnell finden ........................................ 196
5.5.14 Bezüge umsetzen ..................................................................................... 199
5.6 Texte und Zahlen manipulieren ......................................................................... 201
5.6.1 Texte finden .............................................................................................. 201
5.6.2 Daten nach einem Datentransfer bereinigen ....................................... 203
5.6.3 Zahlenwerte richtig interpretieren ........................................................ 204
5.6.4 Zellen bereinigen oder manipulieren .................................................... 204
5.6.5 Telefonliste bearbeiten ........................................................................... 206
5.6.6 Warennummer bilden ............................................................................. 207
5.6.7 Formeln tauschen .................................................................................... 210
5.6.8 Nullen reinpumpen .................................................................................. 211
5.6.9 Nullen entfernen ...................................................................................... 212
Inhalt
9
5.6.10 Konstante Werte löschen und Formeln erhalten ................................. 212
5.6.11 Bereiche säubern ...................................................................................... 214
5.6.12 Leere Zellen löschen ................................................................................. 215
5.6.13 Formeln entfernen ................................................................................... 217
5.6.14 Buchstaben aus Zellen entfernen .......................................................... 217
5.6.15 Dateinamen aus Pfad extrahieren ......................................................... 218
5.6.16 Namen drehen .......................................................................................... 219
5.7 Die Programmierung von Tabellen (Listen bis Excel 2003) .......................... 220
5.7.1 Tabelle einrichten .................................................................................... 220
5.7.2 Eine Tabelle um eine Spalte ergänzen ................................................... 221
5.7.3 Tabelle um eine Zeile ergänzen .............................................................. 222
5.7.4 Tabelle filtern ........................................................................................... 223
5.7.5 Tabellen sortieren .................................................................................... 224
5.7.6 Ergebniszeile hinzufügen ........................................................................ 224
5.7.7 Tabelle entfernen ..................................................................................... 225
5.8 Gültigkeitsprüfung in Excel ................................................................................ 225
5.8.1 Zellen mit Gültigkeitsfunktion erkennen .............................................. 226
5.8.2 Gültigkeitskriterien erstellen .................................................................. 227
5.8.3 Datumsgrenzen festlegen ...................................................................... 229
5.8.4 Keine Arbeit am Sonntag ........................................................................ 230
5.8.5 Gültigkeitstypen ermitteln ..................................................................... 232
5.8.6 Gültigkeitskriterien löschen .................................................................... 233
5.9 Kommentare in Excel ........................................................................................... 233
5.9.1 Kommentare einfügen ............................................................................ 234
5.9.2 Tabelle mit Kommentaren füllen ........................................................... 237
5.9.3 Kommentare schnell finden ................................................................... 237
5.9.4 Kommentare löschen .............................................................................. 238
5.9.5 Kommentare protokollieren ................................................................... 239
5.9.6 Kommentare aus Zellentexten bilden ................................................... 241
5.9.7 Kommentare formatieren ....................................................................... 242
5.9.8 Kommentarfenster anpassen ................................................................. 243
5.10 Sonstige Lösungen mit Zellen und Bereichen ................................................. 243
5.10.1 Die Anzahl der Wörter im markierten Bereich ermitteln .................... 244
5.10.2 Das Auftauchen eines Zeichens im markierten Bereich ermitteln ..... 245
5.10.3 Werte in Bereichen zählen ...................................................................... 246
5.10.4 Die Eckdaten eines Bereichs ermitteln .................................................. 247
5.10.5 Erste freie Zelle in Bereich ermitteln ...................................................... 248
5.10.6 Zellen mit gleichem Inhalt füllen ........................................................... 249
5.10.7 Markierter Bereich wird zum Druckbereich .......................................... 250
5.10.8 Bereiche kopieren ..................................................................................... 251
Inhalt
10
5.10.9 Grafiken in Bereiche integrieren ............................................................ 253
5.10.10 Zellen sperren ........................................................................................... 257
5.10.11 Nicht gesperrte Zellen markieren .......................................................... 258
5.10.12 Mehrzeilige Eingabe in Zellen ................................................................. 258
5.10.13 Daten suchen ............................................................................................ 259
6 Die Programmierung von Spalten und Zeilen 263
6.1 Zeilen und Spalten markieren, zählen und ansteuern .................................. 263
6.1.1 Mehrere Zeilen auf dem Tabellenblatt markieren ............................... 264
6.1.2 Mehrere Spalten auf dem Tabellenblatt markieren ............................ 265
6.1.3 Zeilen und Spalten markieren ................................................................ 265
6.1.4 Markierte Spalten in Markierung zählen .............................................. 266
6.1.5 Letzte freie Zelle in Spalte anspringen .................................................. 267
6.1.6 Eine bestimmte Zelle in der Spalte ansteuern ...................................... 267
6.1.7 Anzahl der benutzten Spalten und Zeilen ermitteln ........................... 267
6.1.8 Zeilen und Spalten im umliegenden Bereich zählen ........................... 269
6.1.9 Erste und letzte Zeile im verwendeten Bereich ermitteln ................... 269
6.1.10 Adresse der letzten verwendeten Zelle einer Zeile ausgeben ............ 271
6.1.11 Markierte Spalten einer Zeile zählen ..................................................... 272
6.1.12 Mehrfachsprünge durchführen .............................................................. 272
6.1.13 Zeilen ab einer bestimmten Position markieren .................................. 274
6.1.14 Letzte Zeile in Tabelle einfärben ............................................................ 275
6.2 Zeilenhöhe und Spaltenbreite einstellen ......................................................... 276
6.3 Zeilen einfügen und löschen ............................................................................... 279
6.3.1 Zeile einfügen ........................................................................................... 280
6.3.2 Mehrere Zeilen einfügen ......................................................................... 280
6.3.3 Zeile löschen ............................................................................................. 282
6.3.4 Mehrere Zeilen löschen ........................................................................... 282
6.3.5 Löschen von Zeilen mit bestimmtem Text ............................................ 283
6.3.6 Wertabhängiges Zeilenlöschen .............................................................. 285
6.3.7 Datumszeilen löschen ............................................................................. 286
6.3.8 Wochenend-Zeilen löschen .................................................................... 287
6.3.9 Zeilen vor dem Startdatum löschen ...................................................... 288
6.3.10 Leerzeilen löschen .................................................................................... 289
6.3.11 Zeilen innerhalb einer Markierung löschen .......................................... 290
6.3.12 Zeilen bis auf Überschrift löschen .......................................................... 292
6.3.13 Doppelte Sätze löschen ........................................................................... 292
Inhalt
11
6.4 Spalten einfügen, löschen und bereinigen ...................................................... 293
6.4.1 Spalte einfügen ........................................................................................ 293
6.4.2 Mehrere Spalten einfügen ...................................................................... 294
6.4.3 Spalte löschen .......................................................................................... 294
6.4.4 Mehrere Spalten löschen ........................................................................ 294
6.4.5 Spalten bereinigen ................................................................................... 294
6.4.6 Spalten prüfen und Zellen bereinigen ................................................... 295
6.5 Zeilen ein- und ausblenden ................................................................................. 296
6.5.1 Leere Zeilen ausblenden .......................................................................... 299
6.5.2 Alle Zellen einblenden ............................................................................. 300
6.5.3 Versteckte Zeilen löschen ....................................................................... 300
6.6 Spalten ein- und ausblenden .............................................................................. 302
6.7 Spalten und Zeilen formatieren ......................................................................... 303
6.8 Daten sortieren ...................................................................................................... 307
6.9 Daten ausdünnen .................................................................................................. 308
6.10 Spalten vergleichen .............................................................................................. 309
6.11 Text auf Spalten verteilen ................................................................................... 310
6.12 Zeilenumbrüche schnell festlegen ..................................................................... 313
6.13 Daten übertragen .................................................................................................. 317
6.14 Wiederholungszeilen und -spalten definieren ............................................... 319
6.15 Auf der Suche nach der richtigen Zeile ............................................................. 319
6.15.1 Die Suche über die Schleife ..................................................................... 320
6.16 Direktsuche bei größeren Datenbeständen .................................................... 323
6.17 Zeilen filtern ........................................................................................................... 325
6.17.1 AutoFilter aktivieren bzw. deaktivieren ................................................. 326
6.17.2 Filterkriterien setzen ................................................................................ 328
6.18 Prüfungen und Auswertungen von Filtern ...................................................... 334
6.18.1 In welchen Spalten ist ein Filterkriterium gesetzt? .............................. 334
6.18.2 Wie viele Zeilen sind gefiltert? ............................................................... 335
6.18.3 Wie viele Zellen sind gefiltert? ............................................................... 337
6.18.4 Den größten Wert ermitteln ................................................................... 340
6.18.5 Die erste bzw. letzte gefilterte Zeile ermitteln ..................................... 340
6.18.6 Wie lauten die Filterkriterien? ................................................................ 341
6.19 Doppelte Werte mit dem Spezialfilter ermitteln ........................................... 342
6.20 Doppelte Werte mit dem Dictionary-Objekt entfernen ............................... 344
Inhalt
12
6.21 Gefilterte Daten transferieren ............................................................................ 347
6.21.1 Gefilterte Zeilen in anderes Tabellenblatt übertragen ........................ 348
6.21.2 Gefilterte Zeilen in eine Textdatei übertragen ..................................... 348
6.22 Filtern von Daten auch bei geschützten Tabellen durchführen .................. 349
6.23 Gliederungen .......................................................................................................... 350
6.23.1 Gliederung einfügen ................................................................................ 350
6.23.2 Gliederung entfernen .............................................................................. 353
6.23.3 Gruppierung anzeigen und ausblenden ................................................ 353
6.23.4 Gliederungssymbole bedienen ............................................................... 354
7 Tabellenblätter programmieren 357
7.1 Tabellenblätter einfügen ..................................................................................... 357
7.2 Tabellen markieren ............................................................................................... 360
7.3 Tabellenblätter benennen ................................................................................... 361
7.3.1 Tabelle nach dem Tagesdatum benennen ............................................ 361
7.3.2 Tabelle nach einem formatierten Datum benennen ........................... 361
7.3.3 Tabelle nach Zelleninhalt benennen ..................................................... 362
7.3.4 Tabelle nach Anwender und Tagesdatum benennen .......................... 363
7.3.5 Tabelle einfügen und benennen kombinieren ..................................... 363
7.4 Tabellenblätter löschen ....................................................................................... 363
7.4.1 Tabelle ohne Rückfrage löschen ............................................................. 364
7.4.2 Alle Tabellen löschen, nur die aktive Tabelle nicht .............................. 365
7.4.3 Alle leeren Tabellen in der Arbeitsmappe löschen ............................... 366
7.5 Tabellenblätter aktivieren ................................................................................... 367
7.6 Tabellenblätter gruppieren ................................................................................. 368
7.6.1 Mehrere Tabellen gruppieren ................................................................. 368
7.6.2 Alle Tabellen gruppieren ......................................................................... 369
7.6.3 Gruppierte Tabellen übertragen ............................................................ 370
7.6.4 Gruppierte Tabellen ermitteln ................................................................ 370
7.7 Tabellenblätter schützen ..................................................................................... 370
7.7.1 Tabellenschutz aufheben ........................................................................ 371
7.7.2 Alle Tabellen einer Arbeitsmappe schützen ......................................... 372
7.7.3 Aufgaben trotz Blattschutz ausführen .................................................. 373
7.7.4 Weitere Schutzfunktionen ab Excel 2002 ............................................. 374
Inhalt
13
7.8 Tabellenblätter ein- und ausblenden ................................................................ 375
7.8.1 Tabellenblätter sicher ausblenden ........................................................ 376
7.8.2 Tabellen je nach Status ein- oder ausblenden ...................................... 376
7.8.3 Alle Tabellenblätter anzeigen ................................................................. 377
7.8.4 Alle Tabellen außer der aktiven Tabelle ausblenden ........................... 377
7.9 Kopf- und Fußzeilen einrichten .......................................................................... 378
7.9.1 Fußzeile mit Anwendernamen ............................................................... 378
7.9.2 Fußzeile mit Pfad ..................................................................................... 378
7.9.3 Kopfzeile mit Datums- und Zeitangabe ................................................ 379
7.9.4 Fußzeile mit Dokumenteigenschaften füllen ....................................... 380
7.9.5 Kopfzeile mit Logo einrichten ................................................................. 381
7.9.6 Mehrzeilige Fußzeile anlegen ................................................................. 384
7.10 Druckbereiche festlegen ...................................................................................... 387
7.11 Tabellenblätter drucken ...................................................................................... 388
7.11.1 Mehrere Kopien drucken ......................................................................... 388
7.11.2 Markierte Bereiche drucken .................................................................... 389
7.11.3 Mehrere Tabellenblätter drucken .......................................................... 389
7.11.4 Den integrierten Drucken-Dialog aufrufen ........................................... 389
7.11.5 Wie viele Druckseiten enthält die Tabelle? ........................................... 390
7.12 Tabellenblätter kopieren, verschieben und einfügen ................................... 391
7.12.1 Tabellenblatt kopieren ............................................................................ 391
7.12.2 Tabellenblatt verschieben ....................................................................... 393
7.12.3 Tabellenblatt ohne Formeln und Verknüpfungen übertragen ........... 394
7.12.4 Tabelle in andere Arbeitsmappe kopieren ............................................ 394
7.12.5 Tabellenblatt als E-Mail versenden ........................................................ 395
7.13 Tabellenblätter sortieren ..................................................................................... 396
7.14 Tabellen suchen ..................................................................................................... 397
7.15 Tabellen sichern ..................................................................................................... 398
7.15.1 Verwendete Zeilen in andere Tabelle transferieren ............................ 399
7.15.2 Tabelle kopieren und umbenennen ....................................................... 400
7.15.3 Texte übertragen ..................................................................................... 400
7.15.4 Tabelle in Textdatei schreiben ................................................................ 402
7.16 Tabellenblätter konsolidieren ............................................................................ 403
7.16.1 Tabellenblätter summieren (Festwert) ................................................. 404
7.16.2 Tabellenblätter summieren (Verknüpfung) .......................................... 405
7.16.3 Tabellen in einer Tabelle zusammenführen ......................................... 406
7.17 Sonstige Lösungen mit Tabellen ........................................................................ 407
7.17.1 Registerlaschen ein- und ausblenden .................................................... 408
Inhalt
14
7.17.2 Registerlaschen einfärben ...................................................................... 409
7.17.3 Diashow starten ....................................................................................... 410
7.17.4 Tabellenblätter verlinken ........................................................................ 411
7.17.5 Bilder in Tabellen einfügen ..................................................................... 412
7.17.6 Hintergrundbild einfügen ....................................................................... 415
7.17.7 Tabellenansicht anpassen ....................................................................... 415
8 Die Programmierung von Arbeitsmappen 417
8.1 Arbeitsmappen speichern und sichern ............................................................. 417
8.1.1 Arbeitsmappe doppelt sichern ............................................................... 419
8.1.2 Bei Bedarf Verzeichnis anlegen .............................................................. 420
8.1.3 Den integrierten »Speichern unter«-Dialog aufrufen ......................... 420
8.1.4 Den Pfad der geladenen Arbeitsmappe ermitteln ............................... 421
8.1.5 Den Zustand der Arbeitsmappe ermitteln ............................................ 421
8.1.6 Arbeitsmappe ohne Makros speichern .................................................. 422
8.1.7 Arbeitsmappe als Textdatei speichern .................................................. 423
8.1.8 Arbeitsmappe aktuell speichern ............................................................ 424
8.2 Arbeitsmappen öffnen ......................................................................................... 425
8.2.1 Den integrierten »Öffnen«-Dialog aufrufen ......................................... 427
8.2.2 Die Liste der geöffneten Arbeitsmappen beeinflussen ....................... 428
8.2.3 Mehrere Arbeitsmappen öffnen ............................................................ 429
8.2.4 Alle geöffneten Arbeitsmappen ermitteln ............................................ 430
8.2.5 Die aktuellste Arbeitsmappe öffnen ...................................................... 431
8.2.6 Arbeitsmappe ohne Makrodialog starten ............................................. 432
8.3 Arbeitsmappen schließen .................................................................................... 434
8.3.1 Arbeitsmappe schließen – Änderungen akzeptieren ........................... 434
8.3.2 Arbeitsmappe schließen – Änderungen verwerfen ............................. 435
8.3.3 Arbeitsmappe bei Vernachlässigung schließen ................................... 436
8.3.4 Alle Arbeitsmappen bis auf eine schließen ........................................... 437
8.4 Arbeitsmappe löschen .......................................................................................... 438
8.4.1 Arbeitsmappe nach Verfallsdatum löschen .......................................... 438
8.5 Arbeitsmappe anlegen ......................................................................................... 439
8.5.1 Mappe mit Wochen-Tabellen anlegen .................................................. 440
8.5.2 Arbeitsmappen aus Zellen erstellen ...................................................... 441
Inhalt
15
8.6 Arbeitsmappen drucken ...................................................................................... 441
8.6.1 Nur bestimmte Tabellen drucken .......................................................... 442
8.7 Arbeitsmappen und Dokumenteigenschaften ............................................... 443
8.7.1 Dokumenteigenschaftsnamen abfragen .............................................. 444
8.7.2 Dokumenteigenschaftsinhalte ermitteln ............................................. 444
8.7.3 Letztes Speicherdatum abfragen ........................................................... 446
8.7.4 Erstelldatum herausfinden und manipulieren ..................................... 447
8.7.5 Den Autor einer Arbeitsmappe ermitteln ............................................. 448
8.7.6 Zusätzliche Dokumenteigenschaft anlegen ......................................... 449
8.7.7 Zugriffsdaten einer Arbeitsmappe ermitteln ....................................... 450
8.8 Arbeitsmappen und Verknüpfungen ................................................................ 452
8.8.1 Verknüpfungen in Hyperlinks umwandeln ........................................... 452
8.8.2 Verknüpfungen in Arbeitsmappe ermitteln ......................................... 454
8.8.3 Verknüpfungen aus der Arbeitsmappe entfernen ............................... 456
8.8.4 Verknüpfungen aktualisieren ................................................................. 458
8.8.5 Alle Dateien aus einem Ordner dokumentieren ................................... 458
8.9 Arbeitsmappe durchsuchen ................................................................................ 462
8.10 Arbeitsmappen miteinander vergleichen ........................................................ 464
8.11 Arbeitsmappenübersicht erstellen .................................................................... 466
8.12 Arbeitsmappen säubern ...................................................................................... 468
8.12.1 Alle Grafikobjekte aus einer Arbeitsmappe entfernen ........................ 468
8.12.2 Alle Kommentare einer Arbeitsmappe löschen .................................... 469
8.12.3 Benutzerdefinierte Listen löschen und erstellen .................................. 470
8.12.4 Formatvorlagen löschen und erstellen .................................................. 472
8.12.5 Alle benutzerdefinierten Namen einer Mappe löschen ...................... 474
9 Diagramme und Pivot-Tabellenberichte programmieren 477
9.1 Diagramme erstellen ............................................................................................ 478
9.1.1 Kosten im Säulendiagramm darstellen ................................................. 479
9.1.2 Das Zylinderdiagramm auf Knopfdruck ................................................ 481
9.1.3 Das Balkendiagramm aus Daten in der Umgebung ............................ 482
9.1.4 Tagesumsätze im Liniendiagramm anzeigen ....................................... 483
9.1.5 Tagesgenaue Formatierung im Punktdiagramm ................................. 486
9.1.6 Mittelwert in Diagramm bilden ............................................................. 488
Inhalt
16
9.2 Diagramme löschen .............................................................................................. 490
9.2.1 Diagrammblätter aus Arbeitsmappe entfernen .................................. 491
9.2.2 Eingebettete Diagramme aus Arbeitsmappe löschen ......................... 491
9.3 Diagramme identifizieren ................................................................................... 492
9.3.1 Diagramme umbenennen ....................................................................... 492
9.4 Datenbasis und Diagramm im Wechsel ........................................................... 493
9.5 Datenbeschriftungen hinzufügen und auslesen ............................................ 494
9.5.1 Datenbeschriftung aus Zellen verwenden ............................................ 496
9.5.2 Daten aus Diagrammen auslesen .......................................................... 498
9.6 Diagramme positionieren und skalieren .......................................................... 501
9.6.1 Die Höhe und Breite eines Diagramms festlegen ................................ 501
9.6.2 Diagramme platzieren ............................................................................. 502
9.6.3 Diagramme skalieren .............................................................................. 505
9.7 Diagramme als Grafiken speichern ................................................................... 507
9.8 Diagramme formatieren ...................................................................................... 509
9.8.1 Gewinn und Verlust in einem Säulendiagramm präsentieren ........... 509
9.8.2 Eine Ist-Darstellung in einem Säulendiagramm darstellen ................ 512
9.8.3 Legenden formatieren ............................................................................. 513
9.8.4 Zusätzliche Labels hinzufügen ............................................................... 514
9.9 Dynamische Diagramme erzeugen ................................................................... 515
9.10 Pivot-Tabellenberichte erstellen ........................................................................ 517
9.11 Pivot-Tabellen aktualisieren ............................................................................... 520
9.11.1 Eine einzelne Pivot-Tabelle aktualisieren .............................................. 520
9.11.2 Mehrere Pivot-Tabellen auf einem Tabellenblatt aktualisieren ......... 521
9.11.3 Alle Pivot-Tabellen in Arbeitsmappe aktualisieren .............................. 521
9.12 Pivot-Tabellen dynamisch erweitern ................................................................ 522
9.13 Pivot-Tabellen sortieren ...................................................................................... 524
9.14 Pivot-Tabellen formatieren ................................................................................. 525
9.15 Seitenfeld der Pivot-Tabelle bestimmen .......................................................... 526
9.15.1 Seitenfeldeinstellung auslesen .............................................................. 526
9.15.2 Seitenfelder initialisieren ........................................................................ 527
9.15.3 Seitenfelder in Abhängigkeit von Zellen setzen ................................... 528
9.16 Slicer einfügen ....................................................................................................... 529
Inhalt
17
10 Benutzerdefinierte Funktionen und Funktionsmakros 531
10.1 Benutzerdefinierte Funktionen .......................................................................... 531
10.1.1 Aktive Arbeitsmappe ermitteln .............................................................. 532
10.1.2 Aktives Tabellenblatt ermitteln .............................................................. 533
10.1.3 Ist eine Tabelle leer? ................................................................................ 535
10.1.4 Ist eine Tabelle geschützt? ...................................................................... 535
10.1.5 Befinden sich Daten in einer bestimmten Spalte? ............................... 536
10.1.6 Den letzten Wert einer Spalte ermitteln ............................................... 536
10.1.7 Den letzten Wert einer Zeile ermitteln .................................................. 537
10.1.8 Den aktiven Bearbeiter identifizieren .................................................... 538
10.1.9 Funktion zum Umsetzen von Noten ...................................................... 539
10.1.10 Rangfolge als Text ausgeben .................................................................. 540
10.1.11 Enthält eine bestimmte Zelle eine Formel? .......................................... 541
10.1.12 Enthält eine bestimmte Zelle ein Gültigkeitskriterium? ..................... 542
10.1.13 Enthält eine Zelle einen Kommentar? ................................................... 543
10.1.14 Ist eine bestimmte Zelle verbunden? .................................................... 544
10.1.15 Störende Zeichen eliminieren ................................................................. 544
10.1.16 Initialen aus Namen erstellen ................................................................ 545
10.1.17 Formeln und Verknüpfungen in Festwerte umwandeln ..................... 546
10.1.18 Nur Zellen mit Fettdruck addieren ......................................................... 546
10.1.19 Nur Zellen mit roter Schriftfarbe addieren ........................................... 547
10.1.20 Mit Uhrzeiten rechnen ............................................................................ 548
10.1.21 Erweitertes Runden durchführen ........................................................... 550
10.1.22 Hintergrundfarben auslesen .................................................................. 551
10.1.23 Zahlenformate ermitteln ........................................................................ 552
10.1.24 Schnelles Umrechnen von Geschwindigkeiten .................................... 553
10.1.25 Extremwerte berechnen ......................................................................... 554
10.1.26 Erste Ziffer in einer Zelle ermitteln ........................................................ 555
10.1.27 Buchstaben aus Zellen entfernen .......................................................... 557
10.1.28 Anzahl der Ziffern einer Zelle ermitteln ................................................ 558
10.1.29 Römische Zahlen in arabische umwandeln .......................................... 559
10.1.30 Befindet sich eine Grafik in einer Tabelle? ............................................ 560
10.1.31 Nur Zahlenwerte zulassen ...................................................................... 561
10.2 Modulare Funktionen schreiben ........................................................................ 563
10.2.1 Dateien in einem Verzeichnis zählen .................................................... 563
10.2.2 Prüfen, ob eine bestimmte Datei existiert ............................................ 564
10.2.3 Prüfen, ob eine bestimmte Datei geöffnet ist ...................................... 565
10.2.4 Prüfen, ob eine Datei gerade bearbeitet wird ....................................... 566
Inhalt
18
10.2.5 Prüfen, ob ein bestimmter Name in der Arbeitsmappe
verwendet wird ........................................................................................ 567
10.2.6 Prüfen, ob ein Add-In eingebunden ist .................................................. 568
10.2.7 Dokumenteigenschaften einer Arbeitsmappe ermitteln .................... 571
10.2.8 Bedingte Formatierung mit mehr als drei Farben ................................ 573
10.2.9 Wochenende ermitteln ........................................................................... 575
10.2.10 Den letzten Tag im Monat ermitteln ..................................................... 576
10.2.11 Das Osterdatum für ein bestimmtes Jahr ermitteln ............................ 577
10.2.12 Ermittlung der Kalenderwoche nach DIN EN 28601/ISO 8601 ............ 580
10.2.13 Den letzten Wert einer Spalte ermitteln ............................................... 581
10.2.14 Grafikelemente in einem definierten Bereich löschen ........................ 582
10.2.15 Funktionen verfügbar machen ............................................................... 584
10.2.16 Speichern der Funktionen in der persönlichen Arbeitsmappe ........... 584
10.2.17 Speichern der Funktionen in einem Add-In .......................................... 586
10.2.18 Ein Add-In einbinden ............................................................................... 587
11 Programmierung mit Windows-API-Aufrufen 589
11.1 Ermittlung der Laufwerke am PC ....................................................................... 590
11.2 Bedienung des CD-ROM-Laufwerks .................................................................. 592
11.3 Bildschirmauflösung ermitteln .......................................................................... 593
11.4 Ist ein externes Programm gestartet? .............................................................. 594
11.5 Wie lange läuft ein externes Programm? ........................................................ 594
11.6 Excel schlafen schicken ........................................................................................ 597
11.7 Verzeichnisse über eine API erstellen bzw. löschen ....................................... 597
11.8 Netzlaufwerk verbinden ...................................................................................... 598
11.9 Verzeichnisbaum anzeigen und auswerten .................................................... 599
11.10 Windows-Info-Bildschirm anzeigen .................................................................. 601
11.11 Windows-Verzeichnis ermitteln ........................................................................ 602
11.12 Standardverzeichnis temporär ändern ............................................................. 603
11.13 Anwendernamen ausgeben ................................................................................ 604
11.14 Computernamen ermitteln ................................................................................. 604
11.15 Texte mit API-Funktionen konvertieren ........................................................... 605
11.16 Cursorposition in Pixel angeben ........................................................................ 605
Inhalt
19
11.17 Zwischenablage löschen ...................................................................................... 607
11.18 Sounds per API-Funktion ausgeben .................................................................. 607
11.19 PC piepsen lassen .................................................................................................. 608
11.20 Dateien suchen ...................................................................................................... 608
11.21 Tasten abfangen .................................................................................................... 609
12 Ereignisse in Excel einsetzen 611
12.1 Ereignisse für die Arbeitsmappe ........................................................................ 612
12.1.1 Allgemeine Vorgehensweise beim Erstellen von Arbeitsmappen-
Ereignissen ................................................................................................ 612
12.1.2 Aktivieren des richtigen Tabellenblatts ................................................. 614
12.1.3 Einen Bereich begrenzen ......................................................................... 617
12.1.4 Alle ausgeblendeten Tabellen bei Bedarf einblenden ......................... 618
12.1.5 Den letzten Bearbeiter einer Arbeitsmappe ermitteln ........................ 618
12.1.6 Makro am Monatsende starten .............................................................. 619
12.1.7 Symbolleisten ein- und ausblenden ...................................................... 620
12.1.8 Die Datumszelle in einer Tabelle finden ............................................... 622
12.1.9 Das Schließen der Arbeitsmappe bedingt verhindern ......................... 622
12.1.10 Arbeitsmappe ohne Rückfrage schließen .............................................. 623
12.1.11 Letztes Bearbeitungsdatum festhalten ................................................. 624
12.1.12 Datenbestand vor dem Speichern sortieren ......................................... 624
12.1.13 Die Dauer der Bearbeitung einer Mappe festhalten ............................ 625
12.1.14 Schnell Tabellen gleicher Struktur vergleichen .................................... 627
12.1.15 Die Lösung für das sparsame Drucken .................................................. 630
12.1.16 Einfügen von Blättern verhindern .......................................................... 631
12.1.17 Druckstatistik führen ............................................................................... 631
12.1.18 Die wichtigsten Ereignisse für die Arbeitsmappe im Überblick ......... 632
12.2 Ereignisse für das Tabellenblatt ......................................................................... 634
12.2.1 Allgemeine Vorgehensweise bei der Einstellung von
Tabellenereignissen ................................................................................. 634
12.2.2 Passworteingabe beim Aktivieren einer Tabelle .................................. 635
12.2.3 Starten einer UserForm ........................................................................... 636
12.2.4 Beim Verlassen eines Tabellenblatts Daten neu berechnen ............... 637
12.2.5 Schiffe versenken spielen ........................................................................ 637
12.2.6 Vergleich von zwei Spalten ..................................................................... 639
12.2.7 Änderungen in einer Tabelle sichtbar machen ..................................... 641
Inhalt
20
12.2.8 Unterschiedliche Makros je nach Zellenwert starten .......................... 642
12.2.9 Automatisch die Spaltenbreite einstellen ............................................. 644
12.2.10 Mehrere Bereiche überwachen .............................................................. 645
12.2.11 Eingabe auf mehreren Tabellen gleichzeitig durchführen .................. 646
12.2.12 Änderungen dokumentieren .................................................................. 647
12.2.13 Wareneingänge dokumentieren ............................................................ 647
12.2.14 Artikelliste bereinigen ............................................................................. 648
12.2.15 Nur einmalige Eingabe zulassen ............................................................ 650
12.2.16 Tabellenname aus Zelle herleiten .......................................................... 651
12.2.17 Automatische Suche von Datensätzen ................................................. 652
12.2.18 Alternative Formularsteuerung .............................................................. 653
12.2.19 Automatisches Runden nach Eingabe ................................................... 654
12.2.20 Eine Blaupause erzeugen ........................................................................ 655
12.2.21 Formelcheck nach Eingabe ..................................................................... 656
12.2.22 Nettowert automatisch ausweisen ....................................................... 656
12.2.23 Eine selbst rechnende Zelle .................................................................... 657
12.2.24 Die Eingabe von Dubletten verhindern ................................................. 658
12.2.25 Die Lesbarkeit der aktuellen Auswahl erhöhen .................................... 659
12.2.26 Mehr Übersichtlichkeit in Tabellen herstellen ...................................... 661
12.2.27 Aktuelle Zelle übertragen ........................................................................ 663
12.2.28 Eingabe verhindern .................................................................................. 664
12.2.29 Markierung überwachen ......................................................................... 665
12.2.30 Mausklicks überwachen .......................................................................... 667
12.2.31 Die Aktualisierung von Pivot-Tabellen überwachen ............................ 668
12.2.32 Direkte Verbindung zu einer anderen Tabelle erstellen ...................... 669
12.2.33 Alle Ereignisse für Tabellen im Überblick .............................................. 670
12.3 Reaktion auf Tastendruck ................................................................................... 670
12.3.1 Tastenkombinationen ein- und ausschalten ........................................ 672
12.3.2 Zeilenumbrüche zurücksetzen ............................................................... 674
12.3.3 Texte einfügen ......................................................................................... 675
12.3.4 Speichern per Tastenkombination verhindern ..................................... 676
12.3.5 Blattsperre ohne Blattschutz erstellen .................................................. 677
12.4 Zeitsteuerung in Excel .......................................................................................... 678
12.4.1 Regelmäßig die Uhrzeit anzeigen .......................................................... 679
12.4.2 Die Zeit läuft ... ......................................................................................... 680
12.4.3 Regelmäßige Kontrolle, ob eine Arbeitsmappe verfügbar ist ............. 681
12.4.4 Zellen blinken lassen ............................................................................... 683
Inhalt
21
13 VBE-Programmierung 685
13.1 Die VBE-Bibliothek einbinden ............................................................................ 686
13.2 Die VBE-Bibliothek deaktivieren ........................................................................ 687
13.3 Weitere Bibliotheken einbinden ........................................................................ 688
13.3.1 Objektbibliotheken deaktivieren ............................................................ 689
13.3.2 Informationen zu Objektbibliotheken ausgeben ................................. 690
13.4 VBE-Editor aufrufen .............................................................................................. 691
13.5 Die VBE ein- und ausschalten ............................................................................. 691
13.6 Neue Module einfügen ........................................................................................ 692
13.7 Einzelne Module löschen ..................................................................................... 693
13.8 Makros löschen ...................................................................................................... 693
13.8.1 Einzelnes Makro löschen ......................................................................... 693
13.8.2 Alle Makros aus einer Arbeitsmappe entfernen ................................... 694
13.9 Module mit Makros bestücken ........................................................................... 695
13.9.1 Makro zeilenweise in ein Modul übertragen ........................................ 696
13.9.2 Makros aus einer Textdatei in ein Modul überführen ......................... 697
13.9.3 Alle Mappen aus einem Verzeichnis mit Code versorgen ................... 699
13.10 Export von VBA-Modulen in Textdateien ........................................................ 700
13.11 Identifikation von Komponenten ...................................................................... 702
13.12 Ein bestimmtes Makro auskommentieren ...................................................... 703
13.13 Das Direktfenster löschen ................................................................................... 703
14 Dialoge, Meldungen und UserForms programmieren 705
14.1 Die »Msgbox«-Meldung ...................................................................................... 705
14.1.1 Welche Schaltfläche wurde angeklickt? ................................................ 708
14.1.2 Löschrückfrage ......................................................................................... 708
14.1.3 Informationen anzeigen .......................................................................... 709
14.1.4 Ist eine bestimmte Arbeitsmappe vorhanden? .................................... 710
14.2 Textfelder für Meldungen einsetzen ................................................................ 711
14.3 Die »InputBox«-Eingabemaske .......................................................................... 712
14.3.1 Mehrwertsteuer errechnen ..................................................................... 714
Inhalt
22
14.3.2 Mehrere Eingaben erfassen .................................................................... 715
14.3.3 Bereiche über eine Input-Box markieren ............................................... 715
14.3.4 Funktionen über eine Input-Box eingeben ........................................... 716
14.4 Integrierte Dialoge einsetzen ............................................................................. 717
14.4.1 Den »Öffnen«-Dialog aufrufen ............................................................... 718
14.4.2 Mehrere Dateien zum Öffnen heranziehen .......................................... 719
14.4.3 Der Dialog »Öffnen« mit automatischer Passworteingabe ................ 720
14.4.4 Die Farbpalette aufrufen ......................................................................... 721
14.4.5 Den Dialog »Drucken« aufrufen ............................................................. 721
14.4.6 Den Dialog für den Blattschutz anzeigen ............................................. 722
14.4.7 Den »Suchen«-Dialog aufrufen .............................................................. 723
14.4.8 Den Dialog »Optionen« aufrufen ........................................................... 723
14.4.9 Der Dialog »E-Mail versenden« .............................................................. 724
14.4.10 Der Ordner-Auswahl-Dialog ................................................................... 725
14.4.11 Weitere integrierte Dialoge in Excel ...................................................... 726
14.5 Eigene Dialoge entwerfen und programmieren ............................................. 727
14.5.1 Eine UserForm zeichnen .......................................................................... 727
14.5.2 Der Entwurf einer automatischen dialoggesteuerten
Rechnungserfassung ............................................................................... 731
14.5.3 Der erste Aufruf der neuen UserForm ................................................... 733
14.5.4 Reihenfolge der Elemente festlegen ...................................................... 733
14.5.5 UserForms mit Makros bestücken ......................................................... 734
14.5.6 Die UserForm beenden ............................................................................ 737
14.5.7 Alle Textfelder initialisieren .................................................................... 737
14.5.8 Inhalte von Textfeldern markieren ........................................................ 738
14.5.9 UserForm mit Tabellendaten füllen ....................................................... 738
14.5.10 Textfelder mit Farben belegen ............................................................... 742
14.5.11 Textfelder prüfen ..................................................................................... 743
14.5.12 Bezeichnungsfelder dynamisch halten ................................................. 745
14.5.13 Textfelder ein- und ausblenden ............................................................. 746
14.5.14 Passwortabfrage über UserForm ........................................................... 747
14.5.15 Die Ausmaße von UserForms ändern .................................................... 750
14.5.16 Die Hintergrundfarbe der UserForm festlegen .................................... 752
14.5.17 Listenfelder in UserForms programmieren ........................................... 754
14.5.18 Listenfelder und Textfelder kombinieren .............................................. 756
14.5.19 Listenfeld leeren ....................................................................................... 757
14.5.20 Listeneinträge markieren ........................................................................ 757
14.5.21 Listenfeld ohne Leerzeilen füllen ........................................................... 759
14.5.22 Mehrspaltige Listenfelder programmieren ........................................... 760
14.5.23 Dropdown-Felder einsetzen ................................................................... 762
Inhalt
23
14.5.24 Dropdown-Felder ohne Duplikate füllen ............................................... 764
14.5.25 Dropdown-Felder dynamisch füllen ...................................................... 766
14.5.26 Auswahl aus einem Dropdown-Feld erzwingen .................................. 766
14.5.27 Der Datums-Bug in Dropdown-Feldern ................................................. 767
14.5.28 Abwesenheitszeiten über UserForm erfassen ...................................... 767
14.5.29 Multiseiten erstellen ............................................................................... 770
14.5.30 Multiseiten im Praxiseinsatz .................................................................. 772
14.5.31 Fortschrittsbalken für UserForms programmieren .............................. 775
14.5.32 Bilder in UserForms anzeigen ................................................................. 776
15 Steuerelemente in Tabellen programmieren 779
15.1 Schaltflächen einsetzen ....................................................................................... 780
15.1.1 Eine Schaltfläche automatisch in eine Tabelle einfügen .................... 780
15.1.2 Schaltfläche mit Bild einfügen ............................................................... 781
15.1.3 Makro automatisch starten .................................................................... 783
15.1.4 Welche Schaltfläche wurde angeklickt? ................................................ 783
15.1.5 Die mobile Schaltfläche ........................................................................... 784
15.1.6 Umschaltflächen programmieren ......................................................... 784
15.2 Textboxen programmieren ................................................................................. 788
15.2.1 Textfelder auslesen .................................................................................. 788
15.2.2 Textfelder mit Zelleninhalten füllen ...................................................... 789
15.2.3 Textfelder je nach Eingabe sperren ....................................................... 790
15.3 Dropdown-Felder programmieren .................................................................... 791
15.3.1 Dropdown-Felder füllen .......................................................................... 791
15.3.2 Dropdown-Felder sortieren ..................................................................... 793
15.3.3 Dropdown-Felder leeren ......................................................................... 795
15.3.4 Dropdown-Felder automatisch erstellen .............................................. 795
15.4 Listenfelder programmieren ............................................................................... 796
15.4.1 Listenfelder füllen .................................................................................... 796
15.4.2 Listenfelder bereinigen ............................................................................ 797
15.5 Drehfelder programmieren ................................................................................. 798
15.5.1 Preiskalkulation schrittweise durchführen ........................................... 798
15.5.2 Objekte schrittweise drehen ................................................................... 799
15.6 Bildlaufleisten einsetzen ..................................................................................... 801
15.7 Schnelles Umschalten über Optionsfelder ....................................................... 802
Inhalt
24
15.8 Kontrollkästchen programmieren ..................................................................... 803
15.8.1 Mehrfachauswahl mit Kontrollkästchen .............................................. 803
15.8.2 Kontrollkästchen synchronisieren ......................................................... 804
15.8.3 Kontrollkästchen initialisieren ............................................................... 805
15.9 Steuerelemente identifizieren ........................................................................... 806
16 Kontextmenüs und Ribbon-Programmierung 809
16.1 Die Programmierung von Kontextmenüs ........................................................ 809
16.1.1 Kontextmenüs deaktivieren ................................................................... 810
16.1.2 Das Zellen-Kontextmenü erweitern ...................................................... 811
16.1.3 Kontextmenü aufbauen (dreistufig) ...................................................... 814
16.1.4 Kontextmenü zurücksetzen .................................................................... 815
16.2 Die Ribbon-Programmierung .............................................................................. 815
16.2.1 Der »Custom UI Editor« ........................................................................... 816
16.2.2 Weitere wichtige Quellen und Hilfen .................................................... 818
16.2.3 Ribbon mit Schaltflächen erstellen ........................................................ 819
16.2.4 Ribbon mit ComboBox erstellen ............................................................ 821
16.2.5 Ribbon mit bereits verfügbaren Funktionen bestücken ...................... 823
17 Excel und sein Umfeld 827
17.1 Textdateien im Zugriff von Excel ....................................................................... 827
17.1.1 Textdateien speichern ............................................................................. 827
17.1.2 Textdateien mit Trennzeichen einlesen ................................................ 829
17.1.3 Textdateien fixer Länge öffnen .............................................................. 830
17.1.4 Mehrere Textdateien in eine Tabelle einfügen .................................... 831
17.2 Excel und Word im Duett ..................................................................................... 833
17.2.1 Eine Excel-Tabelle unverknüpft nach Word übertragen ..................... 834
17.2.2 Eine Excel-Tabelle verknüpft nach Word übertragen .......................... 837
17.3 Excel im Zusammenspiel mit Access ................................................................. 839
17.3.1 Die Aufgabe .............................................................................................. 839
17.3.2 Die Realisierung ....................................................................................... 840
17.3.3 Datenbankabfrage durchführen ............................................................ 840
17.3.4 Datenbank-Update durchführen ........................................................... 842
17.4 Excel und Outlook ................................................................................................. 844
17.4.1 Tabelle als E-Mail versenden .................................................................. 845
Inhalt
25
17.4.2 Einen Excel-Bereich als E-Mail versenden ............................................. 846
17.4.3 Mehrere Arbeitsmappen per E-Mail versenden ................................... 847
17.4.4 E-Mail bei Änderung senden ................................................................... 850
17.4.5 Kontakte austauschen ............................................................................. 851
18 Fehlerbehandlung, Tuning und der Schutz von VBA-Projekten 855
18.1 Kleinere Fehler beheben ...................................................................................... 855
18.1.1 Stimmt die Syntax? .................................................................................. 855
18.1.2 Ist die Variablendefinition gegeben? ..................................................... 856
18.1.3 Objekt vorhanden? .................................................................................. 856
18.1.4 Methode, Eigenschaft verfügbar? .......................................................... 857
18.2 Schwerwiegendere Fehler ................................................................................... 857
18.2.1 Fehler im Vorfeld erkennen und reagieren ........................................... 857
18.2.2 Fehler ignorieren ...................................................................................... 858
18.2.3 Fehlerursache ermitteln .......................................................................... 858
18.2.4 Die Funktion »IsError« ............................................................................. 859
18.3 Das Add-In »MZ-Tools« ........................................................................................ 860
18.3.1 Zeilennummern automatisch einfügen ................................................ 861
18.3.2 Eine Fehlerbehandlung mit den MZ-Tools hinzufügen ....................... 862
18.4 Laufzeiten verkürzen ............................................................................................ 863
18.4.1 Befehle zusammenfassen ....................................................................... 864
18.4.2 Variablen und Konstanten einsetzen .................................................... 866
18.4.3 Berechnung und Bildschirmaktualisierung ausschalten ..................... 867
18.4.4 Integrierte Tabellenfunktionen anwenden ........................................... 868
18.4.5 Weitere Faktoren zur Geschwindigkeitssteigerung ............................. 868
18.5 VBA-Projekte schützen ......................................................................................... 869
18.5.1 VBA-Quellcode schützen ......................................................................... 869
18.5.2 Add-In erstellen ........................................................................................ 870
18.5.3 Ein Add-In einbinden ............................................................................... 871
19 FAQ zur Programmierung mit Excel 873
19.1 Bildschirmaktualisierung abschalten ............................................................... 873
19.2 Kopfzeile mit komplettem Pfad ......................................................................... 874
Inhalt
26
19.3 Die letzte Zelle in einer Tabelle finden ............................................................. 875
19.4 Texte suchen und ersetzen .................................................................................. 876
19.5 Nicht benötigte Zeilen löschen .......................................................................... 877
19.6 Seitenwechsel festlegen ...................................................................................... 878
19.7 Druckbereich festlegen bzw. aufheben ............................................................ 879
19.8 Rechnen mit bedingten Formaten ..................................................................... 880
19.9 Doppelte Sätze ermitteln .................................................................................... 881
19.10 Zeilenumbrüche und Zellenverbunde aufheben ............................................ 882
19.11 Zellenverknüpfungen finden .............................................................................. 883
19.12 Datumsdifferenzen errechnen ........................................................................... 884
19.13 Warnmeldungen deaktivieren ........................................................................... 885
19.14 Datentransport nach Word ................................................................................. 886
19.15 Laufwerk und Pfad der aktiven Arbeitsmappe anzeigen ............................. 889
19.16 Drag & Drop ein- und ausschalten .................................................................... 889
19.17 Bilder umbenennen .............................................................................................. 890
19.18 Dateiinformationen auslesen ............................................................................. 891
Anhang: Nützliche und interessante Makros 895
Tabellenblätter alphabetisch sortieren ........................................................................ 895
Alle Tabellen einer Arbeitsmappe schützen ................................................................ 896
Alle Diagramme als Bilder exportieren ........................................................................ 897
Alle ausgeblendeten Tabellen einblenden .................................................................. 899
Buchstaben und Sonderzeichen aus dem Zellinhalt löschen ................................... 900
In allen Blättern Formeln mit Werten überschreiben ............................................... 901
Alle Formeln schützen und verstecken ......................................................................... 902
Alle Tabellenblätter in einzelnen Arbeitsmappen speichern ................................... 903
Alle Zellen mit Formeln oder Verweisen einfärben ................................................... 905
Alle versteckten oder gefilterten Zeilen löschen ........................................................ 905
Index ....................................................................................................................................................... 907
Index
907
Index
A
Activate ............... 186, 367, 398, 410, 422, 464, 712
ActiveCell .................................................... 71, 125, 273
ActiveSheet .................................. 385, 479, 501, 502
ActiveWorkbook .................................................... 421
Add ......... 46, 221, 222, 357, 359, 412, 422, 431, 440,
441, 461, 462, 473, 489, 516, 692, 720,
795, 812, 814, 836, 850
AddColorScale ......................................................... 172
AddComment ....................................... 234, 236, 237
AddCustomList ............................................... 151, 471
AddDataBar .............................................................. 173
AddFromFile .......................................................... 689
AddFromGuid ........................................................ 687
AddIconSetCondition .......................................... 173
Add-Ins ............................................................ 570, 870
AddItem ................................ 754, 759, 763, 769, 792
AddLabel ................................................................... 514
Address .......... 63, 124, 127, 138, 170, 202, 247, 272,
582, 876
AddShape ................................................................. 253
AdvancedFilter ....................................................... 343
Aktivierungsreihenfolge festlegen ................ 734
AllowMultiSelect .................................................. 720
AlternativeText ...................................................... 255
And ............................................................................... 66
Änderungen dokumentieren .......................... 647
Anwendername
ausgeben ............................................................. 604
ermitteln .............................................................. 363
ApplyDataLabels ......................................... 490, 495
Arbeitsmappe
abfragen ............................................................... 532
anlegen ................................................................ 439
ansprechen ............................................................ 61
ausdünnen ............................................................ 83
drucken ................................................................. 441
durchsuchen ................................................ 85, 462
löschen ................................................................. 439
öffnen .................................................................... 425
säubern ................................................................ 468
schließen ............................................ 434, 437, 622
sichern ................................................................... 419
speichern .............................................................. 417
Arbeitsmappenname abfragen ......................... 62
Arbeitsmappenübersicht erstellen ............... 466
Areas .................................................................. 116, 266
Array .......................................................................... 368
Asc ....................................................................... 218, 557
AsktoUpdateLinks ................................................ 427
Auskommentierung aufheben ......................... 46
Ausrichtung festlegen ......................................... 314
Auswertungen durchführen ............................ 186
Author ....................................................................... 448
AutoFilter ............................................... 326, 329, 333
aktivieren ............................................................ 326
ausschalten ........................................................ 328
AutoFilterMode ............................................ 326, 328
AutoFilter-Pfeile ausblenden ........................... 350
AutoFit .................................................... 277, 279, 854
AutoFormat ............................................................. 526
AutoOutline ............................................................. 351
AutoSize ............................................................ 235, 781
Average ...................................................................... 191
B
BackColor ......................................................... 752, 781
BCC ............................................................................. 849
Bearbeiter ermitteln ............................................ 538
Bedingte Formate anpassen ............................. 170
Bedingte Formatierung
einfügen ............................................................... 166
löschen ................................................................. 170
Bedingte Summierung anwenden ................ 180
Beep ............................................................................ 682
Befehlskette trennen ............................................. 47
BeginGroup .............................................................. 812
Benutzerdefinierte Liste erstellen ................. 150
Bereich
anpassen ............................................................. 120
ansprechen .......................................................... 116
auslesen ............................................................... 247
begrenzen ............................................................. 617
benennen .............................................................. 134
einfügen ................................................................ 251
kopieren ................................................................ 251
markieren ............................................. 116, 117, 139
prüfen .................................................................... 132
säubern ................................................................. 214
summieren ........................................................... 191
überwachen ........................................................ 645
verbinden ............................................................ 266
Index
908
Bereich (Forts.)
verschieben ......................................................... 253
zusammenfassen ............................................... 116
Bereichsgrenzen abstecken ............................... 271
Bereichsnamen ermitteln ................................... 93
Bereichsprüfung ausführen ............................. 148
Beschriftung
anzeigen .............................................................. 490
hinzufügen .......................................................... 514
Beträge umrechnen ............................................. 193
Bezüge
auslesen ................................................................ 138
umsetzen ............................................................. 199
Bezugsadressen anpassen ................................. 143
Bibliothek
deaktivieren ....................................................... 687
einbinden ............................................................ 688
Bilder
anzeigen ............................................................... 776
einfügen ............................................................... 412
umbenennen ..................................................... 890
Bildlaufleiste programmieren ........................ 801
Bildschirmaktualisierung
ausschalten .................................................. 93, 485
einschalten ................................................... 93, 485
Bildschirmauflösung ermitteln ...................... 593
Bildschirmmeldung anzeigen ........................ 705
Blattschutz
aufheben ............................................................. 350
entfernen ............................................................... 82
Block auskommentieren ...................................... 46
Body ........................................................................... 849
Bold ................................ 109, 153, 497, 513, 655, 880
Boolean ....................................................................... 57
BottomMargin ....................................................... 385
Buchstaben entfernen ................................ 217, 557
BuiltIn ........................................................................ 472
BuiltinDocumentProperties .................. 385, 444,
624, 752
BusinessAddressCity ........................................... 852
BusinessAddressCountry .................................. 853
BusinessAddressPostalCode ............................. 852
BusinessAddressState ......................................... 853
BusinessAddressStreet ....................................... 852
Byte ............................................................................... 57
C
Caller .......................................................................... 783
Caption .......................................... 746, 754, 804, 812
CDate ............................................. 260, 334, 439, 764
CDbl ............................................................................ 334
CD-ROM-Laufwerk bedienen ........................... 592
Ceiling ....................................................................... 196
CellDragAndDrop ................................................ 890
CellFormat ................................................................ 175
Cells ............. 101, 109, 120, 127, 240, 277, 291, 394,
769, 878
ChangeLink ............................................................. 457
Characters ........................................................ 155, 242
ChartObject ................................................... 492, 502
Charts ........................................................................ 491
ChartTitle ........................................................ 481, 498
ChartType .................................... 478, 479, 482, 489
ChDir ........................................ 53, 366, 417, 420, 832
ChDrive ...................................................... 53, 366, 417
CheckBox_Click ..................................................... 747
CheckSpelling ......................................................... 373
Chr .............................................................. 157, 316, 673
Clean ........................................................................... 215
Clear ....................................... 709, 757, 769, 795, 797
ClearComments .................................................... 238
ClearContents ....................................... 295, 313, 659
ClearFormats ................................................. 164, 170
ClearOutline ............................................................ 353
CLng .................................................................. 562, 885
Close ............................ 349, 424, 434, 437, 842, 904
Color ............................................................................ 153
ColorIndex .......... 88, 153, 154, 202, 276, 409, 463,
513, 640, 880
Column ............................................................ 273, 649
ColumnCount ......................................................... 761
ColumnHead ........................................................... 761
ColumnLevels ........................................................ 354
Columns ............................. 120, 264, 302, 324, 640
ColumnWidth ................................................ 276, 277
ColumnWidths ....................................................... 761
ComboBox_Change .................. 764, 767, 792, 793
CommandButton .................................................. 781
CommandButton_MouseMove ..................... 783
Comment ..................................... 234, 240, 469, 543
Computernamen ermitteln ............................ 604
Connection .............................................................. 841
Controls .................................................................... 746
ConvertFormula .......................................... 200, 813
Copy ........... 98, 106, 251, 348, 349, 370, 392, 400,
404, 407, 724, 846, 902
CopyPicture ............................................................. 412
Count ........ 81, 91, 105, 120, 125, 127, 137, 247, 266,
267, 271, 293, 305, 336, 358, 367, 369,
404, 440, 504, 761, 766, 832
CountA ............... 125, 268, 290, 300, 468, 535, 536
Index
909
CountIf ..................................................................... 659
CountOfLines ......................................................... 697
CreateItem ............................................................... 852
CreateObject .......................................... 835, 848, 852
Currency ..................................................................... 57
CurrentPage ............................................................ 527
CurrentRegion .................. 130, 146, 269, 309, 336,
387, 482
Cursorposition abfragen ................................... 605
CustomListCount .................................................. 471
CutCopyMode .................... 105, 253, 392, 394, 485
D
Databodyrange ...................................................... 221
DataLabel ................................................................. 490
DataLabels ............................................................... 497
Date ......... 42, 57, 100, 163, 234, 260, 361, 448, 619
Dateien
suchen .................................................................. 608
zählen .................................................................... 563
Dateiexistenz prüfen .......................................... 564
Dateiinformationen abfragen ......................... 891
Dateinamen extrahieren ................................... 218
Daten
ausdünnen ......................................................... 308
bereinigen ........................................................... 203
sortieren ..................................................... 307, 624
suchen ................................................................... 259
übertragen ........................................................... 317
Datenbalken einfügen ......................................... 172
Datenbereich markieren ..................................... 115
Datenbeschriftungen hinzufügen ................ 494
Datenbezüge herstellen ..................................... 144
Datentyp prüfen .................................................... 279
DateSerial ........................................................ 576, 579
Datum
abfragen ................................................................. 42
prüfen ...................................................................... 68
umwandeln ........................................................ 260
Datumsformat festlegen .................................... 163
Datumsgrenzen festlegen ................................. 229
Datumstest durchführen .................................. 100
Datumswerte filtern ............................................ 333
Datumszeilen löschen ....................................... 286
Datumszelle finden .............................................. 622
Debug.Print ........................ 258, 335, 492, 772, 808
Delete .............. 83, 98, 100, 103, 149, 172, 217, 229,
239, 279, 284, 286, 290, 291, 292, 294, 301,
363, 367, 450, 469, 474, 484, 490, 492,
516, 584, 695, 815, 877, 906
DeleteLines ............................................................. 694
Diagramm
einfügen .............................................................. 489
erstellen ................................................................ 478
exportieren ........................................................ 508
formatieren ....................................................... 509
identifizieren ...................................................... 492
löschen ................................................................ 490
positionieren ...................................................... 501
skalieren ..................................................... 501, 505
umbenennen ...................................................... 492
Diagrammtyp festlegen ..................................... 479
Diagrammüberschrift festlegen ..................... 481
Dialogs ...................................................................... 389
Dir ...................................................................... 564, 833
Direktbereich schreiben .................................... 258
Direktfenster anzeigen .......................................... 53
Direktsuche ausführen ....................................... 323
Display ..................................................................... 850
DisplayAlerts .............. 83, 364, 434, 435, 491, 670,
725, 886
DisplayGridlines ................................................... 786
DisplayOutline ....................................................... 354
DisplayRecentFiles ............................................... 428
DisplayStatusBar ........................................... 337, 435
DisplayWorkbookTabs ...................................... 408
Do Loop .................................................................... 260
Do Until Loop ................................ 95, 100, 104, 432
Do While ................................................................... 245
Do While Loop ....................................... 107, 110, 622
Dokumenteigenschaft
abfragen ..................................................... 385, 443
anlegen ................................................................. 449
auslesen ................................................................ 571
löschen ................................................................ 450
Doppelte Werte entfernen ................................ 344
Double .......................................................................... 57
Drag & Drop einschalten .................................. 889
Drehfeld programmieren .................................. 798
Dropdown-Feld ...................................................... 762
erstellen ................................................................ 795
füllen ...................................................................... 791
leeren .................................................................... 795
programmieren ................................................. 791
sortieren ............................................................... 793
Druckbereich festlegen ..................... 251, 387, 879
Druckseiten zählen ............................................. 390
Druckstatistik führen ........................................... 631
Dubletten verhindern ......................................... 658
Index
910
Duplikate
ermitteln ..................................................... 342, 881
löschen .................................................................. 292
E
Eigenschaft, Definition .......................................... 51
Eigenschaften anzeigen ....................................... 43
Eingabe verhindern ............................................ 664
Einzüge
vergrößern ............................................................ 44
verkleinern ............................................................ 44
Einzugsebene abfragen ...................................... 297
E-Mail versenden .................................................. 847
Email1Address ....................................................... 853
EnableAutoFilter .................................................. 350
EnableEvents ................................................. 629, 662
End .............. 267, 270, 272, 274, 275, 404, 407, 832
EntireColumn ......................................................... 276
EntireRow .................... 103, 274, 275, 276, 286, 877
Entwicklungsumgebung ...................................... 39
neue Module einfügen ..................................... 41
Scroll Area festlegen ......................................... 40
Suchen und Ersetzen ......................................... 50
Symbolleiste »Bearbeiten« ............................. 42
Tabellenblätter ein- und ausblenden ........ 40
Environ ............................................................ 363, 434
Ereignis, Definition ................................................ 52
Ereignissteuerung ausschalten ...................... 629
Ergebniszeile hinzufügen .................................. 224
Erl ................................................................................ 863
Err ................................................................................ 567
Erstelldatum anpassen ...................................... 448
Excel 4.0-Makro ausführen ............................... 391
Excel beenden ............................................. 436, 680
Excel-Version ermitteln ....................................... 77
ExecuteExcel4Macro ........................................... 391
Exit Do ...................................................................... 464
Exit For ..................................................... 321, 322, 341
Exit Function ................................................. 556, 566
Exit Sub ............. 139, 140, 144, 249, 364, 398, 629,
714, 744
Export ....................................................................... 898
Extremwert
berechnen ............................................................ 554
ermitteln ............................................................... 90
F
Farbverlauf einfügen ............................................ 171
Fensterstatus ermitteln ........................................ 75
FileDateTime ........................................................... 431
FileDialog ........................................................ 720, 726
FileName .................................................................. 382
Files ................................................................... 462, 700
FileSystemObject ........................ 451, 461, 572, 849
Filter .......................................................................... 508
Filterkriterien abfragen ....................................... 341
Filters ................................................................ 335, 720
Find .................................. 122, 324, 463, 741, 775, 844
FindNext ......................................................... 463, 464
FindWindow ........................................................... 594
FirstName ................................................................ 852
Floor ........................................................................... 196
Font ..................................................................... 153, 157
FontStyle ................................................................... 153
FooterMargin ......................................................... 385
For Each ......... 63, 154, 155, 194, 212, 231, 239, 240,
242, 245, 246, 279, 738
For Each Next ...... 83, 141, 295, 366, 376, 377, 378,
397, 409, 437, 465, 472, 474, 487, 497,
500, 503, 510, 521, 524, 681, 788, 807,
884, 896, 897, 898, 902, 904
For Next ........ 78, 81, 160, 165, 200, 285, 290, 291,
297, 309, 316, 321, 335, 341, 349, 367,
369, 397, 404, 405, 406, 455, 468, 504,
506, 508, 673, 703, 715, 720, 776, 878, 906
Format ........................................................ 91, 361, 425
prüfen ..................................................................... 74
übertragen ........................................................... 163
FormatConditions ................................................. 167
Formatierung entfernen ................................... 164
FormatNumberLocal ............................................ 165
Formatvorlagen löschen ................................... 472
Formeln
abfragen ............................................................. 200
entfernen .............................................................. 217
ersetzen ................................................................ 546
finden .................................................................... 196
formatieren ......................................................... 159
schützen .............................................................. 902
tauschen .............................................................. 210
verbergen ........................................................... 903
verstecken .......................................................... 902
Formelzellen suchen ............................................. 86
Formula ................................................... 180, 191, 457
FormulaLocal ................................................... 179, 717
FullName .......................... 62, 94, 385, 421, 533, 889
Funktion
einfügen ............................................................... 192
erfassen ................................................................. 179
verlassen .............................................................. 556
Index
911
Fußzeile
einrichten ............................................................ 378
erstellen .................................................................. 93
G
Geschwindigkeit umrechnen .......................... 553
GetDriveType .......................................................... 591
GetExitCodeProcess ............................................ 594
GetFolder ....................................................... 467, 700
GetObject .................................................................. 835
GetOpenFileName ....................................... 413, 434
GetOpenFilename ........................................ 429, 719
Gliederung
einfügen .............................................................. 350
entfernen ............................................................. 353
Gliederungssymbole bedienen ....................... 354
GoTo .................................................................. 139, 140
Grafik
einfügen ............................................................... 253
löschen ................................................................. 468
positionieren ...................................................... 254
prüfen ................................................................... 560
Grafikelement löschen ....................................... 582
Grenzwerte ermitteln ......................................... 156
Großbuchstaben, umwandeln in ..................... 76
Group ......................................................................... 352
Gruppierung
anzeigen ............................................................... 353
einfügen ............................................................... 352
Gültigkeit prüfen ................................................... 542
Gültigkeitsfunktion auslesen .......................... 226
Gültigkeitskriterien
einstellen .............................................................. 227
löschen .................................................................. 233
Gültigkeitstypen ermitteln ............................... 232
H
Haltepunkt setzen .................................................. 45
HasDataLabels ....................................................... 497
HasFormula ....................... 200, 203, 542, 656, 813
HasLegend ....................................................... 485, 513
HasTitle ............................................................ 481, 497
Height .............................................. 414, 501, 781, 795
Hidden ................................... 97, 297, 300, 301, 804
Hide ............................................................................ 737
Hintergrundbild einfügen ................................ 415
Hintergrundfarben auslesen ............................. 551
HorizontalAlignment .................................. 157, 314
HPageBreaks ........................................................... 879
Hyperlink einfügen .............................................. 412
I
IconSets ..................................................................... 173
IF ................................................................................... 555
If .......................................................... 65, 128, 266, 397
IgnoreBlank ............................................................. 229
IIf .................................................................................... 71
Import ...................................................................... 700
IndentLevel ............................................................. 297
Index .......................................................................... 534
Initialen bilden ...................................................... 545
InputBox ................................ 193, 252, 324, 392, 712
Insert ......................... 97, 98, 279, 280, 413, 414, 787
InsertAfter ............................................................... 836
InsertLines ............................................................... 703
Installed .......................................................... 569, 570
InStr ....... 111, 142, 202, 239, 245, 246, 284, 311, 457
Instr ................................................. 206, 218, 219, 462
InStrRev ..................................................................... 218
Int ................................................................................ 776
Integer .......................................................................... 57
Interior .......................................... 197, 202, 656, 884
Intersect ..... 133, 148, 336, 638, 641, 646, 648, 667
IsArray ......................................................................... 69
IsDate .................................................. 68, 69, 286, 745
IsEmpty .............................................. 68, 69, 270, 457
IsError ................................................................. 69, 859
IsNull ............................................................................ 69
IsNumeric ....... 67, 69, 84, 279, 405, 547, 657, 744
IsObject ....................................................................... 69
Italic ................................................................... 153, 880
Item ............................................................................. 142
K
Kalenderwoche ermitteln ................................ 580
Kill ............................................................................... 439
Kleinbuchstaben, umwandeln in ...................... 77
Kommentar
einfügen ................................................ 45, 234, 241
entfernen ............................................................. 238
erfassen .................................................................. 45
finden .................................................................... 237
formatieren ........................................................ 242
löschen ................................................................ 469
protokollieren .................................................... 239
prüfen ................................................................... 543
Kommentarfenster anpassen .................. 235, 243
Index
912
Konstanten
anzeigen ................................................................. 43
deklarieren ............................................................ 63
Kontakt anlegen .................................................... 853
Kontextmenü
deaktivieren ....................................................... 810
zurücksetzen ...................................................... 815
Kontrollkästchen
abfragen ............................................................... 747
initialisieren ...................................................... 805
programmieren ................................................ 803
synchronisieren ................................................ 804
Kopfzeile erstellen .................................................. 94
Kopie entfernen ...................................................... 99
Kopiermodus ausschalten ................................ 105
Kopierränder ausschalten ................................. 392
Kurzform, Variablendeklaration ...................... 58
L
Länge ermitteln .................................................... 209
Large .......................................................................... 190
LastName .................................................................. 852
Laufwerk wechseln .............................................. 366
Laufwerke ermitteln ........................................... 590
Laufzeit verkürzen ............................................... 863
LBound ...................................................................... 162
LCase ............................................................................. 77
Leerstellen entfernen .......................................... 245
Leerzeilen löschen ............................................... 289
Left ...... 100, 111, 208, 209, 217, 219, 255, 258, 279,
311, 321, 406, 501, 781, 784, 787, 795
LeftFooter ................................................................. 385
Legende formatieren ............................................ 513
Len .......... 111, 113, 125, 209, 212, 219, 406, 543, 556,
565, 738, 745, 749
Lesezeichen setzen ................................................. 46
Like .................................................................... 559, 884
LinkedCell ................................................................. 793
LinkSources .................................................... 453, 457
ListBox_Click ................................................. 761, 797
ListColumns ............................................................ 221
ListCount ......................................................... 759, 794
Liste
hinzufügen .......................................................... 471
sortieren ............................................................... 102
Listenfeld
bereinigen ............................................................ 797
füllen ..................................................................... 796
leeren ..................................................................... 757
programmieren ................................................ 796
ListFillRange ........................................................... 793
ListIndex ................................................................... 757
Listobject ................................................................... 221
ListRows .................................................................... 222
LoadPicture ..................................................... 777, 781
Location .......................................................... 502, 504
Locked ..................................................... 258, 761, 903
Long ............................................................................... 57
Löschrückfrage einholen .................................. 708
M
MacroType ............................................................... 695
MajorUnit ................................................................ 507
Makro
abarbeiten ............................................................. 54
beenden ................................................................. 139
importieren ....................................................... 696
löschen ....................................................... 693, 694
starten ......................................................... 619, 783
verlassen .............................................................. 144
zurücksetzen ........................................................ 54
Makrorekorder .......................................................... 32
Makrosicherheit ...................................................... 39
MarkerBackgroundColorIndex ....................... 487
MarkerForegroundColorIndex ....................... 487
Markierung
abfragen .............................................................. 266
auslesen ........................................................ 124, 125
entfernen ............................................................. 253
löschen ................................................................ 290
überwachen ........................................................ 665
MatchRequired ...................................................... 766
Max .................................. 90, 191, 554, 774, 777, 800
Maximum ................................................................ 428
MaximumScale ..................................................... 507
Mehrfachauswahl vornehmen ........................ 116
Mehrfachsprünge durchführen ...................... 272
Meldung ausgeben ......................................... 44, 139
MergeArea ....................................................... 126, 127
MergeCells .................... 128, 129, 130, 315, 544, 883
Methode
anzeigen ................................................................ 43
Definition ............................................................... 51
Mid ............................ 100, 111, 218, 219, 311, 557, 558
Min ............................................. 90, 191, 555, 774, 777
Minimalwert ermitteln ....................................... 185
MinimumScale ...................................................... 507
Mittelwert berechnen ................................. 191, 192
MkDir ........................................................................ 420
Mod .................................................................. 303, 305
Index
913
Modul
einfügen .............................................................. 692
löschen ................................................................. 693
Month ....................................................................... 764
MouseMove ............................................................. 784
Move ........................................................ 393, 397, 896
MsgBox ....................................................................... 44
Msgbox .................................................... 105, 139, 301
Multiseiten erstellen .......................................... 770
MZ-Tools .................................................................. 860
N
Name ....... 93, 94, 153, 221, 255, 359, 361, 370, 448,
473, 474, 479, 490, 508
abarbeiten ............................................................ 141
ändern ................................................................... 142
anpassen .............................................................. 142
ausblenden .......................................................... 149
drehen ................................................................... 219
einblenden ........................................................... 149
entfernen ............................................................. 149
löschen ......................................................... 149, 474
protokollieren ..................................................... 141
überprüfen ......................................................... 140
Namensanzeige unterdrücken ........................ 148
Namenskonventionen einhalten ................... 134
Namensprüfung durchführen ......................... 139
Names ................................................................ 142, 475
Netzlaufwerk verbinden ................................... 598
Next ........................................................................... 368
Noten vergeben ..................................................... 539
Nothing ..................................................................... 661
Notizen auslesen ................................................... 237
Now ............................................................ 60, 361, 434
Nullen
auffüllen ................................................................. 88
entfernen ............................................................. 212
ergänzen ............................................................... 211
Number ..................................................................... 567
NumberFormatLocal ........................................... 553
O
Obergrenzen festlegen ....................................... 195
Object ................................................................... 58, 231
Objekt, Definition .................................................... 51
Objektkatalog ............................................................ 51
aufrufen ................................................................. 52
Öffnen-Dialog anzeigen ..................................... 413
OffSet ........................................................ 147, 253, 658
Offset .......................... 71, 97, 100, 105, 131, 142, 267
OLEObjects ............................................................. 807
On Error ........................ 232, 335, 361, 364, 368, 857
On Error Resume Next ............................... 118, 146
OnAction ............................................... 700, 780, 812
OnKey .............................................................. 670, 673
OnTime ........................................................... 678, 684
Open ...................................... 349, 425, 720, 829, 842
OpenProcess .................................................. 594, 596
OpenText ............................................... 830, 831, 832
Option Explicit ....................................................... 856
Optionsfeld ............................................................ 802
Or .................................................................. 66, 291, 321
Orientation ............................................................... 315
Osterdatum berechnen ....................................... 577
OutLineFont ............................................................. 153
P
PageFields ................................................................. 527
PageSetup ..................................... 250, 319, 378, 385
Parameterinfo anzeigen ...................................... 44
Parent ....................................................................... 240
PasswordChar ................................................ 747, 748
Paste ................................................ 105, 106, 412, 484
PasteSpecial ........................ 163, 251, 394, 832, 902
Path ................................................................... 421, 889
Pattern ....................................................................... 276
Pause generieren .................................................. 410
Pfad ermitteln ......................................................... 421
Picture ........................................................................ 781
PivotSelect ............................................................... 524
Pivot-Tabelle
aktualisieren ...................................................... 520
erweitern ............................................................. 522
formatieren ......................................................... 525
Pivot-Tabellenbericht erstellen ....................... 517
Points ......................................................................... 497
Position ermitteln ................................................. 112
Print .................................................................. 349, 424
PrintArea ......................................................... 250, 387
PrintOut .................................................. 388, 441, 442
PrintPreview ........................................................... 379
PrintTitleColumns ................................................ 319
PrintTitleRows ........................................................ 319
ProcCountLines ........................................... 694, 703
ProcStartLine ................................................ 694, 703
Protect ...................... 61, 82, 350, 371, 651, 897, 903
ProtectContents .................................................... 536
Public ........................................................................... 59
Index
914
Q
Quit ......................................................... 436, 680, 681
R
Rahmen übertragen .............................................. 161
Rahmenart festlegen .......................................... 160
Rahmenfarbe bestimmen ................................ 160
Range ................................................... 62, 118, 154, 263
Rangfolge ausgeben ............................................ 540
Rechnungsfälligkeit berechnen ...................... 185
ReDim ................................................... 360, 369, 406
Redundanzen ermitteln ..................................... 343
RefersToRange ...................................................... 568
RefreshTable .......................................................... 520
Registerlaschen
ausblenden ......................................................... 408
einblenden .......................................................... 408
einfärben ............................................................. 409
entfärben ............................................................ 409
Remove ........................................................... 688, 693
RemoveItem ............................................................ 757
Rept ............................................................................. 385
Reset ........................................................................... 815
Resize ......................................................................... 120
RGB ..................................................................... 752, 781
Right .................................................. 99, 113, 209, 475
RightFooter .............................................................. 385
RightHeader ............................................................ 382
RightHeaderPicture ............................................. 382
Rnd ............................................................ 186, 754, 784
Rotation .................................................................. 800
Round ............................................. 187, 196, 550, 655
RoundDown ............................................................ 196
RoundUp .................................................................. 196
Row ..................................................................... 271, 273
RowHeight ...................................................... 276, 277
RowLevels ................................................................. 354
Rows ........... 120, 125, 263, 267, 280, 293, 297, 309
RowSource ...................................................... 761, 766
S
Save ............................................................................. 853
SaveAs ............................................ 418, 425, 724, 904
Saved .......................................................................... 422
Schaltflächen einsetzen ..................................... 780
SchemeColor ........................................................... 254
Schleife verlassen ................................. 321, 341, 464
Schleifen einsetzen ................................................ 78
Schreibschutz abfragen ....................................... 535
Schriftart
anpassen .............................................................. 152
ermitteln ............................................................... 152
Schriftfarbe
anpassen .............................................................. 154
ermitteln ................................................................ 66
Schriftschnitt abfragen ........................................ 66
Schrittweite festlegen ......................................... 291
ScreenUpdating ................................... 105, 485, 629
ScrollArea ................................................................. 677
ScrollBar_Change ................................................. 801
ScrollColumn .......................................................... 629
ScrollRow ................................................................. 629
Seitenansicht anzeigen ...................................... 379
Seitenfeld initialisieren ....................................... 527
Seitenrand einstellen .......................................... 385
Seitenwechsel festlegen ..................................... 878
Select ................................................ 101, 132, 274, 360
Select Case ................. 71, 75, 332, 556, 558, 572, 777
SelectAll .......................................................... 469, 505
Selected ...................................................................... 757
SelectedItems ......................................................... 726
SelectedSheets ....................................................... 370
Selection ........................................... 63, 124, 160, 170
SelLength ........................................................ 738, 749
SelStart ............................................................. 738, 749
SendMail ................................................................. 846
Series ................................................................. 497, 510
SeriesCollection ..................................................... 484
Set ................................... 126, 128, 266, 295, 393, 770
SetBackgroundPicture ......................................... 415
SetFocus ........................................................... 738, 739
SetSourceData ............................................... 480, 517
Shadow ....................................................................... 153
Shape ........................................................................ 468
ShapeRange ............................................................. 414
Shape-Typen bestimmen ................................... 255
Sheets ........................................................ 46, 378, 410
SheetsInNewWorkbook ..................................... 439
Show ................................................ 720, 724, 726, 746
ShowError ................................................................ 229
ShowInput ............................................................... 229
ShowLevels .............................................................. 354
ShrinkToFit .............................................................. 883
Sicherheitsrückfrage ausschalten .................. 364
Single ........................................................................... 58
Size ............................................................................... 153
Slicer einfügen ....................................................... 529
Small .......................................................................... 188
Sonderzeichen einfügen ..................................... 156
Index
915
Sort .................................................................... 102, 307
Sound ausgeben ................................................... 607
SourceData ............................................................... 519
Spalte
ausblenden ......................................................... 302
bereinigen ........................................................... 294
einfügen ............................................................... 293
ergänzen .............................................................. 221
löschen ................................................................. 294
markieren ............................................................ 265
vergleichen ............................................... 309, 639
zählen ................................................................... 268
Spaltenbreite
anpassen .............................................................. 276
einstellen .............................................................. 761
Spaltenüberschrift anzeigen ............................ 761
SparklineGroups ..................................................... 175
Sparklines ................................................................. 174
SpecialCells ............. 87, 121, 197, 211, 233, 237, 247,
336, 348, 367, 581
SpinButton1_Change .......................................... 773
Standardfarben ausgeben ................................. 198
Standardverzeichnis ändern ........................... 603
Static ......................................................................... 660
StatusBar .......................................................... 339, 435
Statusleiste ansprechen ............................ 337, 435
Steuerelemente identifizieren ....................... 806
Strikethrough .......................................................... 153
String ............................................................................ 58
Subject ...................................................................... 849
Subscript ................................................................... 154
Substitute ............................. 142, 205, 206, 211, 425
SubTotal ........................................................... 337, 339
Sum .............................................................................. 191
SumIf ........................................................................... 181
Superscript ............................................................... 154
Symbole verwenden ............................................. 173
Syntaxprüfung vornehmen ........................ 46, 47
T
Tab .............................................................................. 409
Tabelle
abfragen ............................................................... 533
benennen ............................................................. 359
einblenden ........................................................... 618
einfügen ............................................................... 412
einrichten ........................................................... 220
entfernen ............................................................. 225
filtern ..................................................................... 223
löschen .................................................................... 83
Tabelle (Forts.)
markieren ........................................................... 360
schützen .................................................................. 61
sichern .................................................................. 398
sortieren ............................................................... 224
suchen .................................................................. 397
verknüpfen ........................................................... 411
verschieben ......................................................... 393
zählen .................................................................. 440
Tabellenansicht anpassen .................................. 415
Tabellenblatt
aktivieren ................................................... 367, 614
anlegen .................................................................. 431
ausblenden .......................................................... 375
benennen ............................................................... 80
drucken ................................................................ 388
durchsuchen ......................................................... 85
einblenden ........................................................... 375
einfügen ......................................................... 79, 357
exportieren ......................................................... 394
gruppieren .......................................................... 368
konsolidieren .................................................... 403
kopieren ...................................................... 370, 391
löschen ................................................................. 363
schützen ........................................................ 81, 370
sortieren ............................................................... 396
summieren ......................................................... 404
überwachen ........................................................ 510
verlinken ............................................................... 411
zählen .................................................... 81, 358, 367
Tabellennamen vergeben .................................. 361
Tabellenschutz aufheben ............................. 61, 371
TableRange1 ............................................................ 525
Tagesdatum
abrufen .................................................................. 60
ermitteln ..................................................... 163, 363
Tasten abfangen ................................................... 609
Tastenkombination ............................................... 49
einschalten ......................................................... 672
Testumgebung kennenlernen ........................... 53
Text ................................ 279, 481, 514, 543, 700, 756
aufsplitten ........................................................... 109
einfügen ............................................................... 675
finden .................................................................... 201
konvertieren ...................................................... 605
übertragen ......................................................... 400
umbrechen .................................................. 259, 315
TextAlign .................................................................. 776
TextBox_Change .................................................. 799
Textbox_Exit .......................................................... 744
Textbox1_Enter .................................................... 743
Index
916
Textboxen programmieren .............................. 788
TextColumn ............................................................ 762
Textdatei
öffnen .......................................................... 349, 830
schließen ............................................................. 349
speichern .............................................................. 827
Textfeld
prüfen .................................................................... 743
sperren .................................................................. 761
TextFrame ....................................................... 242, 514
ThisWorkbook ........................................................ 421
Time ............................................................................ 234
Timer ......................................................................... 436
TimeValue ............................................. 410, 435, 679
Title ................................................................... 720, 726
To ................................................................................... 81
Top .................................. 255, 501, 781, 784, 787, 795
Transpose ....................................................... 345, 500
Trim ............................................................................ 245
Type ................................................................... 255, 542
TypeName ...................................................... 503, 629
TypeOf ....................................................................... 772
TypeParagraph ...................................................... 836
TypeText .................................................................. 836
TypName ................................................................. 808
U
UBound .................................................. 162, 457, 500
UCase ................................................................. 76, 560
Uhrzeit abrufen ...................................................... 60
Umlaute ersetzen .................................................... 87
Umsätze kommentieren ..................................... 118
Umschaltflächen programmieren ................. 784
Underline ............................................... 109, 154, 401
Unikate ermitteln ................................................. 345
Union ....................................................... 116, 266, 646
Unprotect .......................... 61, 82, 350, 371, 651, 897
Update ...................................................................... 844
UsedRange ............ 86, 128, 130, 137, 154, 258, 267,
271, 290, 349, 392, 407, 465,
506, 535, 761
UserForm
beenden ................................................................ 737
starten .................................................................. 636
UserForm_Click ...................................................... 751
UserForm_Initialize ................. 746, 747, 760, 769
Userform_Initialize ............................................. 764
UserForm_Resize ................................................. 750
UserName ................................................................ 234
V
Val ................................................................................. 78
Validation ................................................................ 542
Value ............................ 457, 737, 746, 772, 804, 808
Variablen
deklarieren ............................................................ 56
einsetzen ................................................................. 55
Konstanten ........................................................... 63
Objektvariablen ................................................... 61
öffentliche ............................................................. 59
private ................................................................... 60
statische ................................................................. 59
Typen ....................................................................... 57
Variablendeklaration
erzwingen ............................................................... 57
vornehmen ........................................................... 56
Variablenregeln ....................................................... 56
Variant ........................................................................ 58
VBA-Projekte schützen ...................................... 869
VBA-Quellcode schützen .................................. 869
vbCrLf ........................................................................ 570
VBE-Editor aufrufen ............................................ 691
vbLf ........................................................... 148, 189, 270
vbTab ......................................................................... 570
Verknüpfungen
aktualisieren ...................................................... 458
aufspüren ............................................................ 196
entfernen ............................................................. 456
umwandeln ........................................................ 452
Version ......................................................................... 77
VerticalAlignment ........................................ 315, 676
Verzeichnis
erstellen ...................................................... 420, 597
löschen ................................................................. 597
wechseln ..................................................... 366, 832
Verzeichnisbaum anzeigen .............................. 599
Verzweigungen einsetzen ................................... 65
Visible .................. 149, 236, 375, 376, 378, 691, 748,
787, 835, 902
Volatile ............................................................ 540, 550
Vorsetzungszeichen einsetzen ......................... 47
W
Wait .................................................. 410, 435, 683, 712
Warennummer bilden ........................................ 207
Warnmeldungen
ausschalten .......................................................... 83
deaktivieren ....................................................... 885
Weekday ................................ 88, 230, 231, 288, 306
Index
917
Werte
addieren ...................................................... 107, 176
dividieren ............................................................. 178
löschen .................................................................. 213
multiplizieren ..................................................... 177
potenzieren ......................................................... 178
runden ......................................................... 187, 196
subtrahieren ....................................................... 176
suchen ................................................................... 261
verdoppeln ............................................................ 84
zählen ................................................................... 246
While ......................................................................... 246
Width ........................................................ 501, 781, 795
Wiederholungsspalten definieren ................. 319
Wiederholungszeilen definieren .................... 319
Wiedervorlage-Liste auslesen ......................... 428
Windows-Verzeichnis ermitteln .................... 602
With .................................................................. 109, 379
Wochenende
abfragen .............................................................. 288
entfernen ............................................................. 287
ermitteln ........................................................ 87, 575
kennzeichnen .................................................... 305
Wochentag
abfragen .............................................................. 306
ermitteln ............................................................. 230
Workbook ................................................................... 61
Workbook_Activate ............................................. 632
Workbook_AddinInstall ..................................... 632
Workbook_AddinUninstall .............................. 632
Workbook_AfterSave .......................................... 632
Workbook_BeforePrint ............................ 630, 632
Workbook_BeforeSave .................... 624, 626, 632
Workbook_Deactivate ........................................ 632
Workbook_NewChart .......................................... 632
Workbook_NewSheet .......................................... 633
Workbook_Open ....... 298, 313, 327, 522, 612, 615,
619, 625, 677, 691
Workbook_PivotTableCloseConnection ..... 633
Workbook_PivotTableOpenConnection ..... 633
Workbook_SheetActivate ........................ 628, 633
Workbook_SheetBeforeDoubleClick ............ 633
Workbook_SheetBeforeRightClick ................ 633
Workbook_SheetCalculate ................................ 633
Workbook_SheetChange ................................... 633
Workbook_SheetDeactivate ................... 628, 633
Workbook_SheetFollowHyperlink ................ 633
Workbook_SheetSelectionChange ................ 633
Workbook_WindowActivate ............................ 633
Workbook_WindowDeactivate ....................... 633
Workbook_WindowResize ................................ 633
Workbooks ...................................................... 431, 437
Worksheet ........ 62, 86, 94, 107, 131, 366, 378, 407
Worksheet_Activate .................................. 634, 670
Worksheet_BeforeDoubleClick ............. 634, 670
Worksheet_BeforeRightClick ....... 634, 667, 670
Worksheet_Calculate ......................................... 670
Worksheet_Change ......... 322, 323, 510, 634, 639,
642, 647, 654, 655, 664,
670, 800
Worksheet_Deactivate ............................. 670, 674
Worksheet_FollowHyperlink ................ 669, 670
Worksheet_PivotTableUpdate .............. 668, 670
Worksheet_SelectionChange ...... 660, 664, 670
WorksheetFunction ............................................. 337
Wörter zählen ......................................................... 244
WrapText ................................ 259, 315, 675, 813, 883
X
xlColorIndexNone ................................................. 88
Y
Year ............................................................................. 764
Z
Zahl
formatieren ........................................................... 91
runden ......................................................... 196, 550
suchen .................................................................. 261
summieren .......................................................... 184
umwandeln ........................................................ 559
wandeln ................................................................. 74
Zahlenformat
festlegen .............................................................. 162
übertragen .......................................................... 164
Zeichen
eliminieren .......................................................... 544
entfernen ............................................................. 901
vergleichen ......................................................... 558
Zeichenfolge
ermitteln ............................................................... 555
ersetzen ................................................................. 143
suchen .................................................................. 245
Zeichenlänge
ermitteln ............................................................... 125
messen .................................................................... 111
Zeile
ausblenden ................................................. 96, 296
einblenden ................................................... 92, 296
Index
918
Zeile (Forts.)
einfärben .............................................................. 275
einfügen ..................................... 97, 222, 279, 280
filtern ..................................................................... 325
löschen .............................. 97, 279, 282, 288, 300
markieren ................................................... 264, 274
übertragen .......................................................... 103
umbrechen .......................................................... 259
zählen .................................................. 120, 268, 335
Zeilenhöhe anpassen ........................................... 276
Zeilenumbrüche
festlegen ................................................................ 313
zurücksetzen ..................................................... 674
Zeiten umrechnen ................................................ 548
Zeitverzögerung programmieren .................. 435
Zellcursor auslesen ............................................... 147
Zelle
ansprechen ............................................................ 62
ansteuern ..................................................... 121, 267
einblenden ......................................................... 300
färben ............................................................. 88, 197
füllen ..................................................................... 249
hervorheben ....................................................... 128
Zelle (Forts.)
löschen .................................................................. 215
markieren ..................................................... 115, 130
sperren ................................................................... 257
suchen ................................................................... 122
verbinden ............................................................ 126
verschieben ......................................................... 267
verweisen .............................................................. 132
zählen .................................................... 91, 125, 268
Zellenadresse abfragen ......................................... 63
Zellenformatierungen entfernen .................. 164
Zelleninhalt
ersetzen ................................................................ 205
löschen ......................................................... 154, 295
Zellenverbände aufheben ................................. 129
Zellenverbund
aufheben ............................................................... 128
erstellen ................................................................ 129
Zellenverknüpfungen aufspüren ................... 883
Zoom .......................................................................... 416
Zufallszahl
bilden .................................................................... 754
erstellen ................................................................ 186
Zwischenablage löschen ................................... 607
Wir hoffen sehr, dass Ihnen diese Leseprobe gefallen hat. Gerne dürfen Sie diese Leseprobe empfehlen und weitergeben, allerdings nur vollständig mit allen Seiten. Die vorliegende Leseprobe ist in all ihren Teilen urheberrecht-lich geschützt. Alle Nutzungs- und Verwertungsrechte liegen beim Autor und beim Verlag.
Teilen Sie Ihre Leseerfahrung mit uns!
Bernd Held ist von Haus aus gelernter Informatiker. Zu seinen Spezialgebieten zählen Excel, VBA-Programmie-rung, Access und allgemeine Office- und Tool-Themen. Er wurde von Microsoft mehrfach als MVP (Most Valuable Professional) für den Bereich Excel ausgezeichnet. Seit 2008 arbeitet er mit einem eigenen Team aus Experten zusammen, das Projekte und Schulungen durchführt, Unter- nehmen berät und Bücher sowie Fachartikel veröffentlicht.
Bernd Held
VBA mit Excel – Das umfassende Handbuch918 Seiten, 2013, mit DVD, 49,90 € ISBN 978-3-8362-2579-3
www.galileocomputing.de/3426
Wissen, wie’s geht.