Function Randomizer() As Integer
'Code courtesy of
'Joe Foster
'Source: http://www.mvps.org/access/queries/qry0011.htm
Static AlreadyDone As Integer
If AlreadyDone = False Then Randomize: AlreadyDone = True
Randomizer = 0
End Function
Function RandomOrders(pMyTable As String, pNum As Integer) As String
'*******************************************
'Purpose: Returns pNum randomly selected
' orders from Northwind's Orders
' table for each distinct employee.
'Coded by: raskew
'Calls: Function Randomizer, written by
' Joe Foster and displayed in the Access Web at
' http://www.mvps.org/access/queries/qry0011.htm
'Inputs: from debug window: ? RandomOrders("zTestRan", 5)
'Output: table zTestRan
'*******************************************
Dim db As Database
Dim rs As Recordset
Dim tName As String, strSQL As String
Dim n As Integer, i As Integer, empHold As Integer
Set db = CurrentDb
tName = pMyTable
On Error Resume Next
'Step (1) Does table tName exist? If so, delete it.
db.Execute "DROP TABLE " & tName & ";"
Err = 0
'*******************
' Step (2) ' Create new table.
strSQL = "CREATE TABLE " & tName & " (EmployeeID Long," _
& " OrderID Long, OrderDate Date" & ");"
db.Execute strSQL
'*******************
' Step (3) ' Create recordset of employees
strSQL = "SELECT distinct EmployeeID FROM Orders;"
Set rs = db.OpenRecordset(strSQL)
' count the employees
rs.MoveLast
n = rs.RecordCount
rs.MoveFirst
'*******************
' Step (4) Create random listing of orders for each employee
For i = 1 To n 'loop thru the listing of employees
empHold = rs!EmployeeID
' create append query
strSQL = "INSERT INTO " & tName & " ( OrderID, EmployeeID, OrderDate )" _
& " SELECT TOP " & pNum & " Orders.OrderID, Orders.EmployeeID, Orders.OrderDate" _
& " FROM Orders" _
& " WHERE (((Orders.EmployeeID)= " & empHold & " ) AND ((randomizer())=0))" _
& " ORDER BY Rnd(IsNull([Orders].[OrderID])*0+1);"
' execute the query
db.Execute strSQL
rs.MoveNext
Next i
'*******************
docmd.OpenTable tName, acViewNormal
RandomOrders = "Open table " & tName & " to view the results."
' Cleanup
rs.Close
db.Close
Set rs = Nothing
Set db = Nothing
End Function