VBA für Excel 24.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung...
-
Upload
hartmann-stroh -
Category
Documents
-
view
121 -
download
4
Transcript of VBA für Excel 24.02.2010 Andreas RozekHyMeSys Software & Consulting VBA für Excel eine Einführung...
VBA für Excel 24.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
VBA für Excel 24.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 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
VBA für Excel
Fragen zum gestrigen Tag?
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Lernziele erreicht?
Idealerweise sollten Sie seit dem gestrigen Tag
• wissen, daß Excel ein Objektmodell anbietet;
• mit den Excel-Objekten umgehen können;
• das Objektmodell mithilfe von Objektkatalog und eingebau- ter Hilfe inspizieren können;
• erste Automatisierungsmakros programmieren können.
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Lernziele des heutigen Tages
Idealerweise sollten Sie am Ende des heutigen Tages
• 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 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
VBA für Excel
Teil III: Ereignis-gesteuerte Programmierung
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Ereignis-gesteuerte Programmierung
es werden laufend „Ereignisse“ generiert, z.B. • Mausbewegungen • Tastendrücke • Systemereignisse (CD/SD einlegen, USB-Gerät wechseln) • abgeleitete Ereignisse (grafische Benutzeroberfläche)
Ereignisse werden in Warteschlange (event queue) abgelegt und der Reihe nach bearbeitet
Ereignisbehandlungsroutinen (event handler) müssen/sollten zügig terminieren, da sonst u.U. das System blockiert
unter VBA: Abbruch mit “Esc” bzw. “Alt-Break”
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Ereignis-gesteuerte Programmierung (Fortsetzung)
z.B. Mausklicks
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Ereignis-gesteuerte Programmierung (Fortsetzung)
Benutzer-definiert
bearbeiten
Excel-intern
bearbeiten
Ereignis der Warte-
schlange entnehmen
Während einer Ereignis-
behandlung ist Excel
blockiert!
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Quellen für Ereignisse in Excel
Excel-eigene Objekte • Application • Workbook • Worksheet • (Chart) • QueryTable
Steuerelemente • Excel-interne Steuerelemente • ActiveX Controls
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Welche Ereignisse erzeugt ein bestimmtes Objekt?
Nutzen Sie den Code Editor und die Hilfe
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Wie schreibt man eine Ereignisroutine?
Nutzen Sie den Code Editor
der automatisch erzeugte „Rumpf“ enthält ggfs. eine Referenz auf die auslösende Komponente
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Interessante Ereignisse des Application-Objektes
WorkbookBeforeSave vor dem Speichern einer Mappe WorkbookBeforePrint vor dem Ausdrucken einer Mappe WorkbookBeforeClose vor dem Schließen einer Mappe
SheetFollowHyperlink beim Anklicken eines Hyperlinks
SheetChange nach Änderung eines Blattes
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Interessante Ereignisse des Workbook-Objektes
Open nach dem Öffnen Activate nach dem Aktivieren
BeforeSave vor dem Speichern BeforePrint vor dem Ausdrucken BeforeClose vor dem Schließen
SheetFollowHyperlink beim Anklicken eines Hyperlinks
NewSheet nach Anlegen eines Blattes SheetChange nach Änderung eines Blattes
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Interessante Ereignisse des Worksheet-Objektes
Activate nach dem Aktivieren Deactivate nach Deaktivierung
Calculate nach Neuberechnungen Change nach Änderungen
FollowHyperlink nach Anklicken eines Hyperlinks
SelectionChange nach Änderung der Selektion
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Interessante Ereignisse des QueryTable-Objektes
BeforeRefresh vor Aktualisierung einer Abfrage
AfterRefresh nach Aktualisierung einer Abfrage
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
VBA für Excel
Teil III: Steuerelemente & Eingabeformulare
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Zwei Varianten von Steuerelementen (Controls)
Formular-Steuerelemente
• kleine, nicht erweiterbare Auswahl geringer Funktionalität
• in Excel integriert, dadurch stets vorhanden
• vermutlich Plattform-unabhängig (bitte stets vorher testen)
• keine Unterscheidung Entwurfsmodus<->Arbeitsmodus
ActiveX-Steuerelemente
• beliebig erweiterbare Auswahl (Drittanbieter)
• nicht nur für Excel, für alle (ActiveX-fähigen) Programme
• sehr vielseitig konfigurierbar, viele mögliche Events
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Formular-Steuerelemente (Überblick)
Bezeichnungen (Label) Schaltflächen (Button) Drehfelder (SpinBox) Kontrollkästchen (Checkbox) Optionsfelder (Radiobutton) Gruppenfelder (Group) Listenfelder (Listbox) Kombinationsfelder (Combobox) Rollbalken (Scrollbar)
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Formular-Steuerelemente (allg. Arbeitsschritte)
Anlegen eines Steuerelementes • Steuerelement im Menü wählen • mit linker Maustaste auf dem Tabellenblatt Umriß zeichnen • im Falle einer Schaltfläche: Makro wählen
Bearbeiten eines Steuerelementes • mit rechter Maustaste selektieren, danach • z.B. Verschieben oder Größe ändern • Text bearbeiten • Makro zuweisen • Steuerelement formatieren
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Formular-Steuerelemente: Schaltflächen
rufen beim Anklicken das zugewiesene Makro auf
Änderung des Erscheinungs-
bildes mittels “Steuerelement
formatieren...”
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Formular-Steuerelemente: Drehfelder
erlauben die Auswahl aus einem Zahlenbereich
rufen bei Wertänderung
das zugewiesene Makro
auf
aktueller Wert kann mit
Tabellenzelle verknüpft
werden (blenden Sie
diese Zelle ggfs. aus!)
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Formular-Steuerelemente: Rollbalken
erlauben die Auswahl aus einem Zahlenbereich
rufen bei Wertänderung
das zugewiesene Makro
auf
aktueller Wert kann mit
Tabellenzelle verknüpft
werden (blenden Sie
diese Zelle ggfs. aus!)
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Formular-Steuerelemente: Kontrollkästchen
erlauben das An- und Abwählen
rufen bei Wertänderung
das zugewiesene Makro
auf
aktueller Wert kann mit
Tabellenzelle verknüpft
werden (blenden Sie
diese Zelle ggfs. aus!)
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Formular-Steuerelemente: Optionsfelder
erlauben das An- und Abwählen eines von mehreren Werten
rufen bei Wertänderung
das zugewiesene Makro
auf
aktueller Wert kann mit
Tabellenzelle verknüpft
werden (blenden Sie
diese Zelle ggfs. aus!)
ggfs. gruppieren!
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Formular-Steuerelemente: Gruppenfelder
dienen dem “Gruppieren“ anderer Steuerelemente
entweder aus optischen
Gründen oder
damit Optionsfelder
wissen, daß Sie zu-
sammengehören!
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Formular-Steuerelemente: Kombinationsfelder
erlauben die Auswahl aus einer Werteliste
rufen bei Wertänderung
das zugewiesene Makro
auf
aktueller Wert kann mit
Tabellenzelle verknüpft
werden (blenden Sie
diese Zelle ggfs. aus!)
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Formular-Steuerelemente: Listenfelder
erlauben die Auswahl eines/(mehrerer) Werte aus einer Liste
rufen bei Wertänderung
das zugewiesene Makro
auf
aktueller Wert kann mit
Tabellenzelle verknüpft
werden (blenden Sie
diese Zelle ggfs. aus!)
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
ActiveX-Steuerelemente (Überblick)
Bezeichnungen (Label) Schaltflächen (CommandButton) Umschaltflächen (ToggleButton) Drehfelder (SpinButton) Texteingabefelder (Textbox) ein- und mehrzeilig Kontrollkästchen (Checkbox) Optionsfelder (Radiobutton) Listenfelder (Listbox) Kombinationsfelder (Combobox) Grafikanzeigen (Image) Rollbalken (Scrollbar)
und beliebig mehr...
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
ActiveX-Steuerelemente (allg. Arbeitsschritte)
Anlegen eines oder mehrerer Steuerelemente • Entwurfsmodus wählen(!) • Steuerelement im Menü wählen • mit linker Maustaste auf dem Tabellenblatt Umriß zeichnen • evtl. weitere Steuerelemente anlegen
Bearbeiten eines Steuerelementes • z.B. mittels Doppelklick in den Code-Editor wechseln • im Eigenschaftenfenster Änderungen vornehmen • im Codefenster ggfs. Steuerelement wählen • gewünschtes Ereignis wählen und Routine schreiben
Verwenden eines Steuerelementes • Entwurfsmodus abwählen(!)
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
ActiveX-Steuerelemente in Excel
besitzen ein paar zusätzliche Eigenschaften, u.a. • LinkedCell Zelle, die aktuellen Wert aufnimmt • ListFillRange Zellen, die Listeninhalte vorgeben
manche Excel-Methoden sind in Ereignis-Routinen nicht verfügbar: Private Sub CommandButton1.Click Range("a1:a10").Sort Key1:=Range("a1") End Sub
Abhilfe: je nach Bedarf Tabellenzelle oder ActiveX-Steuer- element explizit aktivieren: Private Sub CommandButton1.Click Range("a1").Activate Range("a1:a10").Sort Key1:=Range("a1") CommandButton1.Activate End Sub
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
ActiveX-Steuerelemente in Excel
ActiveX-Steuerelemente per Programm hinzufügen ActiveSheet.OLEObjects.Add "Forms.CommandButton.1", _ Left:=10, Top:=10, Height:=20, Width:=100
ActiveX-Steuerelemente sind Bestandteil des Tabellenblattes: ActiveSheet.CommandButton1.Caption = "Click Me”
und zugleich OLE-Objekte ActiveSheet.OLEObjects(“CommandButton1”).Caption = "Click Me”
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
ActiveX-Steuerelemente: Labels
dienen der (statischen) Anzeige von
Texten (und Bildern), können aber
auch auf Mausklicks reagieren
wichtige Eigenschaften
• Name
• Caption, evtl. Picture
• Autosize
• Visible, evtl. BackStyle
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
ActiveX-Steuerelemente: Befehlsschaltflächen
dienen dem Anstoßen einer Aktion
wichtige Eigenschaften:
• Name
• Caption, evtl. Picture
• Enabled
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
ActiveX-Steuerelemente: Umschaltflächen
springen nach dem Anklicken nicht
sofort wieder zurück
wichtige Eigenschaften:
• Name
• Caption, evtl. Picture
• Enabled
• Value, LinkedCell
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
ActiveX-Steuerelemente: Drehfelder
Auswahl eines Wertes aus
einem numerischen Bereich
wichtige Eigenschaften:
• Name
• Orientation
• Enabled
• Value, LinkedCell
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
ActiveX-Steuerelemente: Texteingabefelder
für ein- oder mehrzeilige Text-
eingabe – manchmal auch Anzeige
wichtige Eigenschaften:
• Name
• MultiLine, Scrollbars
• Enabled, TextAlign, WordWrap
• Value oder Text, LinkedCell
• MaxLength, PasswordChar
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
für einfache Markierungen
wichtige Eigenschaften:
• Name
• Caption, TextAlign, evtl. WordWrap
• Enabled, evtl. Picture, Alignment
• evtl. TripleState
• Value, LinkedCell
ActiveX-Steuerelemente: Kontrollkästchen
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
für Auswahl aus einer statischen
Menge, keine Mehrfachauswahl
wichtige Eigenschaften:
wie Kontrollkästchen, zusätzlich
• GroupName
ActiveX-Steuerelemente: Optionsfelder
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Anzeige/Auswahl aus einer Liste
evtl. Mehrfachauswahl
wichtige Eigenschaften:
• Name
• ListStyle, MultiSelect, ListFillRange
• Enabled, IntegralHeight
• Text oder Value, LinkedCell
ActiveX-Steuerelemente: Listenfelder
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Füllen eines Listenfeldes
• aus Tabelle (ListFillRange)
• per Programm: ListBox.AddItem “neuer Eintrag”
Ermitteln der selektierten Werte
• bei Einfachselektion: ListBox.Value
• bei Mehrfachselektion:
for i = 0 to ListBox.ListCount – 1
if ListBox.Selected(i) then ...
next
Umgang mit Listenfeldern
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Löschen von Elementen eines Listenfeldes
ListBox.RemoveItem (index)
ListBox.Clear
Anzahl der Elemente eines Listenfeldes
ListBox.Count
Zugriff auf einzelne Listenelemente
ListBox.List (index)
Umgang mit Listenfeldern (Fortsetzung)
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Aufklappmenü (ggfs. editierbar!),
Einfachauswahl
wichtige Eigenschaften:
• Name
• Style(!)
• ListFillRange
• Text oder Value, LinkedCell
ActiveX-Steuerelemente: Kombinationsfelder
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
ActiveX-Steuerelemente: Grafiken
Anzeige einer (einfachen) Grafik
wichtige Eigenschaften:
• Name
• Picture, PictureAlignment,
• PictureSizeMode, PictureTiling
• SpecialEffect
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
ActiveX-Steuerelemente: Rollbalken
für (kontinuierliche) Auswahl
aus einem Zahlenbereich
wichtige Eigenschaften:
• Name
• Orientation
• Min/Max
• SmallChange/LargeChange
• Value, LinkedCell
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
VBA für Excel
Übungen
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Übungen
programmieren Sie eine Endlosschleife, starten Sie sie und brechen Sie sie ab
Nutzen Sie für die nächsten Übungen Formular-Steuerelemente
erstellen Sie ein Drehfeld für Monatsnamen verknüpfen Sie das Steuerelement dazu mit einem (unsichtba- ren) Tabellenfeld und reagieren Sie auf Benutzereingaben, in- dem Sie das Feld auslesen und den zugehörigen Monatsnamen in einem anderen Feld anzeigen
erstellen Sie einen Rollbalken (mit passendem Wertebereich) und verwenden Sie den vom Benutzer gewählten Wert als Palettenindex für die Hintergrundfarbe
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Übungen (Fortsetzung)
erstellen Sie ein Kontrollkästchen und lesen Sie den Wert aus
erstellen Sie mindestens 2 Optionsfelder, verknüpfen Sie diese mit demselben Tabellenfeld und lesen Sie den Wert aus
erstellen Sie ein Ausklappmenü für die Tage einer Woche
erstellen Sie eine (Auswahl-)Liste für die Monate eines Jahres
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Übungen (Fortsetzung)
Ab sofort sollten Sie ActiveX-Steuerelemente verwenden - achtenSie auf den Entwurfsmodus!
erstellen Sie einen Label und weisen Sie ihm per Programm einen Wert zu: schreiben Sie zu diesem Zweck eine Ereignis- behandlungsroutine, die bei jedem Klick auf den Label einen Zähler erhöht und diesen im Label selbst anzeigt
erstellen Sie ein Drehfeld für Monatsnamen: lesen Sie in der Ereignisbehandlungsroutine den aktuellen Wert aus und zeigen Sie den zugehörigen Monatsnamen an
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Übungen (Fortsetzung)
erstellen Sie einen Rollbalken (mit passendem Wertebereich) und verwenden Sie den vom Benutzer gewählten Wert als Palettenindex für die Hintergrundfarbe
erstellen Sie eine Umschaltfläche und setzen Sie diese nach zwei Sekunden per Programm zurück. Das Kommando für die Wartezeit lautet:
Application.Wait now() + TimeValue(„0:0:2“)
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Übungen (Fortsetzung)
erstellen Sie ein Kontrollkästchen und zeigen Sie dessen Wert in der Ereignisbehandlungsroutine an
erstellen Sie mindestens zwei Optionsfelder, weisen Sie diesen denselben Gruppennamen zu und finden Sie heraus, welches Optionsfeld zu einem gegebenen Zeitpunkt gesetzt ist
erstellen Sie ein Listenfeld mit Einfachauswahl, laden Sie dieses aus einer Tabellenzeile oder -spalte und zeigen Sie das jeweils selektierte Element an
erstellen Sie ein Listenfeld mit Mehrfachauswahl und füllen Sie dieses in Ihrem Programm, zeigen Sie die Selektion an
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Übungen (Fortsetzung)
erstellen Sie ein Aufklappmenü, füllen Sie dieses aus der Tabelle und zeigen Sie das ausgewählte Element an
erstellen Sie ein Texteingabefeld für max. 10 Zeichen und zeigen Sie den eingegebenen Text an
machen Sie daraus ein Feld für Paßworteingaben
beschränken Sie die eingebbaren Zeichen auf Ziffern
erstellen Sie ein mehrzeiliges Texteingabefeld und belegen Sie dieses mit „Bitte geben Sie hier Ihren Text ein“ vor. Zählen Sie die eingegebenen Zeichen
VBA für Excel 24.02.2010
Andreas Rozek HyMeSys Software & Consulting
Übungen (Fortsetzung)
erstellen Sie ein Bildanzeigefeld und simulieren Sie damit (op- tisch) eine Umschaltfläche
programmieren Sie „Vanity rückwärts“: lassen Sie einen Text eingeben (nur Buchstaben und Leerzeichen) und geben Sie auf Knopfdruck aus, welche Ziffern auf einer Telefontaste gedrückt werden müßten, um die betreffenden Zeichen zu erhalten
1 = 2 = ABC 3 = DEF4 = GHI 5 = JKL 6 = MNO7 = PQRS 8 = TUV 9 = WXYZ
0 = (Leerzeichen)