vba für excel 25.02.2010 andreas rozekhymesys software & consulting vba für excel eine...
Post on 05-Apr-2015
138 Views
Preview:
TRANSCRIPT
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: A.Rozek@gmx.deURL: www.Rozek.de
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
VBA für Excel 25.02.2010
Andreas Rozek HyMeSys Software & Consulting
VBA für Excel
Fragen zum gestrigen Tag?
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.
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;
VBA für Excel 25.02.2010
Andreas Rozek HyMeSys Software & Consulting
VBA für Excel
Teil IV: Eingabeformulare
VBA für Excel 25.02.2010
Andreas Rozek HyMeSys Software & Consulting
Eingabeformulare („UserForms“)
sind eigentlich eigenständige (Eingabe-)Dialoge
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)
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
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!
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)
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
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)
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
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!
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!
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!
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
VBA für Excel 25.02.2010
Andreas Rozek HyMeSys Software & Consulting
Ein konkretes Beispiel...
VBA für Excel 25.02.2010
Andreas Rozek HyMeSys Software & Consulting
Ein konkretes Beispiel: Erstellen
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
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
VBA für Excel 25.02.2010
Andreas Rozek HyMeSys Software & Consulting
VBA für Excel
Teil IV: Programmiertips
VBA für Excel 25.02.2010
Andreas Rozek HyMeSys Software & Consulting
Das Wasserfallmodell
Analyse
Entwurf
Implementierung
Test
Einsatz
MockUp
Pflichtenheft
Prototyp
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!
VBA für Excel 25.02.2010
Andreas Rozek HyMeSys Software & Consulting
Konkretes Beispiel: Zahlenmemory
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!
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:
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!
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
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!
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!“
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)
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
VBA für Excel 25.02.2010
Andreas Rozek HyMeSys Software & Consulting
VBA für Excel
Übungen
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
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!
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...
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
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)
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?
top related