PDA

Vollständige Version anzeigen : Selektierten Listenfeldeintrag übergeben


DFault
22.03.2006, 13:22
Hallo Forum,

ich arbeite erst seit kurzem mit Access und stoße immer wieder auf kleinere Probleme. Im Moment plage ich mich mit dem Listenfeld rum.

Ich habe ein Formular, in dem mir in einem Listenfeld alle Kunden inklusive Anschrift usw. angezeigt werden.
Nun soll über einen Doppelklick auf einen Kunden das Auftragsformular geöffnet werden (Formular existiert bereits). Neben der Auftragserfassung wollte ich -um sicherzustellen, dass man auch den richtigen Kunden ausgewählt hat- die Kundennummer, Firma, Name und Nachname anzeigen lassen (ganz schlicht in Textfeldern ohne Bearbeitungsmöglichkeit).

Aber ich kriege es einfach nicht hin, dem Auftragsformular die genannten Felder zu übergeben (per Doppelklick auf das Listenfeld). Wie kriege ich es hin, per Doppelklick einen Kunden auszuwählen die Textfelder im Auftragsformular mit den Werten aus dem Listenfeld (oder auch aus der Kundentabelle) zu füllen. Leider verfügen Textfelder ja nicht über die Eigenschaft "Datenherkunft". Ich glaube dann hätte ich weniger Probleme.


Wie auch immer, ich hoffe Ihr könnt mir weiterhelfen.

Vielen Dank und Gruß

DFAULT

elmar
22.03.2006, 14:25
Listenfelder haben Spalten (Column). Beim Klicken auf das Listenfeld bringst Du mit Me.Dein_Textfeld=Me.Dein_Listenfeld.Column(1) den Wert der 2. Spalte Deines Listenfeldes in das Textfeld.

Siegfried
22.03.2006, 14:32
mein doppelklick auf listfeld sieht so aus:
Private Sub lst_search_DblClick(Cancel As Integer)
On Error GoTo myError

Dim strName As String
Dim strKrit As String

'strName = "frmSAPFragen_HF"
strName = "frmSAP_Edit2"
strKrit = "[FrageID]=" & Me!lst_search.Value 'entsprechenden Datensatz auswählen
DoCmd.OpenForm strName, , , strKrit

DoCmd.Close acForm, "frmSAPKritSuche"


my_Exit:
Exit Sub

myError:
If Err.Number = 3075 Then
MsgBox "Mit Doppelklick können Sie nur einen vorhandenen Wert öffnen. ", vbInformation + vbOKOnly, "Keinen Wert ausgewählt"
Else
MsgBox "Fehler " & Err.Number & " " & Error$
Resume my_Exit
End If
End Sub

Siegfried
22.03.2006, 14:38
ups - hab noch vergessen...
Private Sub lst_search_Click()

Me.memoAntwort = lst_search.Column(3)
Me.seiteAntwort = lst_search.Column(5)
Me.modulAntwort = lst_search.Column(6)

End Sub

so wie Elmar es beschrieben hat !

elmar
22.03.2006, 14:39
Aber auch das geht:
DoCmd.OpenForm "frm_K_STAMM", acViewNormal, , "KUNDE_ID=Formulare![Formular1]![Liste0] ", acFormPropertySettings, acWindowNormal
Du musst lediglich die Namen der Felder und Formulare an Deine Gegebenheiten anpassen. Die KUNDE_ID muß in der gebundenen, ersten Spalte des Listenfeldes stehen.

DFault
22.03.2006, 14:49
Also vielen Dank erst mal für Eure Tipps. Leider erschließt sich mir die Sache noch nicht so ganz. Wie gesagt, ich arbeite erst seit kurzem mit Access und hatte vorher nur sehr geringe Berührungspunkte mit VBA oder einer anderen Programmiersprache.

Ich habe jetzt mal Deinen letzten Vorschlag ausprobiert. Mir ist immer noch schleierhaft, wie ich dieses Doppelklickereignis Formularübergreifend gestalte. Wenn ich Euren Code richtig lese, bleibt Ihr innerhalb eines Formulares!

Ich möchte diese Werte jedoch an ein weiteres Formular übergeben. Hättet Ihr dazu auch noch ne Idee?

Siegfried
22.03.2006, 14:59
schau dir doch mal meinen ersten code an !
strName = "frmSAP_Edit2" 'hier öffne ich mein Edit-Formular
strKrit = "[FrageID]=" & Me!lst_search.Value 'entsprechenden Datensatz auswählen
DoCmd.OpenForm strName, , , strKrit 'hier öffne ich mein Edit-Formular

