Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

With Forms .... vereinfachen?

Begonnen von Doming, September 26, 2025, 11:10:27

⏪ vorheriges - nächstes ⏩

Doming

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

PhilS

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.

Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Knobbi38

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

PhilS

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.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

Knobbi38

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.

Beaker s.a.

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)
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)