41
VBA für Excel 25.02.2010 Andreas Rozek HyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit „Visual Basic for Applications“ speziell (aber nicht nur) für Excel unter Windows Andreas Rozek HyMeSys Software & Consulting Brunnenstraße 30/2 71032 Böblingen Telefon: (07031) 436 5784 Email: [email protected] URL: www.Rozek.de

VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

Embed Size (px)

Citation preview

Page 1: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

VBA für Excel

eine Einführung in das Programmieren mit „Visual Basic for Applications“ speziell (aber nicht nur) für Excel unter Windows

Andreas RozekHyMeSys Software & ConsultingBrunnenstraße 30/271032 Böblingen

Telefon: (07031) 436 5784Email: [email protected]: www.Rozek.de

Page 2: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Überblick über den Kurs

Montag Grundlagen (Syntax & Semantik von VBA)

Freitag weiterführende Themen (Email, Web, usw.)Verwendung externer Objekte, Sudoku

Donnerstag Eingabeformulare, Programmentwicklung(Anmeldeformular, Zahlen-Memory)

Mittwoch Ereignis-gesteuerte ProgrammierungFormular- und ActiveX-Steuerelemente

Dienstag Das Excel-Objektmodell

Page 3: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

VBA für Excel

Fragen zum gestrigen Tag?

Page 4: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Lernziele erreicht?

Idealerweise sollten Sie seit dem gestrigen Tag

• wissen, was “Ereignis-gesteuerte Programmierung” ist;

• den Unterschied zwischen Formular- und ActiveX- Steuerelementen kennen;

• Formular- und ActiveX-Steuerelemente einsetzen und programmieren können.

Page 5: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Lernziele des heutigen Tages

Idealerweise sollten Sie am Ende des heutigen Tages

• wissen, was ein “Eingabe-Formular” (UserForm) ist;

• UserForms erstellen und benutzen können;

• auch nicht-triviale Aufgaben wohldurchdacht lösen können;

Page 6: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

VBA für Excel

Teil IV: Eingabeformulare

Page 7: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Eingabeformulare („UserForms“)

sind eigentlich eigenständige (Eingabe-)Dialoge

Page 8: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Eingabeformulare (Fortsetzung)

können “modal” und “nicht-modal” angezeigt werden • modal Excel ist während der Eingabe blockiert • nicht-modal Benutzer kann Excel weiterhin bedienen

im nicht-modalen Fall: Vorsicht z.B. mit “ActiveSheet”!

können vom Code-Fenster aus getestet werden (F5)

Page 9: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Erstellen eines Eingabeformulars

im Code-Editor: • neues Formular anlegen • Eigenschaften anpassen

wichtige Eigenschaften • Name • Caption • evtl. Scrollbars, KeepScrollbarsVisible • showModal, StartUpPosition

Page 10: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Erstellen eines Eingabeformulars (Fortsetzung)

im Code-Editor auf dem Formular selbst: • Steuerelemente anlegen und konfigurieren

wieder im Code-Editor: Ereignisbehandlungsroutinen schreiben • für die Vorbereitung des Formulares • evtl. für die Steuerelemente des Formulares selbst • für “Ok” • Formular auslesen, evtl. Fehler melden • ansonsten UserForm.hide • für “Cancel” • UserForm.hide

evtl. Start-Makro schreiben und ... ausprobieren!

Page 11: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

UserForm-Steuerelemente (Überblick)

Bezeichnungen (Label) Schaltflächen (CommandButton) Umschaltflächen (ToggleButton) Drehfelder (SpinButton) Kontrollkästchen (Checkbox) Optionsfelder (Radiobutton) Rahmen (Frame) Listenfelder (Listbox) Kombinationsfelder (Combobox) Rollbalken (Scrollbar) Tabulatorstreifen (TabStrip) TabulatorFelder (MultiPage)

Page 12: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

UserForm-Steuerelemente (allg. Arbeitsschritte)

Anlegen eines Steuerelementes • aus der Toolbox in das Formular ziehen (praktisch!) oder • in der Toolbox anwählen und auf dem Formular mit der Maus einen Umriß zeichen

Bearbeiten eines Steuerelementes • mit linker Maustaste selektieren und im Eigenschaftenfenster Anpassungen vornehmen • mit linker Maustaste doppelt anklicken und im Code-Editor die Ereignisroutine schreiben

Page 13: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Achtung!

manche Steuerelemente besitzen andere Eigenschaften, wenn Sie in einem Eingabeformular verwendet werden:

• Kombinationsfelder: RowSource • Listenfelder: RowSource

manche Steuerelemente sind nur in Eingabeformularen verfügbar:

• Rahmen (Frame) • Tabulatorstreifen (TabStrip) • TabulatorFelder (MultiPage)

Page 14: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

UserForm-Steuerelemente: Rahmen