DoCmd.Close acForm, "frmSAPKritSuche" hier schließe ich mein Listenfeld-Formular

DFault
22.03.2006, 15:45
OK, Du hast also eine variable, der Du den Formularnamen zuweist. Soweit ok!
Womit ich jetzt den absoluten Hänger habe ist Deine zweite Zeile!

Dort weist Du der Variablen "strKrit" was zu? Zu welchem Formular gehört den "FrageID"? Irgendwie kommt dann auch noch Deine Private Sub lst_search_Click() ins Spiel....im Moment raff ich gar nichts. Sorry, aber vielleicht wird es mir klarer, wenn ich mal meine Namen angebe!

Also, im Formular frm_Kunden befindet sich das Listenfeld "Liste3". Der Herkunftstyp für dieses Listenfeld steht auf Tabelle/Abfrage und unter Datensatzherkunft steht eine SQL-Abfrage mit den Feldern der Tabelle (insgesamt entstehen so 17 Spalten). Die erste Spalte (Kd.Nr.) steht zudem als gebundene Spalte in den Eigenschaften.
Wird nun auf einen Kunden ein Doppelklick ausgeführt, soll das Formular "frm_Ausleiherfassung" geöffnet werden.
Dabei sollen die vier Textfelder "Text22", "Text24", "Text26" und "Text28" gefüllt werden. Text22 mit der Kundennummer, Text24 mit dem Firmennamen (falls vorhanden), Text26 mit dem Vornamen und Text28 mit dem Nachnamen.

Ich hatte mir dann in der "Private Sub Liste3_DblClick(Cancel as Integer)" schon mal vier Variablen angelegt, denen ich die jeweiligen Werte zugewiesen habe. Das war auch soweit kein Problem. Mein Problem besteht nun wirklich darin, den Textfeldern in dem öffnenden Formular (frm_Ausleiherfassung) die Einträge "beizubringen".

Mein Code sieht -zugegebenermaßen vielleicht etwas naiv gedacht- so aus:

Private Sub Liste3_DblClick(Cancel As Integer)

Dim kdnummer As Integer
Dim firma As String
Dim vorname As String
Dim nachname As String

kdnummer = Me.Liste3.Column(0)
firma = Me.Liste3.Column(1)
vorname = Me.Liste3.Column(2)
nachname = Me.Liste3.Column(3)

DoCmd.OpenForm "frm_ausleiherfassung", , , frm_Ausleiherfassung.Text22 = kdnummer
DoCmd.OpenForm "frm_ausleiherfassung", , , frm_Ausleiherfassung.Text24 = firma
DoCmd.OpenForm "frm_ausleiherfassung", , , frm_Ausleiherfassung.Text26 = vorname
DoCmd.OpenForm "frm_ausleiherfassung", , , frm_Ausleiherfassung.Text28 = nachname

End Sub

Dabei kriege ich allerdings die Fehlermeldung "Objekt erforderlich".

elmar
22.03.2006, 15:54
Mein Problem besteht nun wirklich darin, den Textfeldern in dem öffnenden Formular (frm_Ausleiherfassung) die Einträge "beizubringen".
Dazu musst du das Form aber nur 1 x öffnen, nicht 4 mal!!
Dann könnte es so weitergehen:
Forms!frm_ausleiherfassung!Text22 = kdnummer
Forms!frm_ausleiherfassung!Text24 = firma
Nur frage ich mich, was das Ganze soll?? :confused:

DFault
22.03.2006, 16:11
OOOHHH NEIN, ich Idiot! Mal davon abgesehen, dass mir jetzt klar ist, dass ich versucht habe vier mal das Formular zu öffnen, habe ich die ganze Zeit probiert, die Füllung der Textfelder in der DoCmd-Zeile unterzubringen. Haach, verdammt.

Um Deine Frage zu beantworten, was das soll. Ich möchte einfach den Namen, den ich ausgewählt habe, anzeigen, damit ich sehen kann für welchen Kunden ich gerade einen Auftrag anlege! Könnte ja auch sein, dass ich versehentlich vorbei klicke...so hab' ich dann die Möglichkeit noch abzubrechen.

Schade nur, dass ich Euch dafür jetzt so lange in Anspruch genommen habe. Sorry und VIELEN DANK!

elmar
22.03.2006, 16:53
Alles klar! Schade nur, dass ich Euch dafür jetzt so lange in Anspruch genommen habe.Unter anderem dafür sind wir ja hier... ;)