Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Form löschen mit VBA

Begonnen von Gockel67, Oktober 12, 2025, 11:17:31

⏪ vorheriges - nächstes ⏩

Gockel67

Moin Gemeinde,

mit folgendem Code erzeuge ich mehrere Fenster um Bilder miteinander zu vergleichen:

Private Sub Button_Click()

    Dim FensterName As String

    FensterZaehler = FensterZaehler + 1
    FensterName = "Vergleich " & FensterZaehler
    DoCmd.CopyObject , FensterName, acForm, "Vergleich"
    DoCmd.OpenForm FensterName
   
   
End Sub

Die Fenster sollen allerdings nur temporär existieren und beim schließen wieder gelöscht werden.
Beim schließen selber geht das natürlich nicht.

Hat jemand eine Idee wie man das bewerkstelligen könnte?

Wünsche allen einen schönen Sonntag
Jörg

Bitsqueezer

Hallo,

keine gute Idee. Eine Anwendung sollte sich nicht selbst modifizieren (außer Du programmierst ein Addon für Developer).

Solcher Code wäre in einer Runtime auch nicht ausführbar.

Es ist viel einfacher: Statt DoCmd.OpenForm kannst Du ein beliebiges Formular einfach mehrfach öffnen, indem Du entsprechende Objektvariablen definierst. Solange diese existieren, bleibt das Formular geöffnet. Du kannst dann mit dem Schlüsselwort "New" immer weitere Formulare öffnen. Jedes ist komplett unabhängig, Du könntest also auch mehrere verschiedene Recordsets verwenden.

Es empfiehlt sich, einen Identifier zu erstellen, um ein bestimmtes Formular zu identifizieren, beispielsweise eine GUID. Das brauchst Du aber nur, wenn Du gezielt per VBA auf eine Instanz zugreifen willst.

Du kannst dann übrigens auch nicht mehr mit DoCmd.Close ein Formular schließen. Problem ist, daß Access eine "Forms"-Auflistung führt, in die alle geöffneten Formulare gestellt werden. Wenn Du Close verwendest, kannst Du zur Identifikation nur den Formularnamen angeben. Der ist aber für alle gleich, so daß Access mit Close und Formularnamen einfach die erste gefundene Instanz schließen würde.

Du mußt also das Formular auf versteckt stellen, die Formularvariable, die Dein Formular "leben" läßt", auf Nothing setzen und darauf hoffen, daß Access die Instanz irgendwann aus der Forms-Auflistung löscht.
Wenn man eine Collection verwendet, um alle Formularinstanzen zu speichern, kann man hier als Key eben den o.g. Identifier verwenden, so kannst Du ganz gezielt die passende Instanz aus der Collection holen und von dort entfernen.

Wie gesagt, nur notwendig, wenn Du per VBA bestimmte Formulare verwenden willst.

Gruß

Christian

Gockel67

Hallo Christian,
danke für deine ausführliche Antwort. Verstanden hab ich davon genau gar nix 😂
Hast du mal ein Beispiel dazu?
Schönen Sonntag
Jörg

Bitsqueezer

Hallo,

guckst Du hier:
https://www.youtube.com/watch?v=Zwt8cK94EHU

Oder eine der vielen anderen Beispiele dazu.

Gruß

Christian

Gockel67

Danke für deinen Hinweis. Das werde ich mir die Tage anschauen.

Gockel67

Hallo Christian,

Instanzen war das Stichwort was mir gefehlt hat. Es funktioniert. Vielen Dank.

Liebe Grüße und einen guten Wochenstart
Jörg