Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Textboxen mit Klassenmodul ansprechen

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.




  

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


  

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.


  

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.


 

Beiträge aus den Excel-Beispielen zum Thema "Textboxen mit Klassenmodul ansprechen"