VBA Tipp: Rückgabewert aus Formular

Aus DBWiki
Wechseln zu: Navigation, Suche

Aufgabenstellung

Wie kann man ein Formular aufrufen und den Wert eines Textfeldes als Rückgabewert für eine Funktion ähnlich, wie bei einem Dateidialog verwenden?

Lösung

Unter Karl Donaubauers FAQ 6.9 gibt es die die Anregung für dieses Codebeispiel. Wichtig ist es, das Zielformular mit acDialog aufzurufen, denn dann wird der aufrufende Code bis zum Unsichtbar-Werden des Zielformulars angehalten.

'------------------------------------------------------------------
' Prozedur      : HoleFormularWert
' Erstellt      : 15.10.2004 23:43
' Autor         : Walter Grimm
' Zweck         : Rückgabewert aus Formularaufruf
'
' Voraussetzungen:
' Das 'Zielformular' wird vorm Schließen erstmal
' unsichtbar gemacht. Hinter der Schließen Schaltfläche
' steht nur ein lapidares 'Me.Visible = false'
' Der TimerIntervall wird dann auf 1000 eingestellt (1 Sekunde) und
' im TimerEreignis steht: 'Docmd.Close acForm, Me.Name
' so ist sichergestellt, dass das Formular auch geschlossen wird
' ------------------------------------------------------------------
'
Public Function HoleFormularWert(Formular As String, Textfeld As String, _
                                 Optional FilterName As String = "", _
                                 Optional WhereCondition As String = "", _
                                 Optional OpenArgs As String = "") _
                                 As Variant
 
On Error GoTo HoleFormularWert_Error
 
    DoCmd.OpenForm Formular, acNormal, FilterName, _
                   WhereCondition, acFormPropertySettings, _
                   acDialog, OpenArgs
    HoleFormularWert = Nz(Forms(Formular)(Textfeld), "")
 
HoleFormularWert_Exit:
 
   Exit Function
 
HoleFormularWert_Error:
 
      Select Case Err.Number
      'Formular bereits z.B. mit Schließen - Kreuz oder [Alt] + [F4] geschlossen
      Case 2450
 
          Resume HoleFormularWert_Exit
 
      Case Else
 
         MsgBox "Fehler " & Err.Number & " (" & Err.Description & ") in " & _
                "Prozedur HoleFormularWert aus Modul MOD_Tools"
         Resume HoleFormularWert_Exit
 
     End Select
 
End Function

Im Zielformular muss noch folgendes eingebaut werden:

Private Sub cmdEnde_Click() 'Beenden-Schaltfläche
 
    Me.Visible = False
    'Den Timer - Intervall auf 1000 setzen
    Me.TimerInterval = 1000
 
End Sub
 
Private Sub Form_Timer()
 
    DoCmd.Close acForm, Me.Name
 
End Sub
 
'....und wenn jeder Ausgang (Schließen-Kreuz usw...) 'verrammelt' werden soll:
Private Sub Form_Unload(Cancel As Integer)
 
    Cancel = Me.Visible
 
End Sub

Aufruf

Debug.Print HoleFormularWert ("FO_Rueckgabe", "txtRueckgabewert")

Siehe auch