vba - 如何使此代码遍历查询中的每条记录并执行 if 语句?
问题描述
我试图让这段代码遍历查询中的每条记录,并检查每条记录的 JobGrade 字段的值。根据值,2 个字段将加载数字。我正在尝试在表单的一个事件中实现此代码。该代码有效,但仅适用于第一条记录。不确定我是否在错误的事件中实现此代码。
Private Sub Form_Load()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("Unassigned_Jobs") 'name of query
rs.Edit
If rs.Fields("Repeat") = 0 Then 'Repeat = false
If rs.Fields("JobGrade") = 1 Then
rs.Fields("1PercWorkLoad") = 1
rs.Fields("2PercWorkLoad") = 0
ElseIf rs.Fields("JobGrade") = 2 Then
rs.Fields("1PercWorkLoad") = 3
rs.Fields("2PercWorkLoad") = 0
ElseIf rs.Fields("JobGrade") = 3 Then
rs.Fields("1PercWorkLoad") = 8
rs.Fields("2PercWorkLoad") = 2.4
ElseIf rs.Fields("JobGrade") = 4 Then
rs.Fields("1PercWorkLoad") = 24
rs.Fields("2PercWorkLoad") = 4.8
Else: rs.Fields("JobGrade") = 5
rs.Fields("1PercWorkLoad") = 40
rs.Fields("2PercWorkLoad") = 4
End If
ElseIf rs.Fields("Repeat") = -1 Then 'Repeat = true
If rs.Fields("JobGrade") = 1 Then
rs.Fields("1PercWorkLoad") = 1
rs.Fields("2PercWorkLoad") = 0.25
ElseIf rs.Fields("JobGrade") = 2 Then
rs.Fields("1PercWorkLoad") = 3
rs.Fields("2PercWorkLoad") = 0.75
ElseIf rs.Fields("JobGrade") = 3 Then
rs.Fields("1PercWorkLoad") = 8
rs.Fields("2PercWorkLoad") = 0.6
ElseIf rs.Fields("JobGrade") = 4 Then
rs.Fields("1PercWorkLoad") = 24
rs.Fields("2PercWorkLoad") = 1.2
Else: rs.Fields("JobGrade") = 5
rs.Fields("1PercWorkLoad") = 40
rs.Fields("2PercWorkLoad") = 1
End If
End If
rs.Update
rs.MoveNext
rs.Close
Set rs = Nothing
db.Close
End Sub
解决方案
您需要将代码放入一个循环中,以便它遍历记录。
Private Sub Form_Load()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("Unassigned_Jobs") 'name of query
rs.movefirst 'Good habit to make sure you're starting at record 1
rs.Edit
Do Until rs.EOF 'Loop to the end
If rs.Fields("Repeat") = 0 Then 'Repeat = false
If rs.Fields("JobGrade") = 1 Then
rs.Fields("1PercWorkLoad") = 1
rs.Fields("2PercWorkLoad") = 0
ElseIf rs.Fields("JobGrade") = 2 Then
rs.Fields("1PercWorkLoad") = 3
rs.Fields("2PercWorkLoad") = 0
ElseIf rs.Fields("JobGrade") = 3 Then
rs.Fields("1PercWorkLoad") = 8
rs.Fields("2PercWorkLoad") = 2.4
ElseIf rs.Fields("JobGrade") = 4 Then
rs.Fields("1PercWorkLoad") = 24
rs.Fields("2PercWorkLoad") = 4.8
Else: rs.Fields("JobGrade") = 5
rs.Fields("1PercWorkLoad") = 40
rs.Fields("2PercWorkLoad") = 4
End If
ElseIf rs.Fields("Repeat") = -1 Then 'Repeat = true
If rs.Fields("JobGrade") = 1 Then
rs.Fields("1PercWorkLoad") = 1
rs.Fields("2PercWorkLoad") = 0.25
ElseIf rs.Fields("JobGrade") = 2 Then
rs.Fields("1PercWorkLoad") = 3
rs.Fields("2PercWorkLoad") = 0.75
ElseIf rs.Fields("JobGrade") = 3 Then
rs.Fields("1PercWorkLoad") = 8
rs.Fields("2PercWorkLoad") = 0.6
ElseIf rs.Fields("JobGrade") = 4 Then
rs.Fields("1PercWorkLoad") = 24
rs.Fields("2PercWorkLoad") = 1.2
Else: rs.Fields("JobGrade") = 5
rs.Fields("1PercWorkLoad") = 40
rs.Fields("2PercWorkLoad") = 1
End If
End If
rs.MoveNext 'Need this or you'll loop infinitely
Loop
rs.Update
rs.Close
Set rs = Nothing
db.Close
End Sub
推荐阅读
- graphql - 使用 TypeORM getManyWithCount 如何为分页生成 PageInfo
- javascript - 没有id时如何获取列表活动元素的索引
- loops - NIFI 迭代日期
- asp.net-identity - 无法使用 cookie 身份验证执行登录
- asp.net-core - 在 Ef Core 中添加对拥有对象的引用
- css - 尝试制作响应式菜单,但 ::before 和 ::after 出现问题
- python-2.7 - 容器化的 celery worker 不会在 docker-compose up 上启动
- java - EntityManagerFactory 在部署耳朵时在 Weblogic 中关闭
- c# - 无法将“System.String”类型的对象转换为“Microsoft.Office.Interop.Outlook.Store”类型
- php - 将语言设置为 SESSION 的建议