MS ACCESS VBA 运行时错误'3021';使用 .MoveNext

Posted

技术标签:

【中文标题】MS ACCESS VBA 运行时错误\'3021\';使用 .MoveNext【英文标题】:MS ACCESS VBA Run-time error '3021'; with .MoveNextMS ACCESS VBA 运行时错误'3021';使用 .MoveNext 【发布时间】:2020-02-24 02:09:48 【问题描述】:

这是我的代码

Dim Reloc, RelocPrev1, RelocPrev2 As String
Dim Blk, Blk2, Lt, Lt2, PrevDate As String
Dim LotComp, BlockComp As Integer


    Dim DB As Database
    Dim RS As Recordset

Private Sub SearchBtn_Click()

    Reloc = Me.RArea.Value

    Set DB = CurrentDb()
    Set RS = DB.OpenRecordset(Reloc, dbOpenDynaset)

    Blk = RS!Block
    Lt = RS!Lot
    Blk2 = Me.BlockTxt
    Lt2 = Me.LotTxt

    BlockComp = StrComp(Blk, Blk2, 1)
    LotComp = StrComp(Lt, Lt2, 1)

    RS.MoveFirst

    Do Until BlockComp = LotComp
        RS.MoveNext
    Loop

   Call RetrieveData

End Sub

RS!Block 和 RS!Lot 工作正常,只有我试过的 RS.Movenext 和 RS.Edit 不起作用。 我的表填充了 50 多行。 表格中的第一项可以拉得很好,我只是无法使用 RS.MoveNext 移动到下一行

有什么想法可以完成这项工作吗?

【问题讨论】:

我已经有一段时间没有使用访问权限了,但我想知道您是否可能会到达 RS 的尽头? ...尝试将And Not RS.EOF 添加到循环条件中,使其看起来像:Do Until BlockComp = LotComp And Not RS.EOF。有一个非常有用的内置调试器。如果我提到的没有帮助,您可以使用它来单步执行 VBA 代码并检查/打印变量。 我尝试放置一个 Msbox 来显示 BlockComp 和 LotComp 的值,它一直保持不变,直到最后说没有找到记录。现在我想知道为什么 EOF 不起作用? 以相关文本表的形式提供样本数据。正如已经建议的那样,逐步调试代码。为什么您期望 BlockComp 或 LotComp 发生变化?循环内部的任何内容都不会导致更改。你想达到什么目的?在此过程中看不到 RS.Edit。 Blk2 和 Lt2 是用户输入。所以当用户输入和表(Blk,Lt)中的数据匹配时,我需要停止循环。接下来是编辑,在我找到该行并提取数据之后 有什么方法可以像在 excel 中一样定位行吗?按 x 和 y 位置? 【参考方案1】:

您显然希望只有 1 条记录符合条件。最好将过滤条件应用于记录集 SQL,以便只提取所需的记录,然后测试记录集是否为空。

要转到满足条件的单个记录,而不是循环记录集,请使用 FindFirst 和 NoMatch。

RS.FindFirst "Block='" & Blk2 & "' AND Lot='" & Lt2 & "'"If Not RS.NoMatch Then

【讨论】:

我会试试这个 FindFirst,希望它有效。非常感谢!!

以上是关于MS ACCESS VBA 运行时错误'3021';使用 .MoveNext的主要内容,如果未能解决你的问题,请参考以下文章

运行查询时出现运行时错误 3075 MS Access VBA

带有子查询的 SQL 查询上的 MS Access VBA 运行时错误 3075

查找文件夹/子文件夹名称时 MS Access VBA 运行时错误“13”类型不匹配

MS Access VBA - 声明变量时变量未定义错误

使用 MS Access VBA 在 .xlsx 文件中插入一行...如何避免损坏文件?

MS Access:导入规范无法通过 VBA