Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA: Textbox mit Change-Event dynamisch erstellen

VBA: Textbox mit Change-Event dynamisch erstellen
24.03.2017 14:08:18
Bernd
Servus zusammen,
eine Frage an die Profis:
Kann ich bei der Initialisierung einer Userform TextBoxen erstellen und dahinter auch gleich das Change-Event per Makrocode hinterlegen? Der zu hinterlegende Code ist immer gleich.
Ich lasse per Schleife meine Userform dynamisch mit TextBoxen befüllen

For i = 1 to intLS
' Textbox
Set objTextbox = Me.Frame1.Controls.Add("Forms.Textbox.1", , True)
With objTextbox
.Name = "Textbox" & i
.Top = (i - 6) * 20
.Left = 405
.Height = 15
.Width = 100
End With
' Textbox Ende
next i

Bei der Integration des Change-Events stoße ich aber immer auf Fehlermeldungen 438 "Objekt unterstützt diese Eigenschaft nicht"
Mein Ansatz:

For i = 1 to intLS
' Textbox
Set objTextBox = Me.Frame1.Controls.Add("Forms.Textbox.1", , True)
With objTextBox
.Name = "Textbox" & i
.Top = (i - 6) * 20
.Left = 405
.Height = 15
.Width = 100
' Versuch VBA-Code durch VBA erstellen
Dim VBC As Object
Dim LineNr As Integer
With ThisWorkbook.VBProject.VBComponents(UserForm1.Frame1.objTextBox).CodeModule
LineNr = .CreateEventProc("Change", "Textbox" & i)
.InsertLines LineNr + 1, " "
.InsertLines LineNr + 2, "Me.Textbox2.SetFocus"
End With
' Versuch VBA-Code durch VBA erstellen ENDE
End With
' Textbox
next i

