首页 > 解决方案 > 处理错误和 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单击. 即使我把它放在我的代码中,我也不能进入同一个文本框。事实上,该功能不适用于任何其他文本框。OkMsgBoxSetFocus

我还尝试先将焦点设置到另一个文本框,然后再设置到txtPymt,并使用Exit事件而不是,AfterUpdate但我没有成功。按 T​​AB 或单击另一个文本字段时会弹出消息框。关于我所缺少的任何想法?

标签: excelvba

解决方案


尝试这个

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

推荐阅读