访问VBA中的循环记录
问题描述:
我试图根据在“作业”列中分配的作业类型将循环名称放入“任务”列中。我的表看起来像这样的例子:访问VBA中的循环记录
我的代码如下:
Sub macro2()
Dim Rst As DAO.Recordset
Set Rst = CurrentDb.OpenRecordset("table1")
Dim employee(2) As String
employee(0) = "empname1"
employee(1) = "empname2"
Dim i As Integer
With Rst
i = 0
Rst.MoveFirst
Do While Not .EOF
If Rst.Fields("JOB") = "LETTER" Then
Rst.Edit
Rst.Fields("Task").value = employee(i)
Rst.Update
End If
.MoveNext
i = i + 1
If i > 2 Then i = 0
Loop
End With
DoCmd.Requery
End Sub
的问题是,有时“缺失”的任务,我不知道为什么。
它应该不会保持循环的2名入列,但它。但是,有时在运行几次之后,它会这样做。在开启DB后,它不会,并且在完成后会出现如上。有任何想法吗?
答
这片的代码允许i
为具有2
i = i + 1
If i > 2 Then i = 0
但是UBound(employee)
的值是1,这意味着当i
是2 employee(i)
应该抛出一个“下标超出范围”错误。但是你没有报告得到这个错误,所以我不明白发生了什么事情。
此外,您的第一个屏幕截图显示作业列中的“Letter”和“Change”,但第二个屏幕截图全部显示为“Letter”。这是另一个困惑。
也许你需要用查询加载记录集而不是整个表。
Set Rst = CurrentDb.OpenRecordset("SELECT Job, Task FROM table1 " & _
"WHERE Job = 'Letter'")
然后你通过记录行移动,拨动i
0和1之间
i = IIf(i = 1, 0, 1)
它看起来对我来说,这些变化可能让你的代码工作,你打算。但是考虑一种更灵活和更容易维护的方法。将员工姓名保存在一个表中,并打开第二个记录集,rs员工,以保存这些员工姓名。当你移动第一个记录集时,Rst,也提前第二个:rsEmployees.MoveNext
如果你达到rsEmployees.EOF
,那么应该“循环”分配。
该方法允许您通过更新employees表来添加/删除可用池中的员工。每次添加/删除员工时,您都不需要修改VBA代码。
对不起关于屏幕截图的差异,我试图看看当我将所有4个任务设为同一个名称时会发生什么。无论是2,3或4个任务是否分配,都会发生此问题,这正是我正在测试的。我的想法是创建一个表单,允许运行宏的人员选择可供分配的人员的复选框,然后根据检查的人员来匹配大小以适应大小,然后将其分配出去。然而,不同的员工会做不同的事情,所以我需要区分谁做什么以及他们是否在场。 – 2013-02-10 01:52:08
好的,我有一个预感,这件事情会比问题更复杂。 ;-)所以,你有一些未定数字(但可能大于2)的员工姓名。在*你为*任务*分配一个名字之后增加'i' *,但是如果'i = UBound(employee)+ 1',则将'i'设为零。这仍然留下了如何收集名称以加载到数组中的问题,但我们假设您已经完成了该部分。 – HansUp 2013-02-10 01:59:38
感谢您的想法,我将尝试按照建议创建第二个记录集,并使用复选框指示符指示是否应该导入,分配或跳过这些人员处理的作业名称。感谢上面的例子,我打算玩一下,看看我想出什么 – 2013-02-10 02:02:15