PDA

Vollständige Version anzeigen : Formular schließen und Prozedur an Modul übergeben


engri
27.09.2005, 22:44
Hi, da bin ich mal wieder und grüße alle Nachtschwärmer ... schön dass es Euch gibt :)

Schon viele vor mir hatten das Problem, dass sie Formulare mit der eigenen Bildschirmauflösung programmiert hatten und dann feststellen mußten, dass Nutzer mit einer anderen Bildschirmauflösung und / oder Bildschirmgröße arbeiten und somit das top-programmierte Formular eigentlich nur zweitklassig ist.

Als Lösung habe ich mir nun folgendes überlegt:
- Ich habe das Formular kopiert und umbenannt.
- Nun habe ich 2 Formulare: frm_Start und frm_Start_klein
- frm_Start_klein habe ich an einen kleineren Monitor nachbearbeitet, so dass alle Steuerelemente wie bei frm_Start draufpaßt.
- Ferner habe ich beide Formulare mit einen Button versehen und einen entsprechend Code hinterlegt:
- Ziel: Nachdem frm_Start automatisch geöffnet wird und zu groß sein sollte, soll der Nutzer per Click auf den Button "kleiner" das Fromular frm_Start_klein öffnen können.
- Damit aber aber nun die hinterlegten Abfragen noch funktionieren können braucht es das Formular frm_Start. Dazu soll beim Schließen des ersten Formulars dieses umbenannt werden in frm_Start_gross sowie das frm_Start_klein in frm Start (per Docmd.Rename...)

Ich denke, daß die Idee nicht schlecht ist, jedoch scheitert es derzeit noch darin, daß auch bei geschlossenen Formular (frm_Start) dieses noch aktiv ist bis die komplette Prozedur abgearbeitet wurde. Das Ergebnis und Problem: Man kann das Formular frm_Start_klein nicht in frm_Start umbennen.

Nun habe ich die Prozedur in ein Modul "ausgelagert", aber das war wohl leider noch nicht der Weisheit letzter Schluß.

Hat da jemand eine Idee, wie man das Formular frm_Start richtig schließen kann und anschließend die Prozedur des Umbenennens unabhängig von einem Formular starten kann.

Bin für jede Idee dankbar ...

Gruß Enrico

Hier noch mein Code im Modul:
Sub kleiner()
DoCmd.Close acForm, "frm_Start"
DoCmd.Rename "frm_Start_groß", acForm, "frm_Start"
DoCmd.Rename "frm_Start", acForm, "frm_Start_klein"
DoCmd.OpenForm "frm_Start"
End Sub

und der Aufruf im Formular frm_Start:
Private Sub btn_kleiner_Click()
Call kleiner
End Sub

KHS
27.09.2005, 23:05
Damit aber aber nun die hinterlegten Abfragen noch funktionieren können braucht es das Formular frm_Start.
Kurz gesagt: Du arbeitest mit Formularbezügen!?
Gewöhn dir das besser ab: Siehe <b><a href="http://www.dbwiki.de/wiki.php?title=Access_Design:Formularbez%Fcge" target="_blank">Access Design:Formularbezüge</a></b>
Also z.B. entweder die SQL dynamisch erstellen, schau mal im DBWiki Reinhards Beispiel '<b><a href="http://www.dbwiki.de/wiki.php?title=Access_Beispieldatenbanken" target="_blank">Suchen</a></b>'
Und/Oder <b><a href="http://www.donkarl.com/FAQ/FAQ3TAbfragen.htm#3.15" target="_blank">FAQ 3.15 Variablen in Abfragen verwenden</a></b>

engri
28.09.2005, 00:07
ich habe versucht gem. FAQ 3.15 die Variablen einer Funktion zu zuordnen, jedoch hat die Funktion nicht wie gewünscht die Werte zuückzugeben ... vielleicht weil sie durch bestimmte werte eines Listenfeldes zu deklarieren sind ?!?!?

Ich versuche es nun, in dem zwischenzeitlich ein anderes Formular öffne, um die Prozedur ablaufen zu lassen ... ist zwar nicht sehr elegant, aber wenn ich nächste Woche Zeit habe, versuche ich es nochmals anders ...

Santalino
28.09.2005, 02:37
huhu,
folgende Anmerkungen dazu:

a) Das umbenennen würde funktionieren wenn du den Code aus einem extra Formular startest und dort z. B. zur Auswahl Optionsfelder oder 2 Buttons für das große bzw. kleine Forumlar verwendest. Diese extra-Formalur könnte man z. B. auch direkt nach dem Starten der Anwendung öffnen oder alternativ dazu kein Formular sondern nur eine msgbox "Großes Formular, ja/nein" verwenden oder als Luxus-Lösung :) die Bildschirmauflösung ermitteln und dann automatisch die entsprechende Vorauswahl treffen und dem User nur noch zusätzlich die Möglichkeit geben trotzdem die andere Ansicht auszuwählen.

b) Man könnte auch nur ein Formular verwenden und dort zur Laufzeit die Felder über VBA anders Positionieren und die Länge anpassen ggf. dann noch zusätzlich analog wie die oben beschriebene Luxus-Lösung...

c) Wenn die Umbenennungs-Lösung verwendet wird, sollte man noch die Spezial-User berücksichtigen :p die bereits das kleine Formular haben und trotzdem nochmal das kleine Formular auswählen was dann mit deinem Code zu einem Laufzeitfehler führen dürfte...

d) Wie KHS bereits anmerkte sollte man möglichst keine Formularbezüge in Abfragen verwenden da es genau diese Schwierigkeiten gibt, es zusätzlich unübersichtlicher und wartungsaufwändiger ist.

JörgG
28.09.2005, 07:49
Hallo Enrico,

auch wenn Du schon eine Lösung hast, das könnte Dir gefallen (http://www.ms-office-forum.net/forum/showthread.php?t=117106) , das Funktiönchen von Sascha (zentriert das Windowsfenster mit Deiner DB bei höheren Auflösungen) hab ich bei mir in die Startfunktion mit eingebaut, es erspart allerlei Klimmzüge mit mehreren Formularen etc...und sieht gut aus. :biggrinl:

PS: zuverlässig im Einsatz unter A97 + AXP