Neuigkeiten:

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

Mobiles Hauptmenü

Fornm_Load - wann wird es ausgeführt?

Begonnen von Justitiar, Oktober 04, 2024, 14:30:19

⏪ vorheriges - nächstes ⏩

Justitiar

Beim Aufruf eines Formulars (1) werden die dem Ereignis Form_Load zugeordneten Anweisungen ausgeführt; im konkreten Fall geht es um die Verlinkung zweier Tabellen aus einer anderen DB. So weit OK. Jetzt wird ein weiteres Formular (2), das damit auch den Fokus erhält, aufgerufen; es werden weitere Operatonen ausgeführt.  Dann wird dieses Formular (2) geschlossen und der Fokus geht auf Formular (1) zurück. Ja, und jetzt werden offenbar die Formular (1) zu Form_Load zugeordneten Anweisungen erneut ausgeführt, so dass ich dann die verlinkten Tabellen mehrfach verlinkt habe, was ich natürlich nicht will.

Ich habe gedacht, Form_Load würde nur beim ersten Laden ausgeführt, was aber nicht der Fall zu sein scheint. Was mache ich falsch?

Wolfgang
 

Knobbi38

Hallo,

normalerweise wird Form_Load nur einmal ausgeführt. Wenn das bei dir mehrmals ausgeführt wird, dann wird das Formular auch mehrfach neu geöffnet und geladen, anstatt nur einfach zu aktivieren.

Dein Code stimmt also noch nicht mit dem gewünschten Workflow überein.

Gruß
Ulrich

PhilS

Zitat von: Justitiar am Oktober 04, 2024, 14:30:19Ja, und jetzt werden offenbar die Formular (1) zu Form_Load zugeordneten Anweisungen erneut ausgeführt, so dass ich dann die verlinkten Tabellen mehrfach verlinkt habe, was ich natürlich nicht will.
Generell ist es zwar richtig, dass Form_Load hier nicht mehrfach ausgeführt werden sollte, aber ich würde für eine solche Operation generell empfehlen, erst zu prüfen ob diese Tabellen bereits verknüpft sind und sie dann dann entweder erst löschen bevor sie erneut verknüpft werden, oder deinen erneuten Verknüpfungsversuch abzubrechen.

Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

markusxy

Zitat von: Justitiar am Oktober 04, 2024, 14:30:19Was mache ich falsch?

Ohne deinen Code zu kennen, kann man da wohl nur raten.
Es ist ja relativ beliebt, dass Fragende wesentliche Teile unterschlagen und alle mit ihren Fragen in die Irre führen.

Hondo

Hallo,
ein wenig "Spaghetti" programmiert - aber geht auch.
Lösen kannst du das mittels einer Krücke.
Erstelle in einem Modul eine globale Variable im Deklarationsteil (ganz oben):

Public FormLoadedTwice As Boolean
Im Formular im Ereignis Form_Load() schreibst du als erstes folgendes:

Private Sub Form_Load()
    If FormLoadedTwice Then
        FormLoadedTwice = False
        Exit Sub
    End If
    '... weiterer Code
End Sub

Sollte funktionieren.
Gruß Andreas

Knobbi38

@ Andreas:

Wenn überhaupt, würde man da eine instanzglobale Variable verwenden und keine externe, aber das ist eh vollkommen unnötig. Das Load Event wird für eine Instanz immer nur einmal aufgerufen, deshalb bringt das nichts. Bei einem mehrfachen Aufruf von Docmd.Openform für dasselbe Formular wird immer nur eine Formularinstanz geöffnet und wenn diese bereits geöffnet war, bekommt das Formular den Fokus, wird aber nicht neu geladen.

Für das verwalten von mehrere Instanzen eines Formulars wird anderer Code benötigt.

Wenn eine doppelte Initialisierung von Ressourcen vermieden werden soll, lagert man den Initialisierungscode in eine separate Prozedur aus und verwendet darin einen statische Variable, die beim Aufruf abgefragt wird, so wie in #2 bereits angedeutet.

Gruß Ulrich


Justitiar

Ja, ich habe es nach Vorschlag #2 gelöst.

Danke an alle.

Wolfgang