Microsoft Excel

Herbers Excel/VBA-Archiv

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

Dynamisch generierte TextBox und Klassenzuordnung

Betrifft: Dynamisch generierte TextBox und Klassenzuordnung von: Peter
Geschrieben am: 28.07.2014 08:15:34

Hallo alle zusammen,

ich arbeite gerade an einer UserForm bei der mehrere TextBoxen dynamisch generiert werden. Die Anzahl der TextBoxen ist variabel und unterscheidet sich je nach zuvor erfolgter Eingabe. Dies funktioniert bestens.
Jetzt möchte ich jedoch noch ein Change Ereignis den einzelnen TextBoxen hinzufügen. Da stoße ich jetzt aber mit meinem Latein an die Grenzen. Folgendes habe ich gemacht.

Klassenmodul: clsTextBox

Option Explicit
Public WithEvents cmdTextBox As MSForms.TextBox
Private m_objForm As Object

Private Sub Class_Terminate()
    Set cmdTextBox = Nothing
    Set m_objForm = Nothing
End Sub

Private Sub cmdTextBox_Change()

    MsgBox "Eingabe: " & m_objForm.Text

End Sub
Public Property Set Form(ByRef objForm As Object)
Set m_objForm = objForm

End Property

In der Userform steht folgendes:

Option Explicit
Dim clsTxt(80) As clsTextBox
Private Sub SName_Change()
Dim ctlTxt As MSForms.TextBox
Dim s As Integer
Dim BereichN As String

BereichN = "L20:CL53"

    Set ctlTxt.clsTxt = Me.Controls.Add("Forms.TextBox.1", "TB" & NrE, True)
        With Me.Controls("TB" & NrE)
            .Top = 5 + 20 * NrE
            .Left = 100
            .Width = 20
            .BackColor = &HC0E0FF
            If WorksheetFunction.VLookup(SID, Tabelle9.Range(BereichN), 37 + s, False) > -1  _
Then
                .Value = WorksheetFunction.VLookup(SID, Tabelle9.Range(BereichN), 37 + s, False) _

            Else
                .Value = ""
            End If

        End With


End Sub
Da ich mit Klassenprogrammierung bisher nur sehr wenig zu tun hatte und meist andere Lösungen fand, stehe ich damit etwas auf dem Kriegsfuß.
So wie ich es gemacht habe, erhalte ich in der Zeile mit "Set" einen Fehler.
Ich hoffe, ihr könnt mir Helfen!

Vielen Dank schon mal!
Peter

  

Betrifft: AW: Dynamisch generierte TextBox und Klassenzuordnung von: Nepumuk
Geschrieben am: 28.07.2014 09:09:51

Hallo,

was soll denn m_objForm sein? Das Userform selbst? Ein Userform hat keine Text-Eigenschaft.

Warum gibt es in deiner Klasse eine Set-Anweisung für das Userform aber nicht für die TextBox? Warum gibt es keine Get-Anweisung? Und wieso ist die TextBox-Eigenschaft in der Klasse öffentlich die des Userforms aber privat?

Wo und wie ist die Klasse im Userform-Modul deklariert? Wo und wie werden die Instanzen der Klasse erzeugt?

Warum machst du die VLookup-Methode 2mal? Warum nicht einmal und dann den Rückgabewert auswerten. Zudem, wenn die Methode nichts findet, dann gibt sie nicht -1 zurück sondern dem Fehler 2042 = CVErr(xlErrNA)

Als erste müssen wir mal klären was es mit m_objForm auf sich hat und wozu sie gut sein soll.

Gruß
Nepumuk


 

Beiträge aus den Excel-Beispielen zum Thema "Dynamisch generierte TextBox und Klassenzuordnung"