Danke und Grüße, Bernd
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA: Textbox mit Change-Event dynamisch erstellen
24.03.2017 14:59:55
EtoPHG
Hallo Bernd,
Das geht mit Klassenprogrammierung!
Gruess Hansueli
AW: VBA: Textbox mit Change-Event dynamisch erstellen
27.03.2017 08:43:00
Bernd
Hallo Hansueli,
vielen Dank für den Hinweis. Ich habe mich an der Programmierung der Klasse versucht, komme jedoch auf keinen grünen Zweig. :-(
Kannst du mir vielleicht meinen Fehler erklären?
Mein Code der Userform:

For i = 1 to intLS
' Versuch über Klassenprogrammierung
Dim oMeineTextBox As clsTextBox
Set oMeineTextBox = New clsTextBox
Set oMeineTextBox = Me.Frame1.Controls.Add("Forms.Label.1", , True)
With oMeineTextBox
.Name = "Scanfeld" & i
.Top = (i - 6) * 20
.Left = 405
.Height = 15
.Width = 100
End With
Set oMeineTextBox = Nothing
' Versuch über Klassenprogrammierung ENDE
next i
Meine Klasse clsTextBox:

Option Explicit
Public WithEvents objTextBox As MSForms.TextBox
Private Sub objTextBox_Change()
Me.TextBox2.Value = ""
Me.TextBox2.SetFocus
End Sub
Danke und Grüße, Bernd
Anzeige
AW: VBA: Textbox mit Change-Event dynamisch erstellen
27.03.2017 17:24:26
Bernd
Servus,
als Hilfestellung für Forumsmitglieder, die vielleicht auch mal dieses Problem haben könnten;
nach etwas Recherche bin ich auf der folgenden Seite gelandet
http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/tipps/tip0171.shtml
und ich konnte meine Problemstellung damit lösen.
Grüße, Bernd
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Dynamisches Erstellen von VBA-TextBoxen mit Change-Event


Schritt-für-Schritt-Anleitung

Um TextBoxen in einer Userform dynamisch zu erstellen und das Change-Event zu integrieren, befolge diese Schritte:

  1. Userform vorbereiten: Öffne die Userform, in der du die TextBoxen erstellen möchtest.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Code in die Userform einfügen: Füge den folgenden VBA-Code in das Code-Fenster deiner Userform ein:

    For i = 1 To intLS
       ' Textbox erstellen
       Set objTextBox = Me.Frame1.Controls.Add("Forms.Textbox.1", , True)
       With objTextBox
           .Name = "Textbox" & i
           .Top = (i - 6) * 20
           .Left = 405
           .Height = 15
           .Width = 100
       End With
    
       ' Change-Event hinzufügen
       Dim VBC As Object
       Dim LineNr As Integer
       With ThisWorkbook.VBProject.VBComponents(UserForm1.Frame1.objTextBox).CodeModule
           LineNr = .CreateEventProc("Change", "Textbox" & i)
           .InsertLines LineNr + 1, "Me.Textbox" & i & ".Value = """""
           .InsertLines LineNr + 2, "Me.Textbox" & i & ".SetFocus"
       End With
    Next i
  4. Code anpassen: Stelle sicher, dass die Variable intLS die Anzahl der TextBoxen festlegt, die du erstellen möchtest.


Häufige Fehler und Lösungen

  • Fehler 438: „Objekt unterstützt diese Eigenschaft nicht“: Dieser Fehler tritt häufig auf, wenn du versuchst, ein Event für ein Objekt zu erstellen, das es nicht unterstützt. Stelle sicher, dass du die richtige Referenz für das TextBox-Objekt verwendest.

  • TextBox erscheint nicht: Überprüfe, ob die TextBoxen in einem Container (z. B. Frame) erstellt werden. Stelle sicher, dass der Container sichtbar ist.


Alternative Methoden

Falls das dynamische Erstellen von TextBoxen über Code nicht funktioniert, kannst du auch Klassenmodul verwenden. Hier ist eine kurze Anleitung:

  1. Klassenmodul erstellen: Erstelle ein neues Klassenmodul (z. B. clsTextBox).

  2. Code für die Klasse:

    Option Explicit
    Public WithEvents objTextBox As MSForms.TextBox
    
    Private Sub objTextBox_Change()
       Me.TextBox2.Value = ""
       Me.TextBox2.SetFocus
    End Sub
  3. Instanziierung in der Userform:

    Dim oMeineTextBox As clsTextBox
    Set oMeineTextBox = New clsTextBox
    Set oMeineTextBox.objTextBox = Me.Frame1.Controls.Add("Forms.Textbox.1", , True)

Praktische Beispiele

Hier ist ein einfaches Beispiel für die Implementierung des Change vba-Events:

Private Sub UserForm_Initialize()
   Dim i As Integer
   For i = 1 To 5
       Dim newTextBox As MSForms.TextBox
       Set newTextBox = Me.Controls.Add("Forms.TextBox.1", "textbox" & i)
       newTextBox.Top = i * 20
       newTextBox.Left = 10
       newTextBox.Width = 100
   Next i
End Sub

In diesem Beispiel werden fünf TextBoxen erstellt. Du kannst das textbox change event vba hinzufügen, indem du die oben genannten Schritte befolgst.


Tipps für Profis

  • Verwendung von WithEvents: Nutze WithEvents, um auf Events der dynamisch erstellten TextBoxen zuzugreifen.
  • Fehlerprotokollierung: Implementiere eine Fehlerprotokollierung, um Probleme bei der Erstellung von TextBoxen zu identifizieren.
  • Modularität: Teile deinen Code in separate Subroutinen oder Funktionen auf, um die Lesbarkeit und Wartbarkeit zu erhöhen.

FAQ: Häufige Fragen

1. Kann ich TextBoxen auch für andere Events verwenden?
Ja, du kannst auch andere Events wie Click oder KeyPress für die TextBoxen verwenden. Das Vorgehen ist ähnlich wie beim Change-Event.

2. Funktioniert dies in allen Excel-Versionen?
Die beschriebenen Methoden funktionieren in Excel-Versionen, die VBA unterstützen, wie Excel 2010 und neuer.

3. Was ist der Unterschied zwischen Forms.TextBox und ActiveX TextBox?
Forms.TextBox ist ein einfaches Steuerelement, das in UserForms verwendet wird, während ActiveX TextBox mehr Funktionen bietet und direkt in Excel-Arbeitsblätter eingezogen werden kann.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige