Programmierkonzepte inVBA - Technische Universität Kaiserslautern

Werbung
Programmieren in Anwendungen
Annette Bieniusa
Technische Universität Kaiserslautern
[email protected]
23.05.2013
1 / 41
Überblick
Visual Basic for Applications (VBA)
Ausdrücke
Kontrollstrukturen
Prozeduren
Im Dialog mit dem Benutzer
Objekte in VBA
VBA Objekte in Word und Excel
2 / 41
Themen
Visual Basic for Applications(VBA)
I
Wiederholung grundlegender Konzepte der imperativen
Programmierung anhand der neuen Sprache VB (Visual Basic)
I
Einführung in die ereignisorientierte Programmierung
I
Anwendungsbeispiele mit VBA in Word und Excel
Statistik und Grafiken mit R
I
Einführung in die Statistiksoftware R
I
Wiederholung grundlegender Konzepte der Statistik und
Datenanalyse
I
Datenvisualisierung und Datenanalyse in R an ausgewählten
Fallstudien
3 / 41
Visual Basic for Applications (VBA)
I
Skriptsprache zur Automatisierung und Anpassung von
Microsoft Office Programmen
I
Basiert auf der Syntax von Visual Basic (nicht mehr
kompatibel seit VB.NET)
I
Modul-orientiert und prozedural
Literaturhinweis
VBA-Programmierung - Integrierte Lösungen mit Office 2010, 1.
Auflage, Okt 2010 (erhältlich im Rechenzentrum bzw.
HERDT-Verlag)
4 / 41
Typische Einsatzgebiete
I
Automatisiertes Erzeugen von Dokumenten wie Serienbriefen
I
Benutzerdefinierte Dialogfenster oder Fehlermeldungen
I
Dokumentstatistiken erstellen
I
Daten aus anderen Anwendungen einbinden (insbesondere
Access-Datenbanken)
Einbinden von Funktionalität spezifischer Office-Anwendungen
(integrierte Lösungen)
I
I
I
Umsatz- und Budgetzahlen aus einer Access-Datenbank
werden in Excel ausgewertet und visualisiert.
Umfangreiche Excel-Tabellen können über Word kompakt
gedruckt werden.
5 / 41
Beispiel: Berechnung von Zeiträumen
’ Dauer des Semesters
Sub AnzahlTage ()
Dim Heute As Date , Semesterende As Date , Ausgabe As
String
Heute = Date
Semesterende = DateValue ( " 20.07.2013 " )
Ausgabe = " Bis zum Semesterende sind es noch " &
DateDiff ( " d " , Heute , Semesterende ) & " Tage . "
MsgBox Ausgabe
End Sub
6 / 41
Ausdrücke
7 / 41
Wiederholung: Variablen
I
Mit Hilfe von Variablen kann man (temporär) Werte speichern
und diese in den Prozeduren verwenden.
I
Der Wert einer Variablen kann durch eine Zuweisung
verändert werden.
I
Variablen werden über Bezeichner (Variablennamen)
referenziert.
I
Die Deklaration einer Variablen ist das Vereinbaren einer
Variablen vor ihrem ersten Gebrauch.
Dim Variablenname As Datentype
I
Beispiele:
Dim
Dim
Dim
Dim
Anzahl As Integer
AusgabeText As String
Alter As Integer , Temperatur As Integer
Gestern As Date
8 / 41
Konstanten
I
Konstanten werden ebenfalls über Bezeichner referenziert,
sind aber unveränderlich.
I
Einer Konstanten wird bereits während der Deklaration ein
Wert zugewiesen, der später nicht mehr verändert werden
kann.
I
VBA stellt eine Vielzahl von Konstanten zur Verfügung (siehe
z.B. Abschnitt Meldungsfenster).
Const Kon stantenn ame As Datentype = Ausdruck
I
Beispiele:
Const Pi as Double = 3.14159
Const Programmname as String = " Mein Programm "
9 / 41
Operatoren
I
Ein Ausdruck ist eine Kombination aus Werten, Variablen,
Konstanten und Operatoren.
I
Arithmetische Operatoren: +, −, ∗, /,\, Mod, ˆ
I
Vergleichsoperatoren: <, <=, >, >=, =, <>
I
Logische Operatoren: Not, And, Or
I
Verkettungsoperator: & (Konkatenation von Strings)
10 / 41
Vergleiche mit String-Mustern
I
Der Vergleichsoperator Like wird verwendet, um Strings mit
String-Mustern zu vergleichen.
Zeichen
?
*
[Liste]
[!Liste]
Bedeutung
Ein einzelnes Zeichen
Kein oder mehrere Zeichen
Ein Zeichen der Liste
Ein Zeichen nicht in der Liste
Beispiel
"Hallo" Like "H?lo"-> false
"Haut" Like "H*t"-> true
"X" Like "[A-Z]"-> true
"K" Like "[!a-m]"-> false
11 / 41
Kontrollstrukturen
12 / 41
Wiederholung: Verzweigungen
I
Bei Verzweigungen werden Programmteile abhängig von einer
Bedingung ausgewertet.
If Ausdruck Then
...
Else
...
End If
If Alter >= 18 Then
MsgBox " Normaltarif "
Else
MsgBox " Jugendtarif "
End If
13 / 41
Schleifen
I
Mit Schleifen wird ein Anweisungsblock wiederholt ausgeführt.
I
Zählergesteuerte Wiederholung
For Zaehler = Start To Ende [ Step d ]
A nw ei su n gs bl oc k
Next
I
Beispiel
For X = 1 To 20 Step 5
Debug . Print " X ist " & X
Next
I
Schrittweite wird durch Step angepasst, ohne Angabe wird
Schrittweite 1 verwendet.
14 / 41
Schleifen unter Bedingungen
I
Kopfgesteuerte bedingte Wiederholung
Do While / Until Ausdruck
A nw ei su n gs bl oc k
Loop
X = 1
Do Until X = 20
Debug . Print " X ist " & X
X = X + 5
Loop
I
Fussgesteuerte bedingte Wiederholung
Do
A nw ei su n gs bl oc k
Loop While / Until
Ausdruck
I
Y = 1
Do While Y <> 20
Debug . Print " Y ist " & Y
Y = Y + 5
Loop
X = 1
Do
Debug . Print " X ist " & X
X = X + 5
Loop Until X = 20
Fussgesteuerte Schleifen werden immer mind. einmal
ausgeführt!
15 / 41
Prozeduren
16 / 41
Übersicht: Prozeduren
I
Prozeduren bestehen aus einer Folge von Anweisungen (z.B.
Zuweisungen von Variablen, Prozeduraufrufen,
Verzweigungen, Schleifen, ...).
I
Wichtige Form der Abstraktion beim Programmieren!
17 / 41
Sub-Prozeduren
I
Sub-Prozeduren geben keinen Wert zurück.
I
Syntax von einfachen Sub-Prozeduren
Sub Prozedurname ()
...
End Sub
I
Syntax von Prozeduraufrufen
Prozedurname
Call Prozedurname
18 / 41
Prozeduren mit Parametern
I
Syntax von Sub-Prozeduren mit Parametern
Sub Prozedurname ([ ByVal | ByRef ] Parametername [ As Type
] ,...)
...
End Sub
I
Syntax von Prozeduraufrufen
Prozedurname ( Ausdruck ,...)
Call Prozedurname ( Ausdruck ,...)
I
Der Wert des Ausdrucks wird als Kopie an den die Prozedur
weitergegeben. Die Prozedur kann den übergebenen Wert
verändern, ohne dass sich der ursprüngliche Wert ändert (call
by value).
Sub Increment ( ByVal input as Integer )
input = input + 1
End Sub
...
Dim i as Integer , k as Integer
i = 10
Increment ( i )
k = i ’k hat hier den Wert 10
19 / 41
Prozeduren mit Parametern und Call-by-Reference
I
Alternativ kann ein Parameter eine Referenz auf die Variable
erhalten, die den Wert enthält (call by reference).
I
Die Prozedur arbeitet dann nicht mit einer Kopie, sondern
kann die Variable selbst direkt verändern.
Sub Increment ( ByRef input as Integer )
input = input + 1
End Sub
...
Dim i as Integer , k as Integer
i = 10
Increment ( i )
k = i ’k hat hier den Wert 11
20 / 41
Funktionen
I
I
Funktionen können, wie Prozeduren, mehrere Anweisungen
ausführen und geben immer einen Wert an das aufzurufende
Programm zurück.
Syntax von Funktionen
Function Funktionsname ([ ByVal | ByRef ] Parametername [ As
Type ] ,...) [ As Type ]
...
Funktionsname = Rueckgabewert
...
End Function
I
I
Wenn kein Rückgabewert spezifiziert wird, wird ein
Standardwert entsprechend dem Datentypen der Funktion
zurückgegeben.
Syntax von Funktionsaufrufen
Funktionsname ( Ausdruck ,...)
I
Während Prozeduraufrufe eigenständige Anweisungen sind,
sind Funktionsaufrufe Ausdrücke.
21 / 41
Beispiele: Prozeduren und Funktionen
Sub A b s a t z F o r m a t i e re n ()
Acti veDocume nt . Selection . Range . Bold = True
Acti veDocume nt . Selection . Range . Italic = True
End Sub
Function Max ( X as Integer , Y as Integer ) as Integer
If X < Y Then
Max = Y
Else
Max = X
End Function
22 / 41
Im Dialog mit dem Benutzer
23 / 41
Wiederholung: Meldungsfenster
I
Meldungsfenster können dazu genutzt werden, dem Benutzer
Informationen mitzuteilen und auch abzufragen. Sie bestehen
aus dem Meldungstext und standardmäßig der Schaltfläche
“OK”. Sie kann optional mit einem Titel,
Informationssymbolen und weiteren Schaltflächen ergänzt
werden.
I
Einfaches Meldungsfenster
MsgBox " Meldungstext "
I
Meldungsfenster mit Titel und Informationssymbol
MsgBox " Meldungstext " , vbInformation , " Titel "
24 / 41
Schaltflächen
Mögliche Kombinationen von Schaltflächen
Konstante
Wert Schaltfläche
vbOkOnly
0
OK
vbOkCancel
1
OK und Abbrechen
vbAbortRetryIgnore
2
Abbrechen, Wiederholen und Ignorieren
vbYesNoCancel
3
Ja, Nein und Abbrechen
vbYesNo
4
Ja und Nein
vbRetryCancel
5
Wiederholen und Abbrechen
25 / 41
Rückgabewerte von Schaltflächen
Konstante
vbOk
vbCancel
vbAbort
vbRetry
vbIgnore
vbYes
vbNo
Wert
1
2
3
4
5
6
7
gewählte Schaltfläche
OK
Abbrechen
Abbrechen
Wiederholen
Ignorieren
Ja
Nein
26 / 41
Eingabedialoge
I
Die Funktion InputBox erzeugt Eingabedialog mit Text und
einer Eingabezeile.
I
Der vom Anwender eingegebene Wert wird als String
zurückgeliefert. Bei Betätigen der Schaltfläche Abbrechen ist es
der leere String "".
I
Der optionale Parameter Default legt den Wert fest, der
standardmässig im Eingabefeld angezeigt wird.
InputBox ( Text , [ Title ] , [ Default ])
27 / 41
Objekte in VBA
28 / 41
Objekte in VBA
I
Alle Elemente in MS Office, wie Dokumente, Tabellen,
Graphiken, etc., sind Objekte.
I
Typische Objekte in Excel sind Arbeitsmappen (Workbook),
Tabellenblätter (Worksheet), Diagramme (Charts) und Zellen
(Range,Cell).
I
Das gerade aktive Objekt wird mittels
(z.B. ActiveWorkbook oder ActiveCell).
I
Eine vollständige Übersicht listen die Developer Referenzen
(z.B. http://msdn.microsoft.com/en-us/library/
office/ff846392(v=office.14).aspx).
ActiveXXX
referenziert
29 / 41
Objekte
I
I
Objekte sind Programmeinheiten, die Daten sowie die
Prozeduren zum Verarbeiten dieser Daten enthalten.
Objekte haben
I
I
I
einen Zustand (definiert durch Eigenschaften/Properties),
ein Verhalten (definiert durch objektspezifische
Prozeduren/Methoden) und
eine Identität (wodurch es sich von Objekten des gleichen Typs
unterscheidet).
30 / 41
Klassen
I
Eine Klasse ist eine Art Modell für Objekte des gleichen Typs.
I
Sie dient als Bauplan für die einzelnen Objekte und definiert
deren Eigenschaften und Methoden.
I
Beispiel:
bezeichnet die Klasse für Word-Dokumente,
eine Objekt-Instanz der Klasse Document.
Document
ActiveDocument
31 / 41
Zugriff auf Methoden und Eigenschaften
I
I
Objektverweise sind Variablen, die eine Referenz auf ein
Objekt enthalten.
Deklaration von Objektvariablen
Dim Objektv ariable as Obj ektdaten typ :
I
Zuweisung auf Objektvariable:
Set Objektv ariable = Objekt
I
Zugriff auf Eigenschaften:
Obje ktvariab le . E i g e n s c h a f t s n a m e
I
Aufruf von Methoden:
Obje ktvariab le . Methodenname
Obje ktvariab le . Methodenname ( Parameter )
I
Löschen von Objektvariablen
Set Objektv ariable = Nothing
32 / 41
Auflistungen (Collections)
I
Auflistungen sind spezielle Objekte, die aus einer Menge von
Objekten des gleichen Typs bestehen.
I
Beispiel: Die Auflistung Worksheets in Excel enthält alle aktuell
geöffneten Tabellenblätter.
I
Auf einzelne Objekte in einer Auflistung wird über einen
Indexwert zugegriffen (beginnend mit 1).
Sub Blaetter ()
Dim Anzahl As Integer , Index as Integer
Anzahl = Worksheets . Count
For Index = 1 To Anzahl
Debug . Print Worksheets ( Index ) . Name
End Sub
I
Häufig kann auch der Name des Objekts zum Zugriff
verwendet werden.
Workbooks ( " Mappe1 . xlsm " ) . Worksheets ( " Tabelle2 " ) . Range (
" A1 : B5 " )
33 / 41
Zusammenfassung
I
Ausdrücke: Variablen, Konstanten, zusammengesetzte
Ausdrücke mit Operatoren, Funktionsaufrufe
I
Anweisungen (Statements): Prozeduraufrufe,
Kontrollstrukturen (Verzweigungen, Schleifen)
I
Meldungs- und Eingabefenster
I
Objekte mit Eigenschaften und Methoden
34 / 41
VBA Objekte in Word und Excel
35 / 41
Beispiel: Dokumente in Word
Sub D o k u m e n t O e f f n e n S c h l i e s s e n E r s t e l l e n ()
Dim Brief As Document
Set Brief = Documents . Open ( Act iveDocum ent . Path & " \
Testbrief . docx " )
Brief . Close
Set Brief = Nothing ’ gibt den Speicherplatz wieder
frei
End Sub
Activate
Close
Path
Printout
Save
SaveAs2
Aktiviert das Dokument
Schliesst und speichert das Dokument
Pfad zum Speicherort des Dokuments
Druckt das Dokument
Speichert das Dokument
Speichert das Dokument unter einem neuen Namen
Weitere Methoden/Eigenschaften: Verwendung von Templates,
Schreib-/Passwortschutz
36 / 41
Textbereiche
I
Ein Range Objekt referenziert einen zusammenhängenden
Bereich eines Dokuments.
I
Es wird über einen Start- und einen Endcharacter definiert.
I
Ein
Range
Objekt kann auch nur die Eingabemarke definieren.
Sub T e s t R a n g e O b j e c t s ()
Dim rngIns As Range , rngPar1 As Range , rngPar2 as
Range
Dim doc As Document
Set rngPar1 = doc . Paragraphs (1) . Range
MsgBox " Der 1. Absatz beginnt mit dem Wort " &
rngPar1 . Words . First & " . "
Set rngPar2 = doc . Range ( Start := doc . Paragraphs (2) .
Range . Start , End := doc . Paragraphs (3) . Range . End )
Set rngIns = doc . Range ( Start :=0 , End :=0)
rngIns . InsertBefore " Hello "
End Sub
37 / 41
Markierte Textbereiche
I
Das Selection Objekt referenziert den markierten Bereich des
aktuellen Dokuments.
Sub T e s t S e l e c t i o n O b j e c t ()
Dim rngParagraph As Range
Selection . Font . Bold = True
Select Case Selection . Type
Case w d S e l e c t i o n N o r m a l
MsgBox " Sie haben folgenden Text markiert : " &
Selection . Text
Case wdSelectionIP
MsgBox " Sie haben nichts markiert "
Set rngParagraph = A ctiveDo cument . Paragraphs (2) . Range
rngParagraph . Select
Selection . Font . Italic = True
End Sub
38 / 41
Zugriff auf Dokumenteninhalte
Characters
Sentences
Paragraphs
Words
Start/End
Text
Auflistung einzelner Zeichen
Auflistung von Sätzen
Auflistung von Absätzen
Auflistung von Worten
Start- bzw. Endposition
Textinhalt
39 / 41
Beispiel: Arbeitsmappen und Tabellen in Excel
I
I
I
I
Arbeitsmappen (Workbooks) beinhalten Tabellenblätter
(Worksheets) und Diagramme (Charts).
UsedRange referenziert den verwendeten Bereich eines
Tabellenblatts.
CurrentRegion bezeichnet einen Bereich gefüellter Zellen, die
von leeren Zellen umgeben sind.
Mittels Cells lassen siche einzelne Zellen referenzieren.
Sub ArtikelSuchen ()
Dim ArtNr As String , Zaehler As Integer
ArtNr = InputBox ( " Geben Sie eine Artikelnummer ein : " ,
" Artikel suchen " )
ThisWorkbook . Sheets ( " Artikel " ) . Activate
For Zaehler = 1 To Range ( " A1 " ) . CurrentRegion . Rows . Count
If Cells ( Zaehler ,1) . Value = ArtNr Then
MsgBox " Artikel wurde gefunden "
Exit Sub
End If
Next
MsgBox " Artikel nicht vorhanden "
End Sub
40 / 41
Zellbereiche
I
Ein Range Objekt bezeichnet in Excel einen
zusammenhängenden Zellbereich.
Worksheets (1) . Range ( " A4 " ) . Value
Worksheets ( " Messreihe " ) . Range ( " B2 : B8 " ) . Count
Range ( " A1 : A5 " ," B1 : B5 " ) . Count
’ verwendet implizit das akutelle Tabellenblatt
Range ( Cells (3 ,3) , Cells (4 ,6) ) . Select
’ entspricht Range (" C3 : F3 ") . Select
41 / 41
Herunterladen