:
You can pass a value list (only as literal values, not of variables), or
named arguments (in which case variables can be used, so this is the more
usual method) via the OpenArgs mechanism using the following module developed
by Stuart McAll and myself:
''''module begins''''
Private Const OFFSET As Long = 127
Private Const ASSIGNOP As String = "=="
Function Arg(buffer, idx) As Variant
If IsNumeric(idx) Then
i& = InStr(1, buffer, Chr(idx + OFFSET - 1))
token$ = Chr(idx + OFFSET)
i& = InStr(i&, buffer, ASSIGNOP) + 2
Else
i& = InStr(1, buffer, idx) + Len(idx) + 2
token$ = Chr(Asc(Mid(buffer, InStr(1, buffer, idx) - 1, 1)) + 1)
End If
Arg = Mid(buffer, i&, InStr(i&, buffer, token$) - i&)
End Function
Function Argname(buffer, idx) As String
i& = InStr(1, buffer, Chr(idx + OFFSET - 1))
token$ = Chr(idx + OFFSET)
Argname = Mid(buffer, i& + 1, InStr(i&, buffer, ASSIGNOP) - (i& + 1))
End Function
Function ArgCount(buffer) As Long
ArgCount = Asc(Right(Chr(OFFSET) & buffer, 1)) - OFFSET
End Function
Sub AddArg(buffer, Argname, argval)
If Len(buffer & "") = 0 Then buffer = Chr(OFFSET)
If IsNumeric(Argname) Then Argname = ArgCount(buffer) + 1
buffer = buffer & Argname & ASSIGNOP & argval & Chr(Asc(Right(buffer,
1)) + 1)
End Sub
Sub AddArgList(buffer, ParamArray Tokens())
For i& = 0 To UBound(Tokens)
AddArg buffer, i& + 1, Tokens(i&)
Next
End Sub
''''module ends''''
Its used as follows:
Values can be passed individually as named arguments:
Dim args As String
' add some named arguments
AddArg args, "First", "Apples"
AddArg args, "Second", "Pears"
AddArg args, "Third", "Bananas"
Or as an arguments list:
AddArgList args, "Oranges", "Peaches", "Grapefruit"
The list is then passed to the form with:
DoCmd.OpenForm "frmMyForm", OpenArgs:=args
In the form's module the values can be extracted like so:
Dim args As String, i As Integer
args = Me.OpenArgs
' get some named named arguments
Debug.Print Arg(args, "First")
Debug.Print Arg(args, "Second")
Debug.Print Arg(args, "Third")
' get some arguments by ordinal position
Debug.Print Arg(args, 4)
Debug.Print Arg(args, 5)
Debug.Print Arg(args, 6)
' list all arguments
For i = 1 To ArgCount(args)
Debug.Print Argname(args, i), Arg(args, i)
Next i
' get count of arguments
Debug.Print ArgCount(args)
You can find a demo at:
http://community.netscape.com/n/pfx...yMessages&tsn=1&tid=24091&webtag=ws-msdevapps
Ken Sheridan
Stafford, England