转到下一个记录代码无故激活?
Go to next record code activating for no reason?
微软访问 2016
我在一个表单的当前事件中有如下代码:
Dim linecount As Integer
Dim linenum As Integer
Private Sub Form_Current()
linenum = (DCount("ID", "tbl ShippingHistory", "[sales order] = forms![frm Shipping Information]!combo3") - 1)
If linecount < linenum Then
linecount = linecount + 1
DoCmd.GoToRecord Record:=acNext
End If
End Sub
嗯,实际上还有很多,但这是给我带来麻烦的部分。如果我注释掉整个子部分,这部分仍然会导致问题。
所以当表格打开时,基本上它会计算订单的行数并将其存储在 linenum 中(然后减去一个,因为我不想包括我开始的记录)
然后每次我们浏览当前事件时,它都会将 linecount 加 1 并转到下一条记录。
当 linecount 等于 linenum 时,我们应该在最后一条记录上,我们不想再转到下一条记录。
所有这一切似乎工作正常,直到我们到达最后一条记录,此时出现错误:运行-时间错误 2105:您无法转到指定的记录。当我点击调试按钮时,Access 指示错误出在 DoCmd.GoToRecord Record:=acNext
所以我在 If 语句的开头打了一个断点,然后逐步执行它,结果如下:
它按我预期的那样工作,它计算行数,每次我们转到新记录并激活当前事件时它加 1,当 linecount 最终等于 linenum 时,它跳过其余部分if 语句并转到 end sub
但事件并没有就此结束...
然后...当我按 F8 进行下一步时,它跳回到 End If
完全跳过其他所有内容,然后下一个 F8 将它带到 end sub
再次弹出错误。说我不能去记录...
现在我很困惑,因为转到下一条记录似乎没有再次激活,那么为什么要尝试转到下一条记录?更重要的是,为什么它不结束子并在它最终达到 end sub
时停止,而是返回到 end if
...?
编辑:只是额外的信息,我确实尝试粘贴
else
Exit Sub
到 if 语句,但没有什么不同。
大家早上好,
在@Javier 提出一些测试我的问题的建议后,我找到了我的解决方案。
所以我最终做了什么,而不是试图阻止当前事件触发额外的时间,这看起来很麻烦,我只是改变了事件。我拿了我之前展示的代码:
Dim linecount As Integer
Dim linenum As Integer
Private Sub Form_Current()
linenum = (DCount("ID", "tbl ShippingHistory", "[sales order] = forms![frm Shipping Information]!combo3") - 1)
If linecount < linenum Then
linecount = linecount + 1
DoCmd.GoToRecord Record:=acNext
End If
End Sub
并将其放入按钮点击事件中。
所以现在事件只有在我点击每条记录上的按钮时才会触发。
在验证工作正常后,如果我们不在最后一条记录 (linecount < linenum),我添加了一行调用按钮的点击事件。当这也起作用时(按下第一条记录上的按钮会按我想要的方式浏览所有记录)。我添加了 else docmd.close 这样当我们完成最后一条记录时它会关闭表单
Dim linecount As Integer
Dim linenum As Integer
Private Sub btn_DoNextRecord_Click()
linenum = (DCount("ID", "tbl ShippingHistory", "[sales order] = forms![frm Shipping Information]!combo3") - 1)
If linecount < linenum Then
linecount = linecount + 1
DoCmd.GoToRecord Record:=acNext
**Call btn_DoNextRecord_Click**
Else
DoCmd.Close
End If
End Sub
最后,为了使整个过程自动化,我将 Call btn_DoNextRecord_Click
添加到表单加载事件中,以便打开表单时会第一次按下按钮,运行 通过所有记录然后关闭表格。现在一切似乎 运行 正确。
再次感谢@Javier 让我走上正轨并告诉我如何验证问题!
微软访问 2016
我在一个表单的当前事件中有如下代码:
Dim linecount As Integer
Dim linenum As Integer
Private Sub Form_Current()
linenum = (DCount("ID", "tbl ShippingHistory", "[sales order] = forms![frm Shipping Information]!combo3") - 1)
If linecount < linenum Then
linecount = linecount + 1
DoCmd.GoToRecord Record:=acNext
End If
End Sub
嗯,实际上还有很多,但这是给我带来麻烦的部分。如果我注释掉整个子部分,这部分仍然会导致问题。
所以当表格打开时,基本上它会计算订单的行数并将其存储在 linenum 中(然后减去一个,因为我不想包括我开始的记录)
然后每次我们浏览当前事件时,它都会将 linecount 加 1 并转到下一条记录。
当 linecount 等于 linenum 时,我们应该在最后一条记录上,我们不想再转到下一条记录。
所有这一切似乎工作正常,直到我们到达最后一条记录,此时出现错误:运行-时间错误 2105:您无法转到指定的记录。当我点击调试按钮时,Access 指示错误出在 DoCmd.GoToRecord Record:=acNext
所以我在 If 语句的开头打了一个断点,然后逐步执行它,结果如下:
它按我预期的那样工作,它计算行数,每次我们转到新记录并激活当前事件时它加 1,当 linecount 最终等于 linenum 时,它跳过其余部分if 语句并转到
end sub
但事件并没有就此结束...然后...当我按 F8 进行下一步时,它跳回到
End If
完全跳过其他所有内容,然后下一个 F8 将它带到end sub
再次弹出错误。说我不能去记录...
现在我很困惑,因为转到下一条记录似乎没有再次激活,那么为什么要尝试转到下一条记录?更重要的是,为什么它不结束子并在它最终达到 end sub
时停止,而是返回到 end if
...?
编辑:只是额外的信息,我确实尝试粘贴
else
Exit Sub
到 if 语句,但没有什么不同。
大家早上好,
在@Javier 提出一些测试我的问题的建议后,我找到了我的解决方案。
所以我最终做了什么,而不是试图阻止当前事件触发额外的时间,这看起来很麻烦,我只是改变了事件。我拿了我之前展示的代码:
Dim linecount As Integer
Dim linenum As Integer
Private Sub Form_Current()
linenum = (DCount("ID", "tbl ShippingHistory", "[sales order] = forms![frm Shipping Information]!combo3") - 1)
If linecount < linenum Then
linecount = linecount + 1
DoCmd.GoToRecord Record:=acNext
End If
End Sub
并将其放入按钮点击事件中。
所以现在事件只有在我点击每条记录上的按钮时才会触发。
在验证工作正常后,如果我们不在最后一条记录 (linecount < linenum),我添加了一行调用按钮的点击事件。当这也起作用时(按下第一条记录上的按钮会按我想要的方式浏览所有记录)。我添加了 else docmd.close 这样当我们完成最后一条记录时它会关闭表单
Dim linecount As Integer
Dim linenum As Integer
Private Sub btn_DoNextRecord_Click()
linenum = (DCount("ID", "tbl ShippingHistory", "[sales order] = forms![frm Shipping Information]!combo3") - 1)
If linecount < linenum Then
linecount = linecount + 1
DoCmd.GoToRecord Record:=acNext
**Call btn_DoNextRecord_Click**
Else
DoCmd.Close
End If
End Sub
最后,为了使整个过程自动化,我将 Call btn_DoNextRecord_Click
添加到表单加载事件中,以便打开表单时会第一次按下按钮,运行 通过所有记录然后关闭表格。现在一切似乎 运行 正确。
再次感谢@Javier 让我走上正轨并告诉我如何验证问题!