none
VBA-Zugriff auf von MS Access generiertes Filterentwurfsformular

    Frage

  • Guten Tag,

    der Fragetitel ist leider konfus, da ich den genauen Begriff nicht kenne, daher versuche ich hier genauer zu beschreiben.

    Wenn man in einem Formular (in meinem Fall ein gebundenes Endlosformular) aus dem Menü
    Datensätze den Unterpunkt "Filter/Sortierung bearbeiten" wählt, erhält man ein von MS Access generiertes "Abfrageformular", welches mit dem Namen des Formulares beginnt, zu dessen Kontext es gehört und den Zusatz "Filter1 : Filter" angehängt bekommt.

    Ich möchte nun lediglich prüfen, ob dieses von Access generierte Filterformular schon geöffnet ist oder nicht. Geht dies mit Access Bordmitteln?

    Danke.

    Mittwoch, 8. April 2015 16:37

Antworten

  • Welche Access Version verwendest du? Ich nehme an, dass du vom Abfrage-Gitter sprichst, das geöffnet wird, wenn man auf dem Start-Menü in der Gruppe "Sortieren und Filtern" im Untermenü "Erweitert..." auf "Spezialfilter/Sortierung..." klickst. Dann kannst Du prüfen

    If SysCmd(acSysCmdGetObjectState, acQuery,"frm_DeinFormularFilter1") <> 0 Then
       ' Der Filter ist geöffnet
    End If
    Ein Problem bleibt: Manchmal hat das Abfrage-Gitter auch den Namen "frm_DeinFormularFilter2" etc. und ich sehe im Moment nicht, wo man den korrekten Namen herbekommt. Es können gleichzeitig auch mehrere solcher Filter-Abfragen offen sein.

    Ich schlage daher vor, dass du die Spezialfilter/Sortierung mit einem eigenen Button öffnest mit

    DoCmd.RunCommand acCmdAdvancedFilterSort
    Matthias Kläy, Kläy Computing AG

    • Als Antwort markiert Thoma Donnerstag, 9. April 2015 12:36
    Donnerstag, 9. April 2015 09:41

Alle Antworten

  • Welche Access Version verwendest du? Ich nehme an, dass du vom Abfrage-Gitter sprichst, das geöffnet wird, wenn man auf dem Start-Menü in der Gruppe "Sortieren und Filtern" im Untermenü "Erweitert..." auf "Spezialfilter/Sortierung..." klickst. Dann kannst Du prüfen

    If SysCmd(acSysCmdGetObjectState, acQuery,"frm_DeinFormularFilter1") <> 0 Then
       ' Der Filter ist geöffnet
    End If
    Ein Problem bleibt: Manchmal hat das Abfrage-Gitter auch den Namen "frm_DeinFormularFilter2" etc. und ich sehe im Moment nicht, wo man den korrekten Namen herbekommt. Es können gleichzeitig auch mehrere solcher Filter-Abfragen offen sein.

    Ich schlage daher vor, dass du die Spezialfilter/Sortierung mit einem eigenen Button öffnest mit

    DoCmd.RunCommand acCmdAdvancedFilterSort
    Matthias Kläy, Kläy Computing AG

    • Als Antwort markiert Thoma Donnerstag, 9. April 2015 12:36
    Donnerstag, 9. April 2015 09:41
  • Welche Access Version verwendest du? Ich nehme an, dass du vom Abfrage-Gitter sprichst, das geöffnet wird, wenn man auf dem Start-Menü in der Gruppe "Sortieren und Filtern" im Untermenü "Erweitert..." auf "Spezialfilter/Sortierung..." klickst. Dann kannst Du prüfen

    If SysCmd(acSysCmdGetObjectState, acQuery,"frm_DeinFormularFilter1") <> 0 Then
       ' Der Filter ist geöffnet
    End If
    Ein Problem bleibt: Manchmal hat das Abfrage-Gitter auch den Namen "frm_DeinFormularFilter2" etc. und ich sehe im Moment nicht, wo man den korrekten Namen herbekommt. Es können gleichzeitig auch mehrere solcher Filter-Abfragen offen sein.

    Ich schlage daher vor, dass du die Spezialfilter/Sortierung mit einem eigenen Button öffnest mit

    DoCmd.RunCommand acCmdAdvancedFilterSort
    Matthias Kläy, Kläy Computing AG

    Hallo Mathias,

    vielen Dank für den Tipp. Ich verwende Access 2000. Und wenn ich von dem von "Access generierten Abfrageformular" spreche, meine ich das Ding, welches Du als "Abfrage-Gitter" bezeichnest ;-)

    Ich weiß echt nicht, wie man das Teil richtig bezeichnen soll.

    Erstaunlich ist für mich, dass es mittels SysCmd Methode erreichbar ist. Ich hatte mir zwischenzeitlich schon die Mühe gemacht per API alle offenen Fenstertitel abzufragen, was natürlich absoluter Overkill ist.

    Per Containers-Auflistung, per QueryDefs oder über die Systemtabellen direkt wird man übrigens nicht fündig!

    Zu dem Problem was bei Dir bleibt: DeinFormularFilter2 ..

    gibt es folgende Lösung:

    Durchläuft man die QueryDefs-Auflistung bzw. schaut in die Access Systemtabelle mSysObjects, dann sieht man dass dort schon ein Eintrag unter "DeinFormularFilter1" existiert (ohne dass dieser Eintrag im Datenbankfenster angezeigt wird). MS Access scheint dann ++1 zu inkrementieren.

    Danke für den Tipp

    Donnerstag, 9. April 2015 12:36
  • Ich weiß echt nicht, wie man das Teil richtig bezeichnen soll.

    Ich denke, dass das einfach eine Abfrage in der Entwurfsansicht ist.

    Ich habe sie jetzt auch in den QueryDefs gefunden, aber erst nach einem QueryDefs.Refresh.

    Ich habe das übrigens in Access 2010 angeschaut.

    Matthias Kläy, Kläy Computing AG

    Freitag, 10. April 2015 08:44