dienen der (echten) Gruppierung

von Steuerelementen

wichtige Eigenschaften

• Name

• Caption

• evtl. Scrollbars, KeepScrollbarsVisible

Page 15: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

UserForm-Steuerelemente: Rahmen

um z.B. Optionsfelder zu gruppieren:

• Rahmen anlegen

• Optionsfelder innerhalb des Rahmens anlegen

oder

• Optionsfelder anlegen

• Rahmen anlegen

• Optionsfelder in den Rahmen schieben

Elemente im Rahmen werden mit dem Rahmen verschoben!

Page 16: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

UserForm-Steuerelemente: MultiPages

dienen der seitenweise Anzeige

von Steuerelementen

jede Seite kann im Entwurfs-

formular einzeln angewählt werden!

Konfiguriert werden die einzelnen

Seiten!

Page 17: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

UserForm-Steuerelemente: MultiPages

wichtige Eigenschaften:

• Name

• Caption

• evtl. Scrollbars, KeepScrollbarsVisible

Elemente auf den einzelnen Seiten

bleiben selektierbar – es werden

aber immer nur die gerade sichtba-

ren Elemente gezeigt!

Page 18: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

“Lebenszyklus“ eines Eingabeformulares

(Erstellen)

Laden Load UserForm

Initialisieren private sub UserForm_Initialize()

Vorbereiten und

Einblenden (und Benutzen) UserForm.Show [vbModeless]

Auslesen und

Ausblenden UserForm.Hide

Aufräumen und private sub UserForm_Terminate()

Entladen Unload UserForm

Page 19: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Ein konkretes Beispiel...

Page 20: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Ein konkretes Beispiel: Erstellen

Page 21: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Ein konkretes Beispiel: Vorbereiten und Einblenden

Sub showDialog()

Load BeispielFormular

With BeispielFormular

.SalutationChoice.Value = ...

...

End With

BeispielFormular.Show

End Sub

Page 22: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Ein konkretes Beispiel: Auslesen und Ausblenden

Private Sub OkButton_Click()

... (Eingaben überprüfen, Beispiel folgt)

If (Trim(SalutationChoice.Value) = "") Then

MsgBox "Bitte wählen Sie eine Anrede"

Exit Sub

End If

... (Eingaben auslesen und in Tabelle schreiben)

BeispielFormular.Hide

End Sub

Page 23: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

VBA für Excel

Teil IV: Programmiertips

Page 24: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Das Wasserfallmodell

Analyse

Entwurf

Implementierung

Test

Einsatz

MockUp

Pflichtenheft

Prototyp

Page 25: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Programmiertips

dies ist keine Vorlesung über

• Entwurfstheorie

• Systemmodellierung

• Algorithmenentwurf

stattdessen erhalten Sie ein paar ganz pragmatische Tips zur

Programmierung – bitte nicht Ihrem Professor zeigen!

Page 26: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Konkretes Beispiel: Zahlenmemory

Page 27: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Ereignis-orientierte Programmierung

Ereignisse lösen i.a. “Zustandsänderungen” aus

(Zustand, Zustandsübergang)

formal korrekte Modellierung und Darstellung z.B. durch

• Zustandsdiagramm

• Petri-Netz

in der Praxis “privat”:

zeichnen Sie einfach irgendwie ein Zustandsdiagramm -

aber zeichnen Sie es!

Page 28: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

„Irgendein“ Zustandsdiagramm

Start

:Reset

Spiel initialisiert

1. Karte aufgedeckt

2. Karte aufgedeckt

ungleich:zudeckenalle Felder aufgedeckt:

weitere Felder verdeckt:

Ende

gleich:

Page 29: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Programmablauf

formal korrekte Modellierung und Darstellung z.B. durch

• Flußdiagramm o.ä.

• (PseudoCode)

in der Praxis “privat”:

zeichnen Sie einfach irgendein Flußdiagramm ohne gra-

fischen Schnickschnack - aber zeichnen Sie es!

Page 30: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

„Irgendein“ Flußdiagramm

Memory-Feld füllen

„Liste“ (String) aller Feldinhalte erstellen(je zweimal „0“ bis „9“)

for Row = 1 to 4 for Column = 1 to 5

Inhalt Nr. rnd(1...len(„Liste“)) in Feld (r-1)*5+c eintragenInhalt aus Liste entfernen

Ende

Page 31: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Weitere Tips aus der Praxis

“Machen Sie es so einfach wie möglich - aber nicht einfacher”

KISS-Prinzip: “Keep It Simple - but not Stupid!”

“die Produktivität von Programmierern variiert um den Faktor 20”

(und je länger es dauert, desto unwahrscheinlicher wird es,

daß das Projekt abgeschlossen wird)

ZEIT!

Page 32: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Weitere Tips aus der Praxis (Fortsetzung)

