MS-Office-Forum

Zurück   MS-Office-Forum > Microsoft Access & Datenbanken > Microsoft Access
Registrieren Forum Hilfe Alle Foren als gelesen markieren

Banner und Co.

Antworten
Ads
Themen-Optionen Ansicht
Alt 12.08.2019, 10:31   #1
Michael O.
MOF User
MOF User
Standard Acc2013 - Laufzeitfehler 2165 - Fokus

Hallo Forum,

ausschließlich in der Runtime-Umgebung (!!!) erhalte ich einen Fehler 2165 - Sie können ein Steuerelement nicht ausblenden, solange es den Fokus hat.

Ich habe einen Auswahldialog (Popup) mit einem UFo (Endlosformular mit Eingabefeldern Menge / Anzahl). Je nach KONTEXT (rep_1 / rep_2) möchte ich im Unterformular ein Feld (txt_menge oder txt_anzahl) ausblenden. Klar ist, dass ein auszublendendes Steuerelement nicht den Fokus haben darf, deshalb setze ich es vorsichtshalber auf ein Listenfeld im HFo.

Code:

' Auszublendendes Feld darf nicht den Fokus haben, deshalb Fokus auf Listfeld im HFo
lst_auswahl.SetFocus

' KONTEXT auswählen
Select Case KONTEXT
    Case "rep_1"
        Me!frm_REZEPT_sel_UFo!lbl_menge.Visible = False
        Me!frm_REZEPT_sel_UFo!txt_menge.Visible = False
        lbl_basen_zugaben.Visible = False
        lbl_base_zugabe_sel.Visible = False
        lst_base_zugabe.Visible = False
    Case "rep_2"
        Me!frm_REZEPT_sel_UFo!lbl_anzahl.Visible = False
        Me!frm_REZEPT_sel_UFo!txt_Anzahl.Visible = False
        lbl_basen_zugaben.Visible = True
        lbl_base_zugabe_sel.Visible = True
        lst_base_zugabe.Visible = True
End Select
Das funktioniert in ACCDB und ACCDE mit installiertem Access problemlos, führt in der Runtime aber zu o. g. Fehler.
Hat jemand eine Idee, woran es liegen könnte? Ist eventuell meine Notation "Me!frm_REZEPT_sel_UFo!..." kritisch?
Sollte ich den Code besser in eine Sub des UFo verlegen und vom HFo aufrufen?

Vielen Dank im Voraus für jeden Hinweis und beste Grüße
Michael
Michael O. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.08.2019, 10:35   #2
Beaker s.a.
MOF Koryphäe
MOF Koryphäe
Standard

Hallo Michael,

Zitat:

Ist eventuell meine Notation "Me!frm_REZEPT_sel_UFo!..." kritisch?

Vermutlich; - schaust du hier.
gruss ekkehard

__________________

--
S.M.I.²L.E.
Beaker s.a. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.08.2019, 14:10   #3
knobbi38
MOF User
MOF User
Standard

Hallo Michael,

die Logik scheint mir nicht ganz plausibel. Wenn es einen Konflikt mit dem Fokus gibt, geht das ja nur, wenn eines der Textboxen "txt_menge oder txt_anzahl" gerade den Fokus besitzt. Ein anderes Steuerelement kann ja zu dem Zeitpunkt den Konflikt nicht auslösen, weil dann ja gerade keines der beiden Textboxen den haben kann, sondern das auslösende Steuerelement.

Mit welcher Action, von welchem Event wird denn der Fokuswechsel initiert?

Ulrich
knobbi38 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.08.2019, 15:28   #4
elmar
MOF Guru
MOF Guru
Standard

Zitat:

@Ulrich Mit welcher Action, von welchem Event wird denn der Fokuswechsel initiert?

- ... dann vorher den Focus verschieben

__________________

WIN 10 Enterprise 64, ACCESS 2019 Wissenswertes: ACCESS-FAQ
Hilfreiche Antworten kann es nur bei verständlichen Fragen geben! Anleitung dazu: Hier klicken | Auch hilfreich: Einführung in die Datenbank Microsoft Access. | Die Nachteile von Nachschlagefeldern
elmar ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.08.2019, 17:12   #5
Beaker s.a.
MOF Koryphäe
MOF Koryphäe
Standard

Hallo Elmar,
Macht er doch gleich in der 1. Zeile.
Das Problem ist IMO, dass nicht bekannt ist in welchem Modul (HFo/UFo) der
Code abläuft.
Wenn im HFo stimmt die Referenz auf das UFo nicht.
Code:

Me!NameDesUFoControls.Form!lbl_menge.Visible = False
Wenn im UFo stimmt der Bezug zum HFo nicht, was bedeutet, das der Focus gar
nicht verschoben wird.
Code:

