small-step: ACCESS 2002 - Übergabe von Parametern an Formulare über VBA

Hallo alle,

die Frage hat mit HTML nicht wirklich viel zu tun, ich weiß aber was für gute und kompetente Hilfe hier auch zu anderen Themen geboten wird, also stelle ich sie einfach mal.

Folgendes Problem plagt mich: Ich möchte aus einem Listenfeld in einem Formular (Access 2002) einen Eintrag auswählen und mit einem Klick auf "Details" ein Popup-Formular öffnen. Jetzt will ich diesem Formular aber die ID des ausgewählten Eintrags übergeben, damit ich auch die Chance habe irgendwelche Details anzuzeigen. Daran scheitere ich allerdings. Erstens weiß ich nicht, wie ich gezielt an die ID komme (im Listenfeld werden Name und Vorname einer Person angezeigt) und zweitens weiß ich nicht, wie ich diese Info im geöffneten Popup-Formular schon beim Öffnen des Formulars abrufen kann. Ich habe dazu nur "_Click" gefunden, damit kann ich mir die übergebenen Testparameter per Mausklick auf ein Element ausgeben lassen.

Hier einmal die VBA Teile die ich mir erarbeiten konnte:

Das Formular mit dem Listenfeld
    Private Sub btMitarbeiterDetails_Click()
    On Error GoTo Local_Error
        Dim strFormName As String
        Dim strOpenArgs As String

strFormName = "frmMitarbeiterDetails"
        strOpenArgs = "Testparameter"

Dim strTest As String

DoCmd.OpenForm strFormName, , , , , , strOpenArgs
    Local_Error:
    End Sub

Und hier das Popup-Formular
    Private Sub txtVorname_Click()
        MsgBox OpenArgs
    End Sub

Ist nicht sehr viel, ich weiß. Leider hab ich hier keine Literatur zur Verfügung und die Access Hilfe... na ja. Open Source ist mir eigentlich lieber, allein schon weil auch mit Informationen meist großzügiger umgegangen wird, aber es ist eine Übungsaufgabe von meinem Chef...

Ich danke euch schonmal im Voraus für jede Antwort. Selbst wenn sie eher zur Erheiterung als zur Problemlösung dient. Das kann ich jetzt mindestens genau so gut vertragen :-)

Gruß,
small-step

  1. Nochmal hallo alle,

    eins fällt mir noch ein. Ich habe noch ein zweites Popup-Formular, mit dem ich neue Mitarbeiter eintragen kann. Das ganze funktioniert eigentlich recht gut, nur eins stört mich. Ich würde das Listenfeld nach dem Eintragen eines neuen Mitarbeiters gern aktualisieren. Am besten automatisch direkt aus dem Popup mit dem ich den Mitarbeiter eintrage. Versucht habe ich das ganze mit OnClose und Requery, allerdings hat es erstens nicht funktioniert (das Parent-Formular wurde nicht aktualisiert) und zweitens wurde das Popup-Formular nach dem erfolgreichen Anlegen des neuen Eintrags nicht mehr geschlossen.

    Hier der VBA-Code für das "Anlegen" Popup:

    Private Sub btMitarbeiterSpeichern_Click()

    On Error GoTo Local_Exit

    Dim strName As String
            Dim strVorname As String
            Dim strEMail As String

    If IsNull(Nachname) Then GoTo Input_Error
            If IsNull(Vorname) Then GoTo Input_Error
            If IsNull(EMail) Then GoTo Input_Error

    strNachname = Nachname
            strVorname = Vorname
            strEMail = EMail

    Dim strSql As String

    strSql = "INSERT INTO tbMitarbeiter(Nachname,Vorname,EMail) VALUES('" & strNachname & "','" & strVorname & "','" & strEMail & "')"

    CurrentProject.Connection.Execute strSql

    DoCmd.Close

    GoTo Local_Exit

    Input_Error:

    MsgBox ("Bitte überprüfen Sie Ihre Eingabe. Alle Felder müssen ausgefüllt werden!")

    Local_Exit:

    End Sub

    Auch hierzu schon einmal Dankeschön!

    Gruß,
    small-step

  2. Hallo ich selbst,

    Das Formular mit dem Listenfeld
        Private Sub btMitarbeiterDetails_Click()
        On Error GoTo Local_Error
            Dim strFormName As String
            Dim strOpenArgs As String

    strFormName = "frmMitarbeiterDetails"
            strOpenArgs = "Testparameter"

    Dim strTest As String

    DoCmd.OpenForm strFormName, , , , , , strOpenArgs
        Local_Error:
        End Sub

    Das wurde jetzt zu:
        Private Sub btMitarbeiterDetails_Click()
        On Error GoTo Local_Error

    Dim strFormName As String
            Dim strOpenArgs As String

    strFormName = "frmMitarbeiterDetails"
            strOpenArgs = Me!lstMitarbeiter.Column(2)

    DoCmd.OpenForm strFormName, , , , , , strOpenArgs

    Local_Error:
        End Sub

    Und funktioniert jetzt. Ich habe in die Abfrage die Id mit reingenommen und sie im Listenfeld nicht anzeigen lassen, jetzt kann ich sie abrufen.

    Und dieser Teil hier:

    Private Sub txtVorname_Click()
           MsgBox OpenArgs
       End Sub

    Wurde dazu:
        Private Sub Form_Open(Cancel As Integer)

    Dim strOpenArgs As String
            Dim strVorname As String
            Dim strNachname As String
            Dim strEMail As String
            Dim strSql As String

    strOpenArgs = OpenArgs

    Dim rs As New Recordset
            rs.Open "SELECT Vorname,Nachname,EMail FROM tbMitarbeiter WHERE PKMitarbeiter = " & strOpenArgs & "", CurrentProject.Connection, adOpenForwardOnly, adLockReadOnly

    strVorname = rs("Vorname")
            strNachname = rs("Nachname")
            strEMail = rs("EMail")

    Me!txtVorname.Value = strVorname
            Me!txtNachname.Value = strNachname
            Me!txtEmail.Value = strEMail

    End Sub

    Womit auch dieser Teil funktioniert. Jetzt muss ich mir nur noch etwas einfallen lassen, wie ich die das Listenfeld im Popup per VBA füttere, ich muss nämlich auch hier einen Parameter übergeben. Schauen wir mal ob ich das hinbekomme.

    Gruß,
    small-step