我想通過以下方式分配在一個循環的方式銷售人員(rsSalespeople)給客戶(rsCustomers)循環:通過記錄與VBA
- 瀏覽到第一個客戶,將第一個營業員的顧客。
- 轉到下一位客戶。如果rsSalesPersons不在EOF處,請轉到Next SalesPerson;如果rsSalesPersons在EOF處,則MoveFirst將循環回第一個SalesPerson。將此(當前)SalesPerson分配給(當前)客戶。
- 重複步驟2直到rsCustomers在EOF處(EOF = True,即結束記錄集)。
它已經一段時間,因爲我處理VBA,所以我有點生疏,但這裏是我想出了,至今:
Private Sub Command31_Click()
'On Error GoTo ErrHandler
Dim intCustomer As Integer
Dim intSalesperson As Integer
Dim rsCustomers As DAO.Recordset
Dim rsSalespeople As DAO.Recordset
Dim strSQL As String
strSQL = "SELECT CustomerID, SalespersonID FROM Customers WHERE SalespersonID Is Null"
Set rsCustomers = CurrentDb.OpenRecordset(strSQL)
strSQL = "SELECT SalespersonID FROM Salespeople"
Set rsSalespeople = CurrentDb.OpenRecordset(strSQL)
rsCustomers.MoveFirst
rsSalespeople.MoveFirst
Do While Not rsCustomers.EOF
intCustomer = rsCustomers!CustomerID
intSalesperson = rsSalespeople!SalespersonID
strSQL = "UPDATE Customers SET SalespersonID = " & intSalesperson & " WHERE CustomerID = " & intCustomer
DoCmd.RunSQL (strSQL)
rsCustomers.MoveNext
If Not rsSalespeople.EOF Then
rsSalespeople.MoveNext
Else
rsSalespeople.MoveFirst
End If
Loop
ExitHandler:
Set rsCustomers = Nothing
Set rsSalespeople = Nothing
Exit Sub
ErrHandler:
MsgBox (Err.Description)
Resume ExitHandler
End Sub
我的表像這樣定義的:
Customers
--CustomerID
--Name
--SalespersonID
Salespeople
--SalespersonID
--Name
隨着十個客戶和銷售人員5,我想要的結果想這樣的:
CustomerID--Name--SalespersonID
1---A---1
2---B---2
3---C---3
4---D---4
5---E---5
6---F---1
7---G---2
8---H---3
9---I---4
10---J---5
上述代碼適用於通過Salespeople記錄集進行初始循環,但在記錄集結束時發現錯誤。無論EOF如何,它似乎仍會嘗試執行rsSalespeople.MoveFirst命令。
我不是檢查的rsSalespeople.EOF正常嗎?任何想法讓這個代碼工作?
不回答你的問題,但爲什麼運行在你的循環中的更新語句,如果你已經有一個開放的DAO記錄,而不是隻更新當前行與rsCustomers !SalespersonID = rsSalespeople!SalespersonID – JohnFx 2010-04-05 16:00:01
根據您添加新客戶多少次並且必須運行此批次,您列表中的前幾名銷售人員將獲得不成比例的分配客戶數量。也許你可以按現有客戶的數量對銷售人員名單進行分類? – JeffO 2010-04-05 17:39:22