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