Formular als Dialog öffnen, Felder ein blenden

26/03/2008 - 11:01 von Tamara Mikes | Report spam
Salü alle zusammen

In meinem Code möchte ich gerne folgendes tun:

Ein Formular frmArtikel öffnen
Einige ausgeblendete Felder einblenden
Einige Labels neu beschriften
und dann warten bis der Anwender einen Button auf dem Formular angeklickt hat.

Ich dachte, das realisiere ich so:

DoCmd.OpenForm "frmArtikel", acNormal, , , , acHidden
Form_frmArtikel.cmdOptionen.Visible = True
Form_frmArtikel.lbText.Caption = "Artikel 256"
DoCmd.OpenForm "frmArtikel", acNormal, , , , acDialog
vAuswahl = Form_frmArtikel.tbEingabe.Text

Aber mit der Variante làuft der Code durch und der Anwender hat nicht die Möglichkeit den
Text in das Feld tbEingabe einzugeben.
Dann versuchte ich:

Form_frmArtikel.cmdOptionen.Visible = True
Form_frmArtikel.lbText.Caption = "Artikel 256"
DoCmd.OpenForm "frmArtikel", acNormal, , , , acDialog
vAuswahl = Form_frmArtikel.tbEingabe.Text

Aber so werden die ersten beiden Zeilen nicht wirksam.

Was kann ich machen, damit der Code bei DoCmd.OpenForm angehalten wird und die Anpassungen
auf dem Formular gemacht werden?

Vielen Dank für Hinweise
Gruss Tamara
 

Lesen sie die antworten

#1 Henry Habermacher
26/03/2008 - 11:55 | Warnen spam
Hallo Tamara

"Tamara Mikes" wrote in message
news:%23few$
In meinem Code möchte ich gerne folgendes tun:

Ein Formular frmArtikel öffnen
Einige ausgeblendete Felder einblenden
Einige Labels neu beschriften
und dann warten bis der Anwender einen Button auf dem Formular angeklickt
hat.

Ich dachte, das realisiere ich so:

DoCmd.OpenForm "frmArtikel", acNormal, , , , acHidden
Form_frmArtikel.cmdOptionen.Visible = True
Form_frmArtikel.lbText.Caption = "Artikel 256"
DoCmd.OpenForm "frmArtikel", acNormal, , , , acDialog
vAuswahl = Form_frmArtikel.tbEingabe.Text



Die letzte Zeile wird erst ausgeführt, wenn das Formular frmArtikel
geschlossen wird. Grund: Beim Aufruf eines Formulars im Dialog Modus wird
der Code des aufrufenden Formulars angehalten, bis das Formular geschlossen
wird.
Zudem weiss ich nicht, wieso Du da das Klassenmodul und nicht direkt das
Formular ansprichst, als
Forms("frmArtikel")!tblEingabe.Text

Wenn Du einen Rückgabe Parameter erhalten willst, legst Du am einfachsten
eine globale Variable an, welche Du dann im Auswahl Formular befüllst.

Dann versuchte ich:

Form_frmArtikel.cmdOptionen.Visible = True
Form_frmArtikel.lbText.Caption = "Artikel 256"
DoCmd.OpenForm "frmArtikel", acNormal, , , , acDialog
vAuswahl = Form_frmArtikel.tbEingabe.Text

Aber so werden die ersten beiden Zeilen nicht wirksam.



Du öffnest ja das Formular erst nachher, das heisst, die Klasse ist zu
diesem Zeitpunkt nicht instanziiert und daher kannst Du dort auch nichts
reinschreiben. Auch hier wieder: Verwende das Formular nicht das
Formular-Klassenmodul.


Was kann ich machen, damit der Code bei DoCmd.OpenForm angehalten wird und
die Anpassungen auf dem Formular gemacht werden?



Versuch's mal so:

in einem Standard Modul:

Public vAuswahl as Variant

Public Function fncArtikel(strCaption as String) as Variant
vAuswahl = NULL
docmd.OpenForm "frmArtikel", acNormal, , , , acDialog, strCaption
fncArtikel = vAuswahl
End Function

Die Beschriftung übergibst Du dem Form als OpenArgs. Damit kannst Du dann
beim Form_Load Ereignis folgendes machen:

If Nz(Me.OpenArgs, "") <> "" Then
Me!cmdOptionen.Visible = True
Me!lblCaption = Me.OpenArgs
End If

Auf dem Formular hast Du vermutlich einen OK Button oder eine andere
Möglichkeit, den ausgewàhlten Artikel zurückzugeben oder abzubrechen. Dort
hinterlegst Du folgenden Code:

vAuswahl = Me!tbEingabe

Falls nicht, machst Du diesen Code ins Form_Close() Ereignis rein. Wenn nun
das Formular geschlossen wird, dann wird der eingegebene Wert in die globale
Variable vAuswahl geschrieben und steht dann der Funktion zur Verfügung, die
gewartet hat, bis das Formular geschlossen wurde (eben, weil im Dialog Modus
geöffnet)

Nun kannst Du einfach irgendwo die Funktion fncArtikel mit der Beschriftung
aufrufen und erhàlst entweder NULL zurück (wenn nichts eingegeben wurde)
oder den eingegebenen Text, also z.B.

MsgBox fncArtikel("Artikel 256")

HTH
Henry

Ähnliche fragen