访问VBA中的循环记录

访问VBA中的循环记录

问题描述:

我试图根据在“作业”列中分配的作业类型将循环名称放入“任务”列中。我的表看起来像这样的例子:访问VBA中的循环记录

example table

我的代码如下:

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 

的问题是,有时“缺失”的任务,我不知道为什么。

table pic did not pull

它应该不会保持循环的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代码。

+0

对不起关于屏幕截图的差异,我试图看看当我将所有4个任务设为同一个名称时会发生什么。无论是2,3或4个任务是否分配,都会发生此问题,这正是我正在测试的。我的想法是创建一个表单,允许运行宏的人员选择可供分配的人员的复选框,然后根据检查的人员来匹配大小以适应大小,然后将其分配出去。然而,不同的员工会做不同的事情,所以我需要区分谁做什么以及他们是否在场。 – 2013-02-10 01:52:08

+0

好的,我有一个预感,这件事情会比问题更复杂。 ;-)所以,你有一些未定数字(但可能大于2)的员工姓名。在*你为*任务*分配一个名字之后增加'i' *,但是如果'i = UBound(employee)+ 1',则将'i'设为零。这仍然留下了如何收集名称以加载到数组中的问题,但我们假设您已经完成了该部分。 – HansUp 2013-02-10 01:59:38

+0

感谢您的想法,我将尝试按照建议创建第二个记录集,并使用复选框指示符指示是否应该导入,分配或跳过这些人员处理的作业名称。感谢上面的例子,我打算玩一下,看看我想出什么 – 2013-02-10 02:02:15