Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender Navigationstipps
Textboxen mit Klassenmodul ansprechen
28.07.2008 08:08:00
Werner
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.

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Textboxen mit Klassenmodul ansprechen
28.07.2008 09:58:00
ChristianM
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

Anzeige
Sehr interessanter Code!
28.07.2008 10:19:00
Werner
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.

Anzeige
Funktioniert prima
29.07.2008 12:51:00
Werner
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.

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige