将SetFocus设置为子窗体数据表视图中的控件,其中checkbox = True

时间:2018-05-17 20:25:41

标签: vba ms-access access-vba ms-access-2016

我的表格包含一个子表单,列出多个记录作为数据表。在子表单中有一个复选框类型列,名为"选择"。 (控件名称为chk_select)。

此列用于选择要在单独表单中打开的记录。通过选中复选框检查他们想要打开哪些记录后,按钮会打开一个单独的详细信息表单,其中包含"选择" column = True。

我的问题是,除非重点放在数据表中选中复选框的一行,否则Access无法打开详细信息表单。

例如,我会选中该框以选择我想要打开的记录,然后点击未选中复选框的其他行,并尝试打开详细信息表单,但Access似乎没有看到选择了记录。但是,如果我将光标移动到选中复选框的任何行,则对于选中该复选框的所有记录,详细信息表单将打开。

我目前的解决方法是显示一个消息框,尝试让用户将光标移动到选中该复选框的行。但是我想在打开另一个表单之前自动完成此操作以避免对用户造成任何混淆。

因此,在打开详细信息表单之前,我需要一种方法将SetFocus用于子窗体控件,其中checkbox = True。

有没有办法做到这一点或解决方法?

这是我到目前为止所拥有的。

谢谢。

Private Sub btn_open_estimate2_Click()
If Forms![View Estimates]![TblEstimates subform]![chk_select] = True Then
    'Forms![View Estimates]![TblEstimates subform]![chk_select].SetFocus  ***Need something similar to Where [chk_select]=True
    DoCmd.OpenForm "Edit Estimate", , , "TblEstimates.select = True"
    DoCmd.Close acForm, "View Estimates", acSaveYes
Else
    MsgBox "Please select an Estimate to open, or " & _
    "move the cursor to a selected Estimate to be able to open it", VbMsgBoxStyle.vbExclamation, "No Estimate Selected"
End If
End Sub

2 个答案:

答案 0 :(得分:0)

作为验证复选框的另一种方法。这可以解决您的问题。

If Forms![View Estimates]![TblEstimates subform]![chk_select] = True Then

If Not IsNull(DLookup("[Edit Estimates]", "[TblEstimates]", "[Select] = True")) Then

答案 1 :(得分:0)

使用 RecordsetClone

Private Sub btn_open_estimate2_Click()

    Dim rs As DAO.Recordset

    Set rs = Me![TblEstimates subform].Form.RecordsetClone

    rs. FindFirst "[select] = True"
    If rs.NoMatch Then
        MsgBox "Please select an Estimate to open.", VbMsgBoxStyle.vbExclamation, "No Estimate Selected"
    Else
        DoCmd.OpenForm "Edit Estimate", , , "TblEstimates.select = True"
        DoCmd.Close acForm, Me.Name, acSaveYes
    End If
    rs.Close

End Sub