Das Archiv des Excel-Forums

Textboxen mit Klassenmodul ansprechen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
TextBox UserForm
Bild

Betrifft: Textboxen mit Klassenmodul ansprechen
von: Werner R.

Geschrieben am: 28.07.2008 08:08:49

meine VBA-Kenntnisse: befriedigend
Hallo liebe Freunde!
Versuche z.Zt. einen nach Haserodt abgewandelten Makro einzusetzen, um in zehn Textboxen einer
Userform namens "frmGross" ein Mousedown-Ereignis zu erzeugen, so dass der Makro den Inhalt
derjenigen Textbox, die ich mit der linken Maustaste anclicke, in die Zelle A2 der aktiven Tabelle
schreibt. Hierzu setze ich ein Klassenmodul ein. Leider funktioniert es nicht.
Name des Klassenmoduls: "CTB"
In diesem Klassenmodul befindet sich folgender Code:
Option Explicit
Dim WithEvents TB as MsForms.TextBox


Public Function Create(TextBox As MsForms.TextBox)  As Boolean
Set TB = TextBox
If Not TB Is Nothing Then create = True
End Function


'----------------------------------------------------------------


Private Sub TB_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, _
ByVal Y As Single)
[A2] = TB.Text
End Sub


Ferner habe ich im Initialize-Ereignis genannter Userform folgenden Code hinterlegt:


Public Sub Userform_Initialize()
Dim CTBS() As CTB
Dim item As Object
Dim i As Integer
i = -1
For Each item in frmGross.Controls
If TypeOf item Is MSForms.TextBox Then
i = i + 1
Redim Preserve CTBS(i)
Set CTBS(i) = New CTB
CTBS(i).Create item
End If
Next item
End Sub


Wenn ich mit der Maus in ein Textfeld der Userform clicke, passiert nichts. Woran mag das liegen?
(so ein Klassenmodul programmiere ich zum ersten Mal).
In einem zweiten Schritt möchte ich dem Makro noch beibringen, dass er nur bestimmte Textboxen mit
gleichem Namen, aber verschiedenem Index, ansprechen soll (z.B. "Textfeld1", "Textfeld2" usw.) Das
müsste doch mit einer If-Abfrage gehen, die ich irgendwie in das Klassenmodul einbaue?
Bin dankbar für jeden Hinweis! Werner R.

Bild

Betrifft: AW: Textboxen mit Klassenmodul ansprechen
von: ChristianM
Geschrieben am: 28.07.2008 09:58:51
Hallo Werner,
das Array CTBS musst du als Public in einem Standard-Modul deklarieren und nicht im Initialize-Ereignis der Userform. Ebenso kannst du auf Create im Klassenmodul verzichten.
Code in Standard-Modul:


Option Explicit
Public CTBS() As New CTB


Code in Userform:


Option Explicit
Private Sub UserForm_Initialize()
Dim oItem As Control
Dim i As Integer
For Each oItem In Me.Controls
If TypeName(oItem) = "TextBox" Then
i = i + 1
ReDim Preserve CTBS(1 To i)
Set CTBS(i).TB = oItem
End If
Next
End Sub


Code in Klassenmodul "CTB":


Option Explicit
Public WithEvents TB As MSForms.TextBox
Private Sub TB_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single,  _
ByVal Y As Single)
ActiveSheet.Range("A2") = TB.Text
End Sub

Gruß Christian

Bild

Betrifft: Sehr interessanter Code!
von: Werner R.

Geschrieben am: 28.07.2008 10:19:53
Hallo Christian,
vielen herzlichen Dank für deinen Code als Antwort auf meine Frage!! Ich werde ihn noch ausprobieren (habe Excel auf anderem Computer installiert) Da ich oft mit Textboxen arbeite, kann ich den Code wohl mehrmals einsetzen.
Endlich erhalte ich einmal einen ausführlichen Code zu den Klassenmodulen, zu denen ich bisher nicht
viel habe ausfindig machen können! Haserodt erklärt auf seiner Website Klassenmodule zwar ganz
gut, gibt aber kaum Beispiele.
Wenn dir ein Weg bekannt ist, wie man sich am besten in Klassenmodule einarbeitet, wäre ich für jeden weiterführenden Hinweis ebenfalls dankbar.
Werner R.

Bild

Betrifft: Funktioniert prima
von: Werner R.
Geschrieben am: 29.07.2008 12:51:30
Hallo ChristianM,
der Code, den ich inzwischen ausprobiert habe, funktioniert prima. Nochmals besten Dank!
Man kann ihn z.B. auch so abändern, dass sich z.B. die Schrift in mit der Maus angeclickten Textbox rot
färbt (mit TB.Forecolor = vbRed) Werner R.

 Bild

Excel-Beispiele zum Thema "Textboxen mit Klassenmodul ansprechen"

Neues Blatt hinzufügen und Klassenmodul-Code übernehmen download Alle CheckBoxes einer UserForm ansprechen download
Office-Assistenten ansprechen download Gruppe von UserForm-ListBoxes über eine Schleife ansprechen download
UserForm-ComboBoxes als Collection-Objekte ansprechen download