Me.Parent!lst_auswahl.SetFocus
gruss ekkehard

__________________

--
S.M.I.²L.E.
Beaker s.a. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 12.08.2019, 18:17   #6
elmar
MOF Guru
MOF Guru
Standard

Muss es nicht doch korrekt heißen:
Code:

Me!lst_auswahl.SetFocus
... denn in der 1. Zeile fehlt m.E. das Schlüsselwort Me!

__________________

WIN 10 Enterprise 64, ACCESS 2019 Wissenswertes: ACCESS-FAQ
Hilfreiche Antworten kann es nur bei verständlichen Fragen geben! Anleitung dazu: Hier klicken | Auch hilfreich: Einführung in die Datenbank Microsoft Access. | Die Nachteile von Nachschlagefeldern
elmar ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.08.2019, 10:13   #7
Beaker s.a.
MOF Koryphäe
MOF Koryphäe
Standard

Hallo Elmar,
Nur wenn der Code im Modul des Forms mit der Liste abläuft. Dann kann
man es aber, glaube ich, auch weglassen, was den Code allerdings nicht
gerade besser lesbar macht.
Aber darüber wo der Code läuft herrscht ja weiterhin Unklarheit.

@Michael
Vielleicht äusserst du dich mal dazu.

gruss ekkehard

__________________

--
S.M.I.²L.E.
Beaker s.a. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.08.2019, 18:11   #8
Michael O.
Threadstarter Threadstarter
MOF User
MOF User
Standard

Sorry an alle, dass es so lange gedauert hat!

Der Code läuft im Form_Open des HFo.
Zum SetFocus:
Zunächst hatte ich das vergessen und prompt den Fehler 2165 bekommen. Selbst Schuld. Dann habe ich einfach wechselseitig den Focus auf das jeweils nicht auszublendende Feld im UFo gesetzt, was den Fehler aber merkwürdigerweise nicht behoben hat. Also dachte ich mir, "besser so weit weg wie möglich" und hab den Fokus auf die LIste im HFo gelegt.

In der Entwicklungsumgebung war dann Ruhe . Der Kunde bekommt aber in der Runtime-Umgebung nach wie vor Fehler 2165. Und mit gelingt es nicht, dies nachzustellen - weder mit der Endung accdr noch mit dem Aufruf-Parameter /runtime oder einer Kombination aus beiden. Der Code läuft durch! Das macht mich nachdenklich. Gibt es wirklich keine echte Möglichkeit, die Runtime-Umgebung zu simulieren?

Korrigiert sähe der Code jetzt wie folgt aus:

Zitat:

Private Sub Form_Open(Cancel As Integer)
...
' KONTEXT auswählen (auszublendendes Feld darf nicht den Fokus haben)
Select Case KONTEXT
Case "rep_1"
Me!frm_REZEPT_sel_UFo.SetFocus
Me!frm_REZEPT_sel_UFo.Form!txt_anzahl.SetFocus
Me!frm_REZEPT_sel_UFo.Form!lbl_menge.Visible = False
Me!frm_REZEPT_sel_UFo.Form!txt_menge.Visible = False
Case "rep_2"
Me!frm_REZEPT_sel_UFo.SetFocus
Me!frm_REZEPT_sel_UFo.Form!txt_menge.SetFocus
Me!frm_REZEPT_sel_UFo.Form!lbl_anzahl.Visible = False
Me!frm_REZEPT_sel_UFo.Form!txt_anzahl.Visible = False
End Select
...

Viele Grüße
Michael
Michael O. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.08.2019, 20:46   #9
knobbi38
MOF User
MOF User
Standard

Hallo Michael,
Form_Open() ist zu früh. Vielleicht im Form_Current() eine Private Sub aufrufen, welche die Anzeige entsprechend KONTEXT anpaßt, wobei ich die Logik invertieren würde: die Steuerelemente nicht ausblenden, sondern einblenden. Dann gibt es auch keinen Konflikt mit dem Fokus, weil ein ausgeblendetes Steuerelement per Definition keinen Fokus haben kann.

Btw.:
Für KONTEXT würde ich eine Enumeration wählen. Läßt sich viel einfacher abfragen (man spart sich ineffiziente Stringvergleiche), läßt sich viel einfacher übergeben, einfacher im Quelltext pflegen und ist genauso aussagekräftig.

Gruß Ulrich
knobbi38 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.08.2019, 21:37   #10
Michael O.
Threadstarter Threadstarter
MOF User
MOF User
Standard

Hallo Ulrich,

besten Dank für Deinen Denkanstoß. Das ist ein kluger Ansatz! Ich sage doch immer: Der Mensch denkt in Einbahnstraßen! Und wenn man sich so sehr darauf fixiert hat, das Fokus-Problem zu lösen kommt man einfach nicht dazu, die Sichtweise zu ändern und das Problem von einer anderen Seite aus zu betrachten.

