Hallo,
ich möchte in einem Modul Steuerelemente sowohl in einem Haupt, als auch in einem Unterformular ansprechen.
Das mache ich mit folgendem Code.
Public Sub MdlName(FormularName As String, _
SteuerelementName As String, _
Optional uFoName As String)
If Nz(uFoName, "") <> "" Then
With Forms(FormularName).Controls(uFoName)
.Controls(SteuerelementName) = "blah"
End With
Else
With Forms(FormularName)
.Controls(SteuerelementName).Caption = "blah"
End With
End If
End Sub
Nun will ich natürlich gerne etwas umfangreichere Dinge mit dem Unter- bzw. Hauptformular machen, deswegen wäre es schön, wenn man die Ausdrücke Forms(FormularName).Controls(uFoName) und Forms(FormularName) selbst in eine Variable schreiben könnte.
Wie wäre da die korrekte Schreibweise?
Gruß
Doming
Zitat von: Doming am September 26, 2025, 11:10:27deswegen wäre es schön, wenn man die Ausdrücke Forms(FormularName).Controls(uFoName) und Forms(FormularName) selbst in eine Variable schreiben könnte.
Wie wäre da die korrekte Schreibweise?
Dim Hfo as Form
Dim Ufo as Form
Set Hfo = Forms(FormularName)
Set Ufo = Hfo.Controls(uFoName).Form
Du kannst die Variablen auch spezifisch als die entsprechenden Formulare deklarieren:
Dim Hfo as Form_Hauptformularname
Dim Ufo as Form_Unterformularname
Die Zuweisung bleibt gleich.
Hallo Doming,
solche Dinge gehören üblicherweise nicht in ein Modul, sondern in eine Klasse oder in die Klasse hinter dem Formular.
Wenn überhaupt, übergibt man dann nicht den Formularnamen, sondern wie bei Objekten üblich, eine Referenz auf das Objekt selber.
Knobbi38
Zitat von: Knobbi38 am September 26, 2025, 13:23:55solche Dinge gehören üblicherweise nicht in ein Modul, sondern in eine Klasse oder in die Klasse hinter dem Formular.
Ich finde, die "Dinge" die passieren sind nicht spezifisch genug beschrieben, um das beurteilen zu können.
Ebend, dafür müsste es mehr als einen guten Grund für so einen Workflow geben. Aber du hast recht, dass kann man nicht beurteilen, weil die Beschreibung mehr als abstrakt ist. Zu "best practice" gehört das jedenfalls nicht.
ZitatNun will ich natürlich gerne etwas umfangreichere Dinge mit dem Unter- bzw. Hauptformular machen
Warum übergibst du dann nicht direkt eine Referenz?
Public Sub MdlName(hfo As Form, _
ctl As Control, _
Optional ufoctl As Control)