Tipp 0487
|
InputBox im eigenen Design
|
 |
|
Autor/Einsender: Datum: |
|
Angie 15.03.2006 |
|
Entwicklungsumgebung: |
|
Excel 2000 |
|
|
Die in VB/VBA integrierte InputBox-Funktion zeigt eine Eingabeaufforderung in einem Dialogfeld an, wartet auf die Eingabe eines Textes oder
auf das Klicken auf eine Schaltfläche und gibt einen Wert vom Typ String zurück, der den Inhalt des Textfeldes angibt. Weitere Infos
dazu können in der VB(A)-Hilfe, in der die InputBox-Funktion ausführlich beschrieben wird, nachgelesen werden.
|
Oftmals gewünscht ist jedoch eine InputBox im eigenen Design, wie beispielsweise die Farbgestaltung oder aber für die Eingabe statt
eines Eingabefeldes eine Liste zur Auswahl eines Elements anzuzeigen. Dies lässt sich ganz einfach mit einer UserForm verwirklichen.
|
|
Code im Codebereich der UserForm |
|
Um in einem Projekt nicht beliebig viele UserForms erstellen zu müssen und auch um ein bisschen Flexibilität zu gewährleisten, wurde in diesem
Beispiel der UserForm eine ComboBox hinzugefügt, dessen Eigenschaften entsprechend angepasst werden, je nachdem was im Argument
für den Default-Wert übergeben wird. Wird beim Initialisieren der UserForm ein Datenfeld übergeben, wird die ComboBox
mit der Liste zur Auswahl eines Elements angezeigt, andernfalls werden die Eigenschaften so gesetzt, dass die ComboBox einer TextBox
zum Verwechseln ähnlich sieht und eine Eingabe möglich ist.
|
Damit ggf. geänderte Eigenschaften von Steuerelementen nachvollzogen werden können, werden diese soweit möglich zur Laufzeit gesetzt, hier im
UserForm_Initialize-Ereignis und in der Prozedur gInit.
|
In diesem Beispiel werden Titel der UserForm, Meldung und der Default-Wert der Initialisierungsprozedur als Argumente übergeben. Für die Rückgabe, ob der
Anwender den Dialog abgebrochen hat oder nicht und der vom Anwender gemachten Eingabe, werden anstelle von Public-Variablen Property-Prozeduren
verwendet. Weitere Infos dazu können unter Schreiben einer Property-Prozedur in der VB(A)-Hilfe nachgelesen werden.
|
|
|
Option Explicit
Private m_blnInit As Boolean
Private m_strInput As String
Private m_blnCancel As Boolean
Public Sub gInit(ByVal strPrompt As String, ByVal strTitle _
As String, Optional ByRef varDefault As Variant)
With Me
If Len(strTitle) <> 0 Then
.Caption = strTitle
Else
.Caption = Application.Name
End If
.lblPrompt = strPrompt
If IsArray(varDefault) Then
With .cboInput
.Style = fmStyleDropDownList
.List = varDefault
End With
Erase varDefault
Else
With .cboInput
.Style = fmStyleDropDownCombo
.ShowDropButtonWhen = fmShowDropButtonWhenNever
If Not IsMissing(varDefault) Then
.Text = varDefault
Else
.Text = ""
End If
.SelStart = 0
.SelLength = Len(.Text)
End With
End If
.cboInput.SetFocus
End With
m_blnInit = True
End Sub
Public Property Get gInput() As String
gInput = m_strInput
End Property
Public Property Get gCancel() As Boolean
gCancel = m_blnCancel
End Property
Private Sub UserForm_Initialize()
With Me
.cmdCancel.Cancel = True
.cmdOK.Default = True
End With
End Sub
Private Sub UserForm_Activate()
If Not m_blnInit Then Unload Me
End Sub
Private Sub cmdOK_Click()
m_blnCancel = False
m_strInput = Me.cboInput.Text
Me.Hide
End Sub
Private Sub cmdCancel_Click()
m_blnCancel = True
Me.Hide
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, _
CloseMode As Integer)
If CloseMode = vbFormControlMenu Then
Cancel = True
cmdCancel_Click
End If
End Sub
|
|
|
Code im Codebereich eines Moduls |
|
In der folgenden Funktion, in der der Aufruf der UserForm "gekapselt" ist, wird der Dialog mit dem Eingabe-/Auswahlfeld angezeigt und die Rückgabe
ausgewertet. Als Argumente werden Titel der UserForm, Meldung und der Default-Wert für die ComboBox übergeben. Als Default-Wert kann entweder
ein Text (String) oder ein Datenfeld übergeben werden, die Eigenschaften der ComboBox werden in der Initialisierungsprozedur im Codebereich
der UserForm entsprechend angepasst.
|
Wird der angezeigte Dialog mit dem Button 'OK' geschlossen, gibt die Funktion sowohl True als auch den im Eingabefeld enthaltenen Text im Argument
varDefault zurück.
Die Funktion gibt False zurück, wenn der Anwender den Dialog mit dem Button 'Abbrechen', der Esc-Taste, dem Schließen-'X' oder der Tastenkombination
Alt+F4 abbricht.
|
|
|
Option Explicit
Public Function InputBoxExt(ByVal strPrompt As String, _
Optional ByVal strTitle As String, _
Optional ByRef varDefault As Variant) As Boolean
Dim frmInputBox As FrmInputBoxExt
Dim blnOK As Boolean
Set frmInputBox = New FrmInputBoxExt
With frmInputBox
.gInit strPrompt, strTitle, varDefault
.Show
DoEvents
blnOK = (Not .gCancel)
If blnOK Then
varDefault = .gInput
End If
End With
Unload frmInputBox
Set frmInputBox = Nothing
InputBoxExt = blnOK
End Function
|
|
|
|
Die obige Funktion InputBoxExt() kann an beliebigen Stellen im VBA-Projekt mit verschiedenen Titeln, Meldungen und Default-Werten aufgerufen werden, ähnlich der in
VB/VBA-integrierten InputBox-Funktion.
|
Wie bereits geschrieben, kann der Funktion, in der der Aufruf der UserForm "gekapselt" ist, entweder ein Text (String) oder ein Datenfeld übergeben
werden. Es sind dafür weder im Codebereich der UserForm noch in der obigen Funktion Änderungen notwendig.
|
Beispiel 1: Funktion ohne Listenauswahl aufrufen
|
|
|
Public Sub Demo_GetUserInput_1()
Const cMsgTitle As String = _
"VB-fun-Demo - InputBox im eigenen Design"
Dim blnRetVal As Boolean
Dim varDefault As Variant
varDefault = "VB-fun"
blnRetVal = InputBoxExt("Bitte geben Sie einen Namen ein:", _
cMsgTitle, varDefault)
If blnRetVal = True Then
If Len(varDefault) > 0 Then
MsgBox "Eingabe im Textfeld:" & vbCrLf & varDefault, _
vbInformation, cMsgTitle
Else
MsgBox "Es wurden keine Eingaben im Textfeld " & _
"gemacht, aber die Schaltfläche 'OK' gewählt!", _
vbInformation, cMsgTitle
End If
End If
End Sub
|
|
|
Beispiel 2: Funktion mit Listenauswahl aufrufen
|
|
|
Public Sub Demo_GetUserInput_2()
Const cMsgTitle As String = _
"VB-fun-Demo - InputBox im eigenen Design"
Dim blnRetVal As Boolean
Dim varDefault As Variant
varDefault = Array("Äpfel", "Bananen", "Birnen")
blnRetVal = InputBoxExt("Bitte wählen Sie einen Artikel aus:", _
cMsgTitle, varDefault)
If blnRetVal = True Then
If Len(varDefault) > 0 Then
MsgBox "Auswahl in Listenfeld:" & vbCrLf & varDefault, _
vbInformation, cMsgTitle
Else
MsgBox "Es wurde nichts ausgewählt, aber die " & _
"Schaltfläche 'OK' geklickt!", vbInformation, _
cMsgTitle
End If
End If
End Sub
|
|
|
|
|
|
Die im Download befindlichen *.frm- und *.bas-Dateien können in den unten angegebenen Anwendungen im VB-Editor importiert werden.
|
|
Windows-Version |
95 |
 |
|
98 |
 |
|
ME |
 |
|
NT |
 |
|
2000 |
 |
|
XP |
 |
|
Vista |
 |
|
Win
7 |
 |
|
|
Anwendung/VBA-Version |
Access 97 |
 |
Access 2000 |
 |
Access XP |
 |
Access 2003 |
 |
Access 2007 |
 |
Access 2010 |
 |
|
Excel 97 |
 |
Excel 2000 |
 |
Excel XP |
 |
Excel 2003 |
 |
Excel 2007 |
 |
Excel 2010 |
 |
|
Word 97 |
 |
Word 2000 |
 |
Word XP |
 |
Word 2003 |
 |
Word 2007 |
 |
Word 2010 |
 |
|
PPT 97 |
 |
PPT 2000 |
 |
PPT XP |
 |
PPT 2003 |
 |
PPT 2007 |
 |
PPT 2010 |
 |
|
Outlook 97 |
 |
Outlook 2000 |
 |
Outlook XP |
 |
Outlook 2003 |
 |
Outlook 2007 |
 |
Outlook 2010 |
 |
|
|
|
Download (30,2 kB)
|
Downloads bisher: [ 1584 ]
|
|
|