none
alle offenen Formulare schließen?

    Frage

  • Hallo Allseits,

    mit:

    Public Function fctIsFormOpen(StrName As String) As Boolean
    'prüft, ob Fo offen ist
      fctIsFormOpen = (SysCmd(acSysCmdGetObjectState, acForm, StrName) > 0)
    End Function

    und dann mit:

    If fctIsFormOpen("Fo01Tab01BEListe") Then
             DoCmd.Close acForm, "Fo01Tab01BEListe", acSaveYes
    End If

    kann man ja sehr gut ggf. offene Fo schließen.

    Ich möchte nun folgendes umsetzen: Es sollen alle offenen Formulare geschlossen werden um danach wieder ein anderes zu öffnen.

    Also angenommen: es sind aktuell 5 Formulare offen, muss ja mit obigen Code jeder einzelne Name geprüft werden - bzw. die Prüfung mit der Funtion erfolgen - .

    Kommen neue dazu - darf man den Zusatz in der "Schließliste" nicht vergessen. Besser wäre es natürlich alle offenen  'mit einem Schlag' zu und dann kann ein anderes (dann also das Erste) wieder geöffnet werden.

    Geht so etwas?

    Danke für Eure Hilfe - Gruß Steffen

    Dienstag, 30. August 2011 13:06

Antworten

  • Hallo,

    Steffen Brose wrote:

    [...] alle offenen 'mit einem Schlag' zu

    Geht so etwas?

    Zunaechst, alle gleichzeitig schliessen ist nicht moeglich, es sei denn, du
    schliesst Access, aber selbst da werden geoeffnete Objekte von Access
    einzeln geschlossen.
    Ansonsten kann deine Vorgehensweise vereinfacht werden, weil alle
    geoeffneten Forms in der Forms-Collection enthalten sind. Du brauchst diese
    nur zu durchlaufen, allerdings rueckwaerts, da sich die Collection mit
    jedem geschlossenen Formular aendert:

    For I = Forms.Count -1 To 0 Step -1
      DoCmd.Close acForm, Forms(I).Name, acSaveYes
    Next I

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    • Als Antwort markiert Steffen Brose Dienstag, 30. August 2011 13:30
    Dienstag, 30. August 2011 13:22
    Moderator

Alle Antworten

  • Hallo,

    Steffen Brose wrote:

    [...] alle offenen 'mit einem Schlag' zu

    Geht so etwas?

    Zunaechst, alle gleichzeitig schliessen ist nicht moeglich, es sei denn, du
    schliesst Access, aber selbst da werden geoeffnete Objekte von Access
    einzeln geschlossen.
    Ansonsten kann deine Vorgehensweise vereinfacht werden, weil alle
    geoeffneten Forms in der Forms-Collection enthalten sind. Du brauchst diese
    nur zu durchlaufen, allerdings rueckwaerts, da sich die Collection mit
    jedem geschlossenen Formular aendert:

    For I = Forms.Count -1 To 0 Step -1
      DoCmd.Close acForm, Forms(I).Name, acSaveYes
    Next I

    Gruss - Peter


    Mitglied im http://www.dbdev.org
    FAQ: http://www.donkarl.com

    • Als Antwort markiert Steffen Brose Dienstag, 30. August 2011 13:30
    Dienstag, 30. August 2011 13:22
    Moderator
  • Hallo Peter,

    ich habe von 'Forms-Collection' zwar noch nie was gehört, aber: Es funktioniert wunderbar. Genau so habe ich es mir vorgestellt.

    Vielen Dank Dir dafür. 

    Gruß Steffen 

     

    Dienstag, 30. August 2011 13:30
  • Hallo Steffen

    Steffen Brose wrote:

    ich habe von 'Forms-Collection' zwar noch nie was gehört, aber: Es
    funktioniert wunderbar. Genau so habe ich es mir vorgestellt.

    Und wieder mal ein Tip:
    Schliesse mit acSaveNo, um das Aufblähen der FE zu verhindern. Sonst werden jeweils die Formulare gespeichert, wenn sich z.B. der Filter oder die Sortierung geändert hat.

    Noch besser ist, zu kontrollieren, ob das Formular allenfalls in der Entwurfsansicht geöffnet ist (geht mit dem gleichen Befehl) und dann zurückzufragen, bevor geschlossen wird, damit da nicht allfällige (Entwickler-)Anpassungen am Formular verloren gehen. Ja und natürlich: immer speichern, bevor das Formular in die Formularansicht geändert wird.

    Richtig perfekt wird es dann, wenn Du zuerst kontrollierst, ob es eine MDE ist. Dort kannst Du die Formulare immer mit acSaveNo schliessen, weil die ja wohl nicht geändert werden sollten.

    Gruss
    Henry

    Mittwoch, 31. August 2011 09:22
  • Hallo Henry, ich danke Dir für die Infos.

    Ich stelle mal gleich acSaveNo um.

    Gruß Steffen

     

    Mittwoch, 31. August 2011 09:33