Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Will meine UserForm1 nicht Tumbuktu nennen
#1
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


Angehängte Dateien
.xls   008 Viewer Modulversion - Clever-Excel.xls (Größe: 60,5 KB / Downloads: 0)
Antworten Top
#2
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
Gruß Stefan
Win 10 / Office 2016
Antworten Top
#3
Hallo Stefan,

genau das wars wohl. Vielen Dank.
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste