Как я могу исправить ошибку во время выполнения при захвате текста из текстового поля в форме? - PullRequest
0 голосов
/ 25 февраля 2020

Я пытаюсь зафиксировать значение, введенное в текстовое поле экземпляра формы, который был создан с использованием следующего кода модуля:

Public myForm As Form_Form1    
'Dim myForm As Form_Form1       ' tried this

Sub test()
'Dim myForm As New Form_Form1   ' tried this

Set myForm = New Form_Form1
With myForm
    .Visible = True
'    .SetFocus          ' tried this
'    .Modal = True      ' tried this

    If .IsCancelled Then
        Exit Sub
    End If

    Debug.Print .RptDt

End With

Форма очень базовая c с OK и Отмена кнопка и одно текстовое поле с именем Text7. Код формы кода:

Private cancelling As Boolean

Public Property Get RptDt() As String
    RptDt = Text7.Text
End Property

Public Property Get IsCancelled() As Boolean
    IsCancelled = cancelling
End Property

Private Sub Command2_Click()
    'DoCmd.Close acForm, Me.Name
    Me.Visible = False
    'Me.Visible
End Sub

Private Sub Command4_Click()
    cancelling = True
    'DoCmd.Close acForm, Me.Name
    'MsgBox Me.Name
    'MsgBox Me.OpenArgs

    'Me.Hide
    Me.Visible False
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = VbQueryClose.vbFormControlMenu Then
        cancelling = True
    Me.Visible = False
    End If
End Sub

Когда я запускаю код как есть, я получаю:

"Ошибка времени выполнения" 2185 "Вы не можете ссылаться на свойство или метод для элемента управления, если элемент управления не имеет фокуса "

Я также попытался:

 Public Property Get RptDt() As String
    RptDt = Text7.Value
End Property

Затем я получаю ошибку времени выполнения '94' Неправильное использование нуля. Приведенный выше код был изменен из сопоставимого кода Excel VBA, который использует метод Showform Userform (работает только в Excel) в Sub Test () вместо .Visible = True.

1 Ответ

0 голосов
/ 26 февраля 2020

Просто побочная точка, но для события Command4_Click измените нижнюю строку, чтобы добавить равно:

Me.Visible = False

Это может изменить синтаксис и является функцией, отличной от предназначенной.

Свойство .Text может быть вызвано только тогда, когда элемент управления имеет фокус. Точно так же будет вызвано исключение null, если вы используете .Value вместо него, когда текстовое поле пусто.

Есть два пути решения этой проблемы:

Вариант 1 - Обработка значения NULL

Public Property Get RptDt() As String
    If IsNull(Text7.Text) = True Then
        RptDt = "EmptyString"    'Or whatever string you want to set this to
    Else
        RptDt = Text7.Text
    End if
End Property

Опция 2 - Настройка фокуса

Public Property Get RptDt() As String
    Text7.SetFocus
    RptDt = Text7.Text
End Property
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...