从表单中的文本框中捕获文本时,如何修复运行时错误?
Posted
技术标签:
【中文标题】从表单中的文本框中捕获文本时,如何修复运行时错误?【英文标题】:How can I fix a run-time error when capturing text from a textbox in a form? 【发布时间】:2020-02-25 14:31:19 【问题描述】:我正在尝试捕获输入到使用以下模块代码创建的表单实例的文本框中的值:
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
表单非常基本,带有一个确定和取消按钮以及一个名为 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' Invalid use of null。上面的代码是从可比较的 Excel VBA 代码修改而来的,该代码在 Sub Test() 中使用 Userform Show 方法(仅适用于 Excel)而不是 .Visible = True
。
【问题讨论】:
也许在.Visible = True
下试试DoEvents
错误发生在哪一行?
在 ``` Debug.Pring .RptDt`` 行出现错误。
【参考方案1】:
只是补充一点,但在 Command4_Click
事件中更改以下行以添加等号:
Me.Visible = False
这可以改变语法并且是与预期不同的功能。
.Text
属性只能在控件获得焦点时调用。同样,当文本框为空时,如果您在其位置使用.Value
,则会调用null
异常。
有两种解决方法:
选项 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
【讨论】:
谢谢 - 好地方。我试过这个。仍然不能解决问题。Debug.print .RptDt
代码行抛出错误。
感谢这已修复运行时错误,但不幸的是,现在代码一直运行到完成(打开表单,保持打开状态)但没有暂停以允许用户在在代码完成之前形成。
很高兴在解决问题的基础上升级您的解决方案。我可以捕获 Text7 值,但只能通过声明一个模块级变量然后创建另一个子来以现在隐藏的形式显示该值。我会做进一步的调查,试图找到更好的方法。非常感谢您的帮助以上是关于从表单中的文本框中捕获文本时,如何修复运行时错误?的主要内容,如果未能解决你的问题,请参考以下文章
如何更正错误未捕获的 typeError 验证器未定义并防止我的表单在错误时发布