Clever-Excel-Forum

Normale Version: Will meine UserForm1 nicht Tumbuktu nennen
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo und einen schönen Sonntag wünsch ich Euch,

habe folgendes Problem. Ich habe folgenden funktionierenden Code mit dem ich dynamisch eine Textbox in eine UserForm schreibe. Um einen modularen und recht allgemeingültigen Code zu haben, habe ich diese dynamische Textboxkonstruktion in ein Modul geschrieben und nicht in die Userform selbst.

In diesem Modul muss ich dazu diesen Befehl benutzen:
'Problemstelle, wie gehts allgemeiner?
Set objTextbox = UserForm1.Controls.Add("Forms.TextBox.1", i, True)

Der Name "UserForm1", ist mir dabei nicht allgemein genug. Denn nehme ich meinen Code und packe diesen in ein anderes Projekt rein und dort heißt die UserForm1 nicht mehr UserForm1, sondern Tumbuktu müßte ich meine ganzen Code  auf den neuen Namen Tumbuktu wieder anpassen. Da ich extrem faul bin, würde ich gerne wissen, wie ich hier allgemeiner formulieren könnte.

Anbei der gesamte Code zum Nachvollziehen  zum Download und in dieser Form:

UserForm1:
Code:
Sub UserForm_Initialize()
Range("A" & ActiveCell.Row).Select
'Aufruf der Funktion Konstruktion im Modul "Grundmodul" zwecks
'Konstruktion der Textbox
Konstruktion
End Sub
Grundmodul:
Code:
Option Explicit
Dim aCommands(200) As New clsButton
Sub Konstruktion()
Dim i As Integer, objTextbox As MSForms.TextBox
'Problemstelle, ist der Name der UserForm1, die
'Bezeichnung UserForm1 ist nicht allgemein genug
'Was mache ich wenn ich dieses Grundmodul in ein anderes
'Projekt einbaue, dann müßte ich den Namen UserForm1
'darin direkt an die Gegebenheiten anpassen.

Set objTextbox = UserForm1.Controls.Add("Forms.TextBox.1", i, True)

'Mit Me.Controls kann ich nur arbeiten, wenn dieser Code
'direkt in der UserForm stehen würde.
'Set obTextbox = Me.Controls.Add("Forms.TextBox.1", i, True)
objTextbox.Move 400, 200, 300, 100
Set aCommands(i).DasCmds = objTextbox
End Sub

Die Klasse:
Code:
Option Explicit
Public WithEvents DasCmds As MSForms.TextBox
Sub DasCmds_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
DasCmds.Text = "Mausklick grün, Fettschrift, probiere Doppelklick"
DasCmds.BackColor = vbGreen
DasCmds.Font.Bold = True
End Sub
Sub DasCmds_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
DasCmds.Text = "Doppelklick rot, probiere Einfachklick"
DasCmds.BackColor = vbRed
DasCmds.Font.Bold = False
End Sub
Hallo,

ich habe mir deine Datei nicht heruntergeladen aber versuchs mal so ähnlich

Userform1
Code:
Sub UserForm_Initialize()
Range("A" & ActiveCell.Row).Select
'Aufruf der Funktion Konstruktion im Modul "Grundmodul" zwecks
'Konstruktion der Textbox
Konstruktion Me
End Sub

allgemeines Modul
Code:
Sub Konstruktion(objUF As Object)
Dim i As Integer, objTextbox As MSForms.TextBox
'Problemstelle, ist der Name der UserForm1, die
'Bezeichnung UserForm1 ist nicht allgemein genug
'Was mache ich wenn ich dieses Grundmodul in ein anderes
'Projekt einbaue, dann müßte ich den Namen UserForm1
'darin direkt an die Gegebenheiten anpassen.

Set objTextbox = objUF.Controls.Add("Forms.TextBox.1", i, True)

'Mit Me.Controls kann ich nur arbeiten, wenn dieser Code
'direkt in der UserForm stehen würde.
'Set obTextbox = Me.Controls.Add("Forms.TextBox.1", i, True)
objTextbox.Move 400, 200, 300, 100
Set aCommands(i).DasCmds = objTextbox
End Sub
Hallo Stefan,

genau das wars wohl. Vielen Dank.