Zum Ereignis:
Eigentlich ist es für diese Aktion ja nicht erforderlich, dass die Datensätze geladen sind. Warum dann erst in Form-Current? Und warum nicht direkt in dem Ereignis, sondern in einer separaten Sub? Ich lerne leidenschaftlich gern dazu!

Die Enumeration werde ich auch einmal ausprobieren, gerade wenn der Stringvergleich mehrfach in der Prozedur bemüht wird. Mit den Access-Enumerationen arbeite ich natürlich ständig, eigene habe ich bisher eher wenig verwendet.

Bleibt noch die Frage nach der Simulation der Runtime-Umgebung. Bisher muss ich wirklich meine Kunden als Versuchskaninchen missbrauchen. Mit einer echten Simulation der Runtime-Umgebung hätte das ein Ende, was ich sehr begrüßen würde!

Viele Grüße
Michael
Michael O. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 13.08.2019, 22:18   #11
elmar
MOF Guru
MOF Guru
Standard

Zum Thema Enumeration eine sinnvolle Anwendungsmöglichkeit.
Zur Simulation der Runtime-Umgebung: ein Bekannter von mir hat das mit einem zweiten PC simuliert, dieser war dem Kundenrechner nachgebildet. Einen anderen Weg gibt es wohl nicht.

__________________

WIN 10 Enterprise 64, ACCESS 2019 Wissenswertes: ACCESS-FAQ
Hilfreiche Antworten kann es nur bei verständlichen Fragen geben! Anleitung dazu: Hier klicken | Auch hilfreich: Einführung in die Datenbank Microsoft Access. | Die Nachteile von Nachschlagefeldern
elmar ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.08.2019, 01:23   #12
knobbi38
MOF User
MOF User
Standard

Hallo Michael,

Zitat:

Eigentlich ist es für diese Aktion ja nicht erforderlich, dass die Datensätze geladen sind. Warum dann erst in Form-Current? Und warum nicht direkt in dem Ereignis, sondern in einer separaten Sub? Ich lerne leidenschaftlich gern dazu!

Nein, das hat nicht direkt etwas mit den geladenen DS zu tun. Beim Zugriff auf Controls habe ich im Open-Event keine guten Erfahrungen gemacht, deshalb verwendet ich frühestens erst das Load-Event. Für das Ändern der Anzeige bevorzuge ich das Current-Event, weil damit die Synchronisation mit der UI besser gewährleistet ist und bei einem DS Wechsel immer erneut aufgerufen wird.
Das Auslagern in eine separate Sub hat eigentlich nur zwei Gründe. Zum einen bleibt Form_Current übersichtlicher und ggf. kann ich die Synchronisation auch von anderen Stellen aus aufrufen. Also nicht zwingend, eher aus praktischen Erwägungen.

Zitat:

Die Enumeration werde ich auch einmal ausprobieren, gerade wenn der Stringvergleich mehrfach in der Prozedur bemüht wird. Mit den Access-Enumerationen arbeite ich natürlich ständig, eigene habe ich bisher eher wenig verwendet.

Enumerationen lege ich immer global in einem Modul ab. Mit den Enumerationen hat man auch den Vorteil von IntelliSense. Es ist jedoch zu beachten, daß VBA keine echte Limitierung auf die Enumerationswerte macht, sondern auch alle Long-Werte akzeptiert.
---
Die Runtime-Umgebung simuliere ich innerhalb einer VM mit einer möglichst sauberen Windows Installation. inkl. Updates und Service Packs.
---

Gruß Ulrich
knobbi38 ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Alt 14.08.2019, 09:56   #13
Beaker s.a.
MOF Koryphäe
MOF Koryphäe
Standard

Hallo Michael,

Zitat:

Der Code läuft im Form_Open des HFo.

Dann stimmt die Referenz auf das UFo nicht; - siehe #5 und #2
gruss ekkehard

__________________

--
S.M.I.²L.E.
Beaker s.a. ist offline  
verlinken auf Del.icio.us Diese Seite zu Mister Wong hinzufügen
Antworten Auf Beitrag antworten
Ads
Antworten


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Besucher: 1)
 
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge anzufügen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

vB Code ist An.
Smileys sind An.
[IMG] Code ist An.
HTML-Code ist An.
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:09 Uhr.



Powered by: vBulletin Version 3.6.2 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Copyright ©2000-2018 MS-Office-Forum. Alle Rechte vorbehalten.
Copyright ©Design: Manuela Kulpa ©Rechte: Günter Kramer
Eine Verwendung der Inhalte in anderen Publikationen, auch auszugsweise,
ist ohne ausdrückliche Zustimmung der Autoren nicht gestattet.