„Pareto-Prinzip“:

„mit 20% des Aufwandes erreicht man 80% des Ergebnisses“

keine unumstößliche Regel, wohl aber eine Beobachtung

niemals darauf verlassen, aber im Hinterkopf behalten:

=> MockUps und Prototypen

„Der frühe Wurm fängt den Fisch!“

Page 33: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Weitere Tips aus der Praxis (Fortsetzung)

seien Sie pragmatisch – nicht perfektionistisch:

• Sie können 1000-mal behaupten, daß Ihre Lösung verbesse-

rungswürdig ist – wenn Sie denn eine haben

• aber Sie dürfen kein einziges Mal behaupten, daß Sie die

beste aller Lösungen liefern werden, wenn sie noch nicht

vorzeigbar ist (setzen Sie Ihre eigenen Ziele nicht zu hoch)

=> Vorabversionen – keine “Vaporware” (Duke Nukem)

Page 34: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Weitere Tips aus der Praxis (Fortsetzung)

planen Sie! Aber nicht sich zu Tode!

planen Sie gerade soweit, daß Sie denken, Sie können Ihre

Lösung implementieren – es werden ohnehin unvorhergese-

hene Probleme auftreten!

haben Sie keine Angst vor Kritik – es wird immer jemanden

geben, dem Ihre Lösung nicht gefällt!

keine Angst vor O(n2) bzw. O(n3) bei kleinen n

Page 35: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

VBA für Excel

Übungen

Page 36: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Übungen

implementieren Sie das Beispielformular

• erstellen Sie zunächst die Tabelle mit den Vorgaben für die Listen sowie den Zellen für die Benutzereingaben

• legen Sie nun das Formular mit allen Steuerelementen an

• den Inhalt für Datenschutzerklärung und AGBs lassen Sie sich von einem “Lorem Ipsum”-Generator erzeugen (dazu recher- chieren Sie im Web!)

• erstellen Sie die Ereignisroutine für den “Cancel”-Button

Page 37: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Übungen (Fortsetzung)

erstellen Sie die Ereignisroutine für den “Ok”-Button • prüfen Sie zunächst die Vollständigkeit aller Eingaben im Fehlerfalle zeigen Sie eine MsgBox an und verlassen Sie die Ereignisroutine, ohne die Tabelle modifiziert zu haben

• lesen Sie nun die verschiedenen Eingabefelder aus und schreiben Sie passende Werte in die Tabelle

Achtung: fassen Sie alle selektierten Interessen in einer Zeichenkette zusammen (Komma-separiert) • am Ende blenden Sie den Dialog einfach wieder aus

testen Sie Ihr Formular aus dem Code-Editor heraus!

Page 38: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Übungen (Fortsetzung)

erstellen Sie nun die Ereignisroutine für den “Eingabe”-Button auf dem Tabellenblatt

• “laden” Sie zunächst das Eingabeformular

• füllen Sie nun das Formular mit den Vorgaben aus der Tabelle

Achtung: die Tabellenzellen müssen dazu bereits gültige Werte enthalten (dürfen insbesondere nicht “leer” sein - “leer” nicht mit der leeren Zeichenkette verwechseln!).

Verwenden Sie die Funktion split, um den Inhalt der Zelle mit den Adressen in ein Datenfeld umzuwandeln...

Page 39: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Übungen (Fortsetzung)

Fortsetzung zum Vorbelegen des Listenfeldes durchlaufen Sie alle Elemen- te des Listenfeldes und setzen

ListBox.selected(i) = true

für jedes i-te Element, dessen Text im Tabellenfeld vorhanden ist

• testen Sie das Beispiel in seiner vollen Form

Page 40: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Übungen (Fortsetzung)

entwerfen und implementieren Sie ein “Zahlenmemory”

• skizzieren Sie die Anforderungen an das Spiel (Anzeige des Spielfeldes, Bedienung (Aufdecken von Feldern) Erkennung des Spielzuges, Erkennung des Spielendes)

• überlegen Sie sich eine Implementierung in Excel und VBA (so einfach wie möglich)

Page 41: VBA für Excel 25.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung in das Programmieren mit Visual Basic for Applications

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Übungen (Fortsetzung)

implementieren Sie das Spiel Schritt für Schritt

• erstellen Sie das Tabellenfeld mit allen Bedien- und Anzeige- komponenten => MockUp!

• implementieren Sie die Bedienung und die Ende-Erkennung

• testen Sie Ihr Spiel – im Zweifelsfalle “mogeln” Sie, indem Sie sich die aufgedeckten Karten notieren

• testen Sie auch auf Fehlbedienungen: was passiert, wenn aufgedeckte Karten erneut aufgedeckt werden? Wenn jemand versucht, im selben Zug zweimal dieselbe Karte aufzudecken?