![]() |
Tipp 0171
|
Steuerelementgruppe erstellen (Userform)
|
 |
|
Autor/Einsender: Datum: |
|
Angie 08.01.2006 (Update) |
|
Entwicklungsumgebung: |
|
Excel 2000 |
|
|
In VBA hat jede TextBox auf einer UserForm seine eigenen Ereignisse, wie beispielsweise das Change- und KeyPress-Ereignis.
Das heißt, dass mehrere TextBoxen normalerweise nicht ein und die selbe Sub-Prozedur aufrufen können. Dieser Tipp zeigt, wie dies
doch möglich ist.
|
Zunächst wird ein Klassenmodul erstellt, hier mit Namen CTextBoxNum, und ein Objekt des Typs MSForms.TextBox deklariert:
|
|
|
Public WithEvents g_objTextBox As MSForms.TextBox
|
|
|
Nachdem das neue Objekt deklariert worden ist, erscheint es im Objekt-Dropdown-Listenfeld im Klassenmodul. Die für das Objekt gültigen Ereignisse
(z. B. das KeyPress-Ereignis) werden im Prozedur-Dropdown-Listenfeld aufgeführt.
|
In diesem Zusammenhang sei darauf hingewiesen, dass folgende TextBox-Ereignisse im Klassenmodul nicht zur Verfügung stehen:
|
- AfterUpdate
- BeforeUpdate
- Enter
- Exit
|
|
Code im Codebereich des Klassenmoduls CTextBoxNum |
|
|
Option Explicit
Public WithEvents g_objTextBox As MSForms.TextBox
Private Sub g_objTextBox_Change()
MsgBox "In der TextBox '" & g_objTextBox.Name & _
"' wurde eine Eingabe gemacht!"
End Sub
Private Sub g_objTextBox_KeyPress(ByVal KeyAscii As _
MSForms.ReturnInteger)
'Nur Eingabe von Zahlen in TextBox zulassen
Select Case KeyAscii
Case Asc("0") To Asc("9"), 8, 13
Case Else
KeyAscii = 0
End Select
End Sub
|
|
|
Bevor jedoch die Ereignis-Prozeduren ausgeführt werden können, muss das deklarierte Objekt im Klassenmodul mit dem TextBox-Objekt
auf der UserForm verbunden werden.
|
|
Code im Codebereich der UserForm |
|
|
Option Explicit
Private m_objTextBoxes() As New CTextBoxNum
Private Sub Init_TextBoxes()
Dim objCtl As Control
Dim nCnt As Integer
For Each objCtl In Me.Frame1.Controls
If TypeOf objCtl Is MSForms.TextBox Then
nCnt = nCnt + 1
ReDim Preserve m_objTextBoxes(1 To nCnt)
Set m_objTextBoxes(nCnt).g_objTextBox = objCtl
End If
Next objCtl
End Sub
Private Sub UserForm_Initialize()
Call Init_TextBoxes
End Sub
Private Sub UserForm_Terminate()
On Error Resume Next
Erase m_objTextBoxes
On Error GoTo 0
End Sub
|
|
|
|
|
|
Die im Download befindlichen *.frm- und *.cls-Dateien können in den unten angegebenen Anwendungen im VB-Editor importiert werden.
|
|
Windows-Version |
95 |
 |
|
98/SE |
 |
|
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 (20,4 kB)
|
Downloads bisher: [ 2386 ]
|
|
|