Vba Can';在MS Access中,不要转到连续表单上的特定记录

Vba Can';在MS Access中,不要转到连续表单上的特定记录,vba,ms-access,ms-access-2010,Vba,Ms Access,Ms Access 2010,搜索了又搜索,但找不到此问题的解决方案。我有一个包含许多连续表单子表单的表单。当我在中更改一个值时,比如说在其中一个子窗体上的字段_a,我在其他几个子窗体上运行计算,然后焦点返回到字段_a。但是,在计算过程中,父窗体会发生更新,并且需要更新。因此,当我将焦点返回到原始子窗体时,子窗体上的第一条记录具有焦点。然后我需要去看我正在制作的唱片 我试过几种方法,但都不管用。但是,如果我在代码中移动到指定记录的行上设置调试断点,然后从该行实际运行代码,它就可以工作了!我试着在那里设置一个等待时间,但没有效

搜索了又搜索,但找不到此问题的解决方案。我有一个包含许多连续表单子表单的表单。当我在中更改一个值时,比如说在其中一个子窗体上的字段_a,我在其他几个子窗体上运行计算,然后焦点返回到字段_a。但是,在计算过程中,父窗体会发生更新,并且需要更新。因此,当我将焦点返回到原始子窗体时,子窗体上的第一条记录具有焦点。然后我需要去看我正在制作的唱片

我试过几种方法,但都不管用。但是,如果我在代码中移动到指定记录的行上设置调试断点,然后从该行实际运行代码,它就可以工作了!我试着在那里设置一个等待时间,但没有效果

下面是一段代码:

Call common.CalculateAllLoadTotals _
    (Me, Me.AffiliateID, Me.ClientID, Me.FacilityID, Me.ProposalRevision)

Me.Recordset.FindFirst "[AffiliateID] = '" & Me.AffiliateID & "'" & _
                 " AND [ClientID] = " & Me.ClientID & _
                 " AND [FacilityID] = " & Me.FacilityID & _
                 " AND [ProposalRevision] = " & Me.ProposalRevision & _
                 " AND [EquipmentID] = " & currItemID
我也试过:

dim currRecord as Long
currRecord = Me.CurrentRecord

' >>> REST OF CODE HERE <<<

Call common.CalculateAllLoadTotals _
    (Me, Me.AffiliateID, Me.ClientID, Me.FacilityID, Me.ProposalRevision)

Me.Form.Recordset.Move = currRecord
dim curr记录的长度
currRecord=Me.CurrentRecord

'>>>此处的其余代码我怀疑您正在更新父窗体下面的记录集。这将导致父窗体自动重新查询,因此子窗体位置将返回到第一条记录。 解决方案是更新父窗体上的控件:

Me.Parent!Controlname = XXXX

很抱歉,这将不是一个完整的答案,但它是相当多的评论。 关于您的第一个解决方案,我建议您尝试使用我的.Recordset.Requery 刷新主窗体中的当前记录而不移动位置

关于你的第二个选择-我建议看看书签-在更新记住书签之前,做一些计算,然后移动位置到保存的书签。类似这样的事情-

  Dim rs As DAO.Recordset

  Set rs = Me.RecordsetClone
  rs.FindFirst "[MyPK]=" & Me!cmbFindByPK
  If Not rs.NoMatch Then
     If Me.Dirty Then
        Me.Dirty = False
     End If
     Me.Bookmark = rs.Bookmark
  End If
  Set rs = Nothing

从此处开始

您的子表单是否没有唯一的id字段?子表单?是的。在上面的代码中,您将看到reference to Me.ProposalRevision。标识与父记录匹配的子窗体记录的。“Me.EquipmentID”指的是我想要移动到的实际记录。其他字段是其他主索引字段。您正在子窗体上运行该代码吗?你确定currItemID是一个值吗?没错。就像我说的,如果我用断点中断代码,然后简单地从相关行运行代码,它就可以工作了。代码是有效的,只是似乎没有在那条线上开火。事实上,没有错误发生,它执行,其他一切都是正确的,我只是不移动到记录。保持最高记录。奇怪吧?顺便问一句,你最近有没有进行过编译、修复和反编译?它们常常能治疗奇怪的行为,尽管我不确定这里的情况是否如此。