Поле VBA недоступно, даже если форма открыта - PullRequest
0 голосов
/ 20 сентября 2019

В настоящее время я пытаюсь получить данные из указанного поля, но оно дает мне

Ошибка времени выполнения 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%.Я просто не могу получить доступ к каким-либо элементам управления в данной форме по какой-то странной причине, хотя я могу получить доступ к другим элементам управления в других формах чуть выше нерабочего кода ...

Спасибо за ваше время.

1 Ответ

0 голосов
/ 22 сентября 2019

Если, как вы утверждаете, элемент управления 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

Вы можете вызвать вышеупомянутое из окна VBE Immediate (доступно с помощью Ctrl + G изнутриVBE), и имена всех элементов управления, доступных для формы, будут напечатаны:

?FormControls(Forms.Item("frmEngAnalysis"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...