© Martin Korneffel,
Stuttgart 2013 +++ email: Martin.Korneffel@t-online.de
+++ web: www.mkoit.de
3 EXCEL – VBA
3.1 Objektmanipulationen in Macros aufzeichnen und
wiederholen
Ein Macro (engl. "Zusammenfassung von
Befehlen") ist eine Liste von Instruktionen, die Excel-
Objekte wie Zellen und Grafiken manipulieren. Macros dienen der
Rationalisierung durch Automation sich häufig wiederholender
Arbeitsschrittfolgen.
3.1.1.1 Marcos aktivieren
Um die Verbreitung von Schadsoftware (Viren,
Würmer, Trojaner) zu vermeiden, die sich auch trefflich mit VBA-
Programmieren lassen, ist die Ausführung von Macros im
Grundmodus deaktiviert. Detailtiere Informationen dazu hier.
3.1.1.2 Macros mit Macrorecorder aufzeichnen
Um Excel- VBA zu erforschen, kann der
Macrorecorder genutzt werden. Er erzeugt aus einer Reihe von
Benutzerinteraktionen reinrassigen VBA- Code.Der Macrorecorder ist
erreichbar unter Extras/Macros/Macrorecorder.
3.1.1.3 Beispiele
Objekt
|
Aufgabe
|
Macro
|
Zelle
|
Schriftfont formatieren
|
Sub ZelleFormatierenMakro()
' Tastenkombination: Strg+Umschalt+R
'
With Selection.Font
.Name = "Arial"
.FontStyle = "Fett"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
End Sub
|
|
Formatieren eines Zellenpaar als etikettiertes
Ergebnis, z.B.
Saldo 100,00 €
Erste Zelle mit fetter Schrift, Zelle links
davon mit Währungsformat, doppelter Unterstreichung
|
Sub ErgebnisFormatierenMakro()
' Tastenkombination: Strg+Umschalt+R
'
With Selection.Font
.Name = "Arial"
.FontStyle = "Fett"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleNone
.ColorIndex = xlAutomatic
End With
ActiveCell.Offset(0, 1).Range("A1").Select
Selection.NumberFormat = "#,##0.00 $"
With Selection.Font
.Name = "Arial"
.FontStyle = "Standard"
.Size = 10
.Strikethrough = False
.Superscript = False
.Subscript = False
.OutlineFont = False
.Shadow = False
.Underline = xlUnderlineStyleDouble
.ColorIndex = xlAutomatic
End With
End Sub
|
Diagramm
|
Tortendiagramm für eine Datenreihe
erstellen
|
Sub TorteMakro()
' Tastenkombination: Strg+a
'
Charts.Add
ActiveChart.ChartType = xlPie
ActiveChart.SetSourceData Source:=Sheets("Kopie (1) von FileTypeStatistic"). _
Range("A2:B33"), PlotBy:=xlColumns
ActiveChart.Location Where:=xlLocationAsObject, Name:= _
"PieFileTypeStatistic"
End Sub
|
3.1.1.4 Aufbau eines Makros
In Excel wird ein Makro durch eine Prozedur in VBA
realisiert. Eine Prozedur ist ein Block, der eine Liste von VBA-
Anweisungen enthält. Eine Prozedur hat einen Namen und kann über
diesen Namen zur Ausführung gebracht werden.
Sub Macrobname <- Hier startet der Prozedurblock
' Ein Kommentar <- Kommentare dienen dem Entwickler als Speichern von Hilfeinformationen für das Verständnis
<Eine Liste von VBA- Anweisungen> <- Durch die Anweisungen werden Excel- Objekte gesteuert
End Sub <- Hier endet der Prozedurblock
3.2 Objektmodell von Excel
3.2.1 Objektmodell der Excel- Anwendung
Application <=> Excel- Anwendung
|
+-> OrganizationName <=> Name der Firma, für das das Produkt lizensiert wurde
|
+-> UserName <=> Name des Benutzers, der Excel ausführt
|
+-> OperatingSystem <=> Betriebssystemversion, unter dem die Anwendung läuft
|
+-> ActivePrinter <=> Name des aktuell eingestellten Standarddruckers
|
+-> Selection <=> Referenz auf selektierten Bereich
|
+-> ActiveCell <=> Referenz auf aktive Zelle
|
+-> ActiveChart <=> Referenz auf aktives Diagramm
|
+-> ActiveSheet <=> Referenz auf aktives Tabellenblatt
|
+-> ActiveWindow <=> Referenz auf aktives Fenster
|
+-> ActiveWorkbook <=> Datei, die IO- aktiv ist
|
+-> ThisWorkbook <=> Datei, die momentan
| ausgeführtes Macro enthält
|
+-> ScreenUpdating <=> TRUE, dann werden alle Änderungen an Zellen
| sofort angezeigt
| FALSE, die Änderungen werden nicht angezeigt
+-> M: GetOpenFilename([Filter], ...) <=> Zeigt einen "Datei öffnen" Dialog an,
| und gibt den Name der zu öffnenden Datei zurück
|
+-> M: GetSaveAsFilename(...) <=> Zeigt einen "Datei speichern unter..." Dialog an,
| und gibt den Namen der Datei zurück, in die gesichert
| werden soll.
|
+-> M: Intersect(A as Range, B as Range) <=> Bildet die Schnittmenge zwischen zwei Zellbereichen.
| Kann verwendet werden, um zu prüfen, ob eine
| betrachtete Zelle in einem definierten Bereich von
| Zellen enthalten ist.
|
+-> C: Workbooks <=> Aufzählung aller geladenener
| Excel- Dateien.
| Zugriff über: Workbooks(Nr) oder
| Workbooks(„Dateiname“)
| liefert die Referenz auf ein
| Workbook- Objekt.
|
+-> M: Add <=> neue, leere Arbeitsmappe anlegen
|
+-> count <=> Anzahl der aktuell geladenen Arbeitsmappen
|
+-> M: open „Dateiname“ <=> Vorhandene Excel-Datei laden
|
+-> M: Close <=> schließen einer Excel- Datei
3.2.2 Objektmodell einer Arbeitmappe (Excel- Datei)
Workbook <=> Arbeitsmappe, entspricht einer
| Excel- Datei
|
+-> M: Activate <=> Datei zur IO- aktiven machen
|
+-> M: Save <=> Arbeitsmappe sichern
|
+-> Path <=> Verzeichnis, in dem die Arbeitsmappe gepeichert ist
|
+-> C: Sheets <=> Aufzählung aller Arbeitsblätter der
| Arbeitsmappe
| Zugriff über: Sheets(Nr) oder
| Sheets(„Name“)
| Ein Sheet kann ein Tabellenblatt, ein
| Diagramm oder ein Dialog sein.
|
+-> M: Add <=> neue, leere Arbeitsmappe anlegen
|
+-> count <=> Anzahl der aktuell geladenen Arbeitsmappen
|
+-> M: Close <=> schließen einer Excel- Datei
3.2.3 Objektmodell einer Excel- Tabelle
Achtung: Ein Range- Objekt kann an
selbstdefinierte Funktionen übergeben werden. Jedoch darf es in
diesen nicht verändert werden (endet mit einer kryptischen
Fehlermeldung) !
Worksheet <=> Excel- Tabelle
|
+-> M: Activate <=> Tabelle zur IO- aktiven machen
|
+-> ChartObjects <=> Aufzählung aller Diagrammobjekte in einem Arbeitsblatt
| |
| +->>ChartObject
|
+-> M: Cells(line, Col) <=> Zugriffsfunktion auf Tabellenzellen.
| Zugriff erfolgt über Zeilen und
| Spaltenindizes z.B. Cells(1, 2)
| liefert Zugriff auf Zelle B2
|
+-> Range <=> Afzählung aller Tabellenzellen.
| Zugriff erfolgt über A1- Adressen
| z.B. Range(„B2:C4“) liefert Aufzählung
| aller Zellen aus dem Bereich B2:C4,
| Range("A1") liefert die Zelle A1
|
+-> Interior <=> Hintergrundfarbe und -Muster einer Zelle
|
+-> Borders <=> Aufzählung aller Umrandungslinien eines Zellbereiches
| |
| +-> Line
| |
| +-> LineStyle <=> Linienstil einer Umrandungslinie
|
+-> Value <=> Wert der Zelle
|
+-> Formula <=> In Zelle gespeicherte Formel
|
+-> FormulaLocal <=> In Zelle gespeicherte Formel in der
| Landessprache
|
+-> HasFormula <=> True, wenn Zelle eine Formel enthält
|
+-> Font <=> Von der Zelle verwendete Schriftart
| |
| +-> Name <=> Name des Schriftfonts
| |
| +-> FontStyle <=> Schriftschnitt (z.B. Bold )
|
+-> NumberFormat <=> Nummerische Formatierung des Zelleninhaltes. Zulässige
| Werte sind Zeichenketten wie im Dialog Zellen Formatieren
3.2.4 Objektmodell eines Diagramms
3.2.4.1 Zugriff auf das aktivierte Diagramm
Das aktivierte Diagramm ist über die
Eigenschaft Applicatio.ActiveSheet erreichbar.
3.2.4.2 Deaktivieren eines Diagramms
Die Deaktivierung eines Diagramms erfolgt über
die Eigenschaft Application.ActiveWindow.Visble = False. Die
Ursache dafür besteht darin, dass ein Diagramm als OLE- Objekt
behandelt wird.
C: Charts <=> Aufzählung aller Diagramme
|
+-> Chart <=> Diagramm
|
+-> ChartArea <=> Hintergrund des gesamten Diagrammes
|
+-> PlotArea <=> Hintergrund des Zeichnungsbereiches
|
+-> Foor <=> Boden eines 3D Diagramms
|
+-> Walls <=> Seitenwände eines 3D Diagramms
|
+-> Corners <=> Ecken eines 3D Diagramms
|
+-> ChartTitle <=> Titel
|
+-> Legend <=> Beschriftung der Datenreihe
|
+-> Axes <=> Diagrammachsen
| |
| +->> Axis
| |
| +-> TickLabels <=> Markierungen von Achspunkten
| |
| +-> Gridlines <=> Orientierungslinien
|
+-> SeriesCollection <=> Datenreihen
|
+-> Series
|
+-> Points <=> Datenpunkte
| |
| +->> Point
|
+-> Trendlines <=> Trend und Ausgleichslinien
|
+->> Trendlinie