![]() |
|
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: [ 2396 ]
|
|
|