Neuigkeiten:

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

Mobiles Hauptmenü

Navigationssteuerelement: BrowseTo muss beim ersten Mal 2x aufgerufen werden

Begonnen von Monti, Juli 14, 2012, 18:07:55

⏪ vorheriges - nächstes ⏩

Monti

Tach auch,

heute habe ich ein seltsames Verhalten beim erstmaligen aufrufen eines Tabs mittels DoCmd.BrowseTo-Methode entdeckt, wofür ich keine Lösung finde ausser die BrowseTo-Anweisung zweimal aufzurufen.

Und zwar habe ich ein Navigationssteuerlement in meinem Hauptformular mit 3 Tabs (Tab1, Tab2, Tab3).
Beim aufrufen des Hauptformulars wird automatisch Tab1 geladen und angezeigt.
In Tab1 (bzw. dem damit verbundenen Unterformular) befindet sich ein Button der in seiner Ereignisprozedur u.a. eine BrowseTo-Anweisung enthällt die einen Tab-Wechsel zu Tab2 initiert und dort den Fokus auf ein Listenfeld setzt.

DoCmd.BrowseTo ObjectType:=acBrowseToForm, _
    ObjectName:="frmMainTab2", _
    DataMode:=acFormEdit
Forms!frmMain!frmSubMain.Form!lstObjects.SetFocus


Wenn ich diesen Button das erstemal betätige (egal ob ich vorher schon einmal auf Tab2 gewechselt bin und dort andere Elemente aufgerufen habe) bekomme ich eine Fehlermeldung:
Zitat
Laufzeitfehler '2465':

Microsoft Access kann das in Ihrem Ausdruck angesprochene Feld 'lstObjects' nicht finden.

Wenn ich dieses Meldungsfenster über "Beenden" schliesse und danach den selben Button erneut anklicke funktioniert alles wie gewohnt, ich kann zwischen den Tabs hin und her Wechseln und so oft ich lustig bin darauf klicken - es funktioniert ab dem zweiten Mal.

Lasse ich die .SetFocus-Anweisung weg wird zwar keine Fehlermeldung ausgegeben, aber auch nicht der Inhalt von Tab2 im Navigationssteuerelement Subform angezeigt, obwohl die Schaltflächen für Tab1 und Tab2 die Farben wechseln als hätte ich tatsächlich draufgeklickt und würde mich nun in Tab2 befinden...

Als Workaround lasse ich einfach die BrowseTo-Anweisung in der Prozedur zweimal hintereinander ausführen:

DoCmd.BrowseTo ObjectType:=acBrowseToForm, _
    ObjectName:="frmMainTab2", _
    DataMode:=acFormEdit
DoCmd.BrowseTo ObjectType:=acBrowseToForm, _
    ObjectName:="frmMainTab2", _
    DataMode:=acFormEdit

Forms!frmMain!frmSubMain.Form!lstObjects.SetFocus

und siehe da - es funktioniert direkt ohne irgendeine Fehlermeldung?!?

Ist irgendjemand mit der BrowseTo Methode vertraut und kann mir dieses Verhalten erklären oder mir einen Rat geben wo ich ansetzen kann um dem Problem auf die schliche zu kommen?

Gruß,
Monti




Beaker s.a.

Hallo Monti,
Versuch' mal zuerst den Fokus auf das UFo zu setzen,
und dann erst auf die Liste.
Also:
DoCmd.BrowseTo ObjectType:=acBrowseToForm, _
    ObjectName:="frmMainTab2", _
    DataMode:=acFormEdit
Forms!frmMain!frmSubMain.SetFocus
Forms!frmMain!frmSubMain.Form!lstObjects.SetFocus

(Siehe auch http://www.donkarl.com?FAQ4.2 )
hth
gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

Monti

Hi Ekkehard,

danke für deinen Vorschlag, aber leider funktioniert das auch nicht - gleicher Fehler, gleiches Verhalten, gleiches Ergebnis...

Ich glaube, dass es irgendetwas mit der BrowseTo-Methode in Kombination mit dem Navigationssteuerelement als solches und der Aktualisierung/dem Laden des UFOs zu tun haben muss. Denn, wie ja beschrieben, sieht es so aus, als würde der Wechsel initiiert (Schaltflächen ändern sich), aber einfach nicht der Formularinhalt (Vor-)geladen werden.
Ausserdem läuft ja ab dem 2. Mal alles wie es soll sobald wenigstens einmal die BrowseTo Anweisung ausgeführt wurde...

Oder kann es vielleicht sein, dass es sich dabei um einen Bug in der BrowseTo-Methode handelt?!?

Gruß,
Monti

[EDIT]
Ich habe den Workaround nochmal abgeändert indem ich einfach den Fehler beim ersten aufrufen mittels Errorhandler abfange:

On Error GoTo ErrorHandler
ErrorHandler:
DoCmd.BrowseTo ObjectType:=acBrowseToForm, _
    ObjectName:="frmMainTab2", _
    DataMode:=acFormEdit
Forms!frmMain!frmSubMain.Form!lstObjects.SetFocus

[/EDIT]

DF6GL

Hallo,

lad die DB mal hier hoch...(datenreduziert und gezippt)  und erkläre die Access-Version...


Monti

Hallo,

komisch, komisch...

Ich habe in Access eine neue Test Datenbank erstellt um die hier hoch zu laden, dabei habe ich eine Sicherungskopie der Original Datenbank erstellt und seltsamer Weise funktioniert es jetzt auf einmal - sogar in der unveränderten älteren Datenbankkopie?!?!?!?!?!?!?!?!!??!?!?

Dass einzige was ich zwischendurch irgendwann gemacht habe, ist im VMWare Player den verfügbaren Arbeitsspeicher für meine Windows-VM von 2048 auf 4096 MB zu ändern... könnte es vielleicht daran liegen, dass Access vorher zu wenig physikalischen Speicher hatte???

Naja, nichts desto trotz, hier meine Test Datenbank die das Problem veranschaulichen sollte...

Gruß,
Monti

P.S.: Ich arbeite mit Access 2010 32-Bit unter Windows 7 64-Bit

[Anhang gelöscht durch Administrator]