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

  • Upload
    chaim

  • View
    110

  • Download
    0

Embed Size (px)

DESCRIPTION

VBA für Excel. 25.02.2010. 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 - PowerPoint PPT Presentation

Citation preview

Page 1: VBA für Excel

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Ein konkretes Beispiel...

Page 20: VBA für Excel

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Ein konkretes Beispiel: Erstellen

Page 21: VBA für Excel

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

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

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

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

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

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

Konkretes Beispiel: Zahlenmemory

Page 27: VBA für Excel

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

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

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

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

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

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

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

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

VBA für Excel 25.02.2010

Andreas Rozek HyMeSys Software & Consulting

VBA für Excel

Übungen

Page 36: VBA für Excel

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

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

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

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

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

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?