Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Gockel67 am Oktober 12, 2025, 11:17:31

Titel: Form löschen mit VBA
Beitrag von: Gockel67 am Oktober 12, 2025, 11:17:31
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
Titel: Re: Form löschen mit VBA
Beitrag von: Bitsqueezer am Oktober 12, 2025, 12:50:18
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
Titel: Re: Form löschen mit VBA
Beitrag von: Gockel67 am Oktober 12, 2025, 13:15:07
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
Titel: Re: Form löschen mit VBA
Beitrag von: Bitsqueezer am Oktober 12, 2025, 17:30:47
Hallo,

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

Oder eine der vielen anderen Beispiele dazu.

Gruß

Christian
Titel: Re: Form löschen mit VBA
Beitrag von: Gockel67 am Oktober 12, 2025, 18:16:50
Danke für deinen Hinweis. Das werde ich mir die Tage anschauen.
Titel: Re: Form löschen mit VBA
Beitrag von: Gockel67 am Oktober 13, 2025, 09:11:20
Hallo Christian,

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

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