Programmieren mit Excel VBA Teil 2 Formulare als
Transcription
Programmieren mit Excel VBA Teil 2 Formulare als
Programmieren mit Excel VBA Teil 2 Formulare als Benutzerschnittstellen Peter K. Antonitsch HTBL Mössingerstr. 25 [email protected] Formulare VBA-Editor: Einfügen – User Form Peter K. Antonitsch Programmieren mit Excel VBA 1 SS 2002-2-2 Steuerelemente ... sind mit »Drag and Drop« einzufügen (Auswahl): Bezeichnungsfeld Textfeld Kontrollkästchen Rahmen Listenfeld Optionsfeld Befehlsschaltfläche Drehfeld Peter K. Antonitsch Programmieren mit Excel VBA SS 2002-2-3 Beispielformular hallo Peter K. Antonitsch Programmieren mit Excel VBA 2 SS 2002-2-4 Beispielformular: Code (1) Bemerkungen: • Das Drehfeld (mit Wertebereich 1 bis 6) wird mit einem Textfeld kombiniert; in diesem wird entsprechend dem Wert des Drehfeldes ein Eintrag aus dem global definierten Array »Liste(1 To 6)« angezeigt. • Die Initialisierung dieser Liste erfolgt beim Laden des Formulars über die Prozedur »UserForm_Initialize()«. • Das Aktualisieren der Textfeldanzeige erfolgt bei Änderung des Drehfeldwertes über die Prozedur »Spin~ Button1_Change()« • Auf die »Werte« der Steuerelemente wird über die Eigenschaft »Value« zugegriffen. Peter K. Antonitsch Programmieren mit Excel VBA SS 2002-2-5 Beispielformular: Code (2) Deklaration und Initialisierung von »Liste« (u.a.): Dim Liste(1 To 6) As String Private Sub UserForm_Initialize() Dim i As Integer For i = 1 To 6 Liste(i) = "Auswahl" & i Next OptionButton1.Value = True SpinButton1.Value = 1 TextBox2.Value = Liste(SpinButton1.Value) End Sub Peter K. Antonitsch Programmieren mit Excel VBA 3 SS 2002-2-6 Beispielformular: Code (3) Aktualisierung des Drehfeld-Textfeldes: Private Sub SpinButton1_Change() TextBox2 = Liste(SpinButton1.Value) End Sub Befehlsschaltfl.: Wert d. Eingabe-Textfeldes verarbeiten: Private Sub CommandButton1_Click() Dim ausgabe As String If TextBox1.Value = "" Then MsgBox ("Sie haben keinen Text eingegeben") Else MsgBox ("Ihre Eingabe: " & TextBox1.Value) End If Peter K. Antonitsch Programmieren mit Excel VBA SS 2002-2-7 Beispielformular: Code (4) Befehlsschaltfl.: Wert d. Optionsfeldgruppe verarbeiten: If OptionButton1 = True Then ausgabe = "A" ElseIf OptionButton2 = True Then ausgabe = "B" Else ausgabe = "C" End If MsgBox ("Ihre Optionsfeldwahl: Feld " & ausgabe) ausgabe = "" Peter K. Antonitsch Programmieren mit Excel VBA 4 SS 2002-2-8 Beispielformular: Code (5) Befehlsschaltfläche: Wert d. Kontrollkästchengruppe verarbeiten: If CheckBox1 = True Then ausgabe = ausgabe & "[A] " End If If CheckBox2 = True Then ausgabe = ausgabe & "[B] " End If If CheckBox3 = True Then ausgabe = ausgabe & "[C] " End If If ausgabe = "" Then MsgBox ("Sie haben kein Kontrollkästchen gewählt") Else MsgBox ("Gewählte Kontrollkästchen: " & ausgabe) End If Peter K. Antonitsch Programmieren mit Excel VBA SS 2002-2-9 Beispielformular: Code (6) Befehlsschaltfläche: Wert des Drehfeld-Textfeldes verArbeiten und das Formular ausblenden: MsgBox ("Sie haben über das Drehfeld " & TextBox2 & " gewählt!") Unload UserForm1 End Sub Peter K. Antonitsch Programmieren mit Excel VBA 5 SS 2002-2-10 Listenfelder hallo Peter K. Antonitsch Programmieren mit Excel VBA SS 2002-2-11 Listenfelder: Code (1) Initialisieren des Listenfeldes mit Prozedur: Sub Fülle_Liste With Eingabe_Demo_5.ListBox1 .RowSource = "" .AddItem "Jänner" .AddItem "Feber„ .... .AddItem "Dezember" End With End Sub Peter K. Antonitsch Programmieren mit Excel VBA 6 SS 2002-2-12 Listenfelder: Code (2) Wechsel zwischen Einfach- und Mehrfachauswahl über Optionsfeld-Methode »onClick«: Private Sub OB_einfach_Click() Eingabe_Demo_5.ListBox1.MultiSelect = fmMultiSelectSingle End Sub Private Sub OB_mehrfach_Click() Eingabe_Demo_5.ListBox1.MultiSelect = fmMultiSelectMulti End Sub Peter K. Antonitsch Programmieren mit Excel VBA SS 2002-2-13 Listenfelder: Code (3) Zugriff auf gewählte Listeneinträge: Private Sub CmdB_Auswahl_sichern_Click() Dim Startzeile, Spalte, i As Integer Spalte = 3: Startzeile = 3 For i = 0 To ListBox1.ListCount - 1 If ListBox1.Selected(i) Then Cells(Startzeile + i, Spalte).Value = ListBox1.List(i) End If Next i End Sub Peter K. Antonitsch Programmieren mit Excel VBA 7 SS 2002-2-14 Listenfelder: Code (4) Einfacherer Zugriff bei Listenfeldern m. Einfachauswahl: • ListBox1.ListIndex liefert den Index des gewählten Eintrags, • ListBox1.List(ListBox1.ListIndex ) demnach den gewählten Eintrag selbst. • Falls nichts ausgewählt wurde, ist .Listindex = –1 (dies gilt aber nur für Einfachauswahl!!!) Peter K. Antonitsch Programmieren mit Excel VBA 8 SS 2002-2-15 2 Ebenen Benutzerschnittstelle ↔ Funktionalität Formular als Benutzerschnittstelle Programm realisiert Funktionalität ... beide Ebenen sind von Bedeutung Peter K. Antonitsch Programmieren mit Excel VBA SS 2002-2-16 Formulare? Schüler wachsen mit »Windows Look and Feel« auf, Formulare schaffen daher eine vertraute Umgebung für die »Kommunikation« mit dem »Programm«. Formulare arbeiten ereignisgesteuert und sind so eine Vorstufe zur »wahren« Objektorientierung. Und: Formulare und Schaltknöpfe sind Objekte (mit Eigenschaften und Methoden) aus dem unmittelbaren Erfahrungsbereich des Schülers. • Das Formularkonzept findet sich (via HTML) auch bei (modernen) Web-Programmiersprachen (JScript, PHP ) • Aspekt der Datenvalidierung! • Formularerstellung macht Spaß. • • • • • • Peter K. Antonitsch Programmieren mit Excel VBA 9 SS 2002-2-17