I have been working on passing multiple arguments between forms using the OpenArgs property. I wanted to great a method so that I can pass as many as I want and not have to recreate the wheel each time. This is the Function I came up with:
Code:
Public Function GetFormArgument(allArguments As String, argumentName As String) As Variant
Dim StartOfArgumentName As Integer: StartOfArgumentName = InStr(1, allArguments, argumentName)
Dim StartOfVariable As Integer: StartOfVariable = InStr(StartOfArgumentName, allArguments, ":") + 1
Dim EndOfVariable As Integer: EndOfVariable = IIf(InStr(StartOfVariable, allArguments, "|") = 0, Len(allArguments), InStr(StartOfVariable, allArguments, "|") - 1)
Dim LengthOfVariable As Integer: LengthOfVariable = EndOfVariable - StartOfVariable + 1
GetFormArgument = Mid(allArguments, StartOfVariable, LengthOfVariable)
End Function
On the open form method do this:
Code:
Call DoCmd.OpenForm(FormName:="frm1", DataMode:=acFormEdit, WindowMode:=acDialog, OpenArgs:="Argument1:True|Argument2:Name")
Then to Parse the Argument you need:
Code:
Argument2 = GetFormArgument(Me.OpenArgs, "Argument2")
This code works perfectly fine. I am just posting it here for 2 reasons.
1) The function looks a little complicated, if anyone has any ideas to reduce it a little.
2) Even if no one has any ideas, this may be useful for someone else who wants to be able to do this.