Mehrere Parameter per ÖffnungsargumentDie Übergabe von Parametern beim Aufruf eines Formulars erfolgt am einfachsten mit dem Öffnungsargument der DoCmd.OpenForm-Methode. Leider kann man damit immer nur einen Parameter übergeben - oder etwa doch nicht?

ArgumentlisteDa man für das Öffnungsargument eine Zeichenkette übergeben kann, lassen sich hier natürlich auch mehrere, durch ein bestimmtes Zeichen getrennte Zeichenfolgen übergeben. Als Trennzeichen bietet sich etwa das Semikolon an, es kann aber auch jedes andere Zeichen verwendet werden. Wichtig ist nur, dass dieses nicht in den übergebenen Zeichenketten vorkommt.
Das Problem ist nur: Wie pflückt man diese Folge aneinandergereihter Zeichenketten wieder auseinander? Die erste Idee ist - ganz klar - ein handprogrammierter Parser, der den Text Stück für Stück untersucht und etwa in ein Array schreibt, von wo aus man leicht auf die einzelnen Elemente zugreifen kann. Texte trennen per VBA-FunktionDen Aufwand kann man sich aber auch sparen: Diese Aufgabe kann nämlich auch eine im Allgemeinen sehr selten verwendete VBA-Funktion namens Split übernehmen.
Das folgende Beispiel zeigt, wie es funktioniert. Der Aufruf erfolgt beispielsweise mit Aufteilen("André;Anja;Maja;Lena").
Public Function Aufteilen(str As String)
Dim strTeil() As String
Dim i As Integer
strTeil = Split(str, ";")
For i = LBound(strTeil) To UBound(strTeil)
Debug.Print i, strTeil(i)
Next i
End Function
Die Funktion Split liest alle Teile der Zeichenkette aus und schreibt sie in das String-Array strTeil. Die folgende For Next-Schleife gibt alle ermittelten Zeichenketten im Direktfenster aus. ... und jetzt mit OpenArgsDer Einsatz mit dem Öffnungsargument ist genauso einfach: Dazu verwenden Sie die Split-Funktion einfach in der Beim Öffnen-Ereignisprozedur des zu öffnenden Formulars und verwenden die einzelnen Zeichenketten anschließend wie gewünscht:
...
Dim strTeil() As String
Dim i As Integer
strTeil = Split(Me.OpenArgs, ";")
For i = LBound(strTeil) To UBound(strTeil)
'...etwas mit den Zeichenketten machen
Next i
... |