excel - 处理错误和 MsgBox VBA Excel 后 TextBox SetFocus 不起作用
问题描述
我在 Excel 中使用 VBA 创建用户表单,发现了一个非常具体的问题。txtPymt
是一个永远不应该为空的文本框。为了防止我这样编码:
Private Sub txtPymt_AfterUpdate()
'Prevent empty textbox
On Error Resume Next
txtPymt = txtPymt.Value + 0
If Err.Number = 13 Then
MsgBox "Please enter a valid value"
txtPymt = Format(0, "Standard")
txtPymt.SetFocus
Err.Clear
Else
'Format entry
txtPymt = Format(txtPymt.Value, "Standard")
End If
End Sub
这样我可以确定文本框只接受数值(否则代码会跳转到错误代码)并避免IsEmpty
空格的漏洞。输入无效后,文本框的值成功更改回 0。但是,我还想在SetFocus
单击. 即使我把它放在我的代码中,我也不能进入同一个文本框。事实上,该功能不适用于任何其他文本框。Ok
MsgBox
SetFocus
我还尝试先将焦点设置到另一个文本框,然后再设置到txtPymt
,并使用Exit
事件而不是,AfterUpdate
但我没有成功。按 TAB 或单击另一个文本字段时会弹出消息框。关于我所缺少的任何想法?
解决方案
尝试这个
Private Sub txtPymt_Exit(ByVal Cancel As MSForms.ReturnBoolean)
On Error Resume Next
txtPymt = txtPymt.Value + 0
If Err.Number = 13 Then
MsgBox "Please enter a valid value"
Cancel = True
Err.Clear
Else
'Format entry
txtPymt = Format(txtPymt.Value, "Standard")
End If
End Sub
推荐阅读
- r - 安装包“devtools”的退出状态非零 - R packge 或 R studio
- modelica - 如何在 Modelica 模型中设置 DynamicSelect 表达式
- java - 将 logbook xml 添加到 spring boot 项目会导致此错误
- typescript - 是的,字符串数组的 InferType 无法按预期工作
- rust - 在 Rust 中读取 Apache Arrow IPC 文件时出现 IoError(“无法填充整个缓冲区”)
- python - Odoo Uncaught TypeError:无法读取未定义设置视图的属性“字符串”
- android - 无法创建转换器(Kotlin、Retrofit 和 Moshi)
- c++ - C++ - 无法使用 Visual Studio 2019/CMake 链接 libyaml
- android - 选择帐户后,带有 Google Drive API 的 Android 应用程序卡住了。为什么?
- javascript - forEach 循环未正确循环