-1

我目前正在尝试从给定字段中获取数据,但它给了我一个

运行时错误 2465:Microsoft 找不到表达式中引用的字段“Text103”

    Dim engrAnalysisForm As Access.Form
    Call DoCmd.OpenForm("frmEngAnalysis", , , , , acHidden)
    Set engrAnalysisForm = Forms.Item("frmEngAnalysis")

    Dim emissionPhase As String
    emissionPhase = ""
    If IsNull(engrAnalysisForm.Controls.Item("Text103").value) = False Then emissionPhase = engrAnalysisForm.Controls.Item("Text103").value
    workSheet.Cells(26, 11).value = emissionPhase

在此之前,我还有其他要访问的字段:

    Dim specForm As Access.Form
    ' The form cannot be referenced if it is not open.
    Call DoCmd.OpenForm("frmSpcData", , , , , acHidden)
    Set specForm = Forms.Item("frmSpcData")
    Dim referenceNumber As String
    referenceNumber = specForm.Controls.Item("Text20").value

后者的代码略高于前者,而且不仅仅是我无法访问的控制,frmEngAnalysis即使我确信它们 100% 存在,它也是任何控制。出于某种奇怪的原因,我只是无法访问给定表单中的任何控件,即使我可以在非工作代码之上访问其他表单中的其他控件...

感谢您的时间。

4

1 回答 1

0

如果如您所述,控件Text103位于子窗体中,则可能需要从父窗体遍历层次结构到子窗体才能访问控件,例如:

Forms.Item("Parent Form").Controls.Item("Sub Form").Form.Controls("Text103").Value

这也可以写得更简洁:

Forms![Parent Form]![Sub Form].Form.Text103

或者,如果您不确定是否从适当的容器访问控件,则可以使用以下函数来确定可用于您正在使用的表单的控件集:

Function FormControls(frmObj As Form)
    Dim ctl As Control
    For Each ctl In frmObj.Controls
        Debug.Print ctl.Name
    Next ctl
End Function

Ctrl您可以从 VBE 即时窗口(可使用 VBE 中的+访问)调用上述G内容,并且将打印该表单可用的所有控件的名称:

?FormControls(Forms.Item("frmEngAnalysis"))
于 2019-09-22T16:04:02.623 回答