【问题标题】:Inputbox prevent user from pressing enter when value is blank输入框阻止用户在值为空白时按 Enter
【发布时间】:2020-08-17 08:38:57
【问题描述】:

我有以下代码: Range("P" & Rows.Count).End(xlUp).offset(1).Value = InputBox("INTRODUCE ACT JUSTIFICATIV") 用户必须在输入框中输入字母

如果输入框中的值为空白并带有个性化错误消息,我想防止用户意外按 Enter。

然后按取消按钮退出子。

【问题讨论】:

  • 尝试创建一个UserForm 来代替InputBox。你可以自定义它来做你需要的事情

标签: excel vba inputbox


【解决方案1】:

将您的用户输入设置为一个变量,然后测试它是否有效。

Dim usrInput as String

Do
    usrInput = InputBox("INTRODUCE ACT JUSTIFICATIV")

    If usrInput = vbNullString Then
        MsgBox "Your Error Message"
    End If
Loop While usrInput = vbNullString

【讨论】:

  • 是否可以循环直到用户输入非空白值?
  • @Tom 这个循环直到用户输入一个非空白输入。为了能够处理取消按钮的按下,我建议使用Application.InputBox,它返回一个Variant。如果用户按下取消或 x 按钮,则返回 False
【解决方案2】:

我不认为你可以强制InputBox 仅在输入某些内容时关闭。相反,将结果读入变量并循环,直到输入有效的内容

Dim answer as string, okay As Boolean
answer = ""
okay = False
Do While Not okay
    answer = InputBox("INTRODUCE ACT JUSTIFICATIV")
    On Error Resume Next
    okay = Range(answer & "1").Address <> ""
    On Error GoTo 0
Loop

现在,输入框将弹出,直到输入有效的列。

【讨论】:

    【解决方案3】:

    请尝试下一种方法:

    Sub testInputBoxValidate()
      Dim strInpB As String
      strInpB = InputBox("INTRODUCE ACT JUSTIFICATIV")
      If strInpB = "" Then MsgBox "You did not introduce anything!": Exit Sub
      Range("P" & Rows.count).End(xlUp).Offset(1).Value = strInpB
    End Sub
    

    还有一个强制用户输入内容的变体:

    Sub testInputBoxValidate()
      Dim strInpB As String
    Start:
      strInpB = InputBox("INTRODUCE ACT JUSTIFICATIV")
      If strInpB = "" Then MsgBox "You did not introduce anything!": GoTo Start
      Range("P" & Rows.count).End(xlUp).Offset(1).Value = strInpB
    End Sub
    

    我还建议您尝试更多其他检查。例如,“ACT JUSTIFICATIV”不能有特定的长度(位数)?像“xxxx###”这样的特定模式,其中“###”是一个三 (x) 位数字?

    【讨论】:

      【解决方案4】:

      您可以使用Application.InputBox,它可以让您获得更多控制权。系统将提示用户,直到他们输入非空字符串或按下取消或 x 按钮

      Dim vInput As Variant: vInput = ""
      Do
          vInput = Application.InputBox("INTRODUCE ACT JUSTIFICATIV", Type:=2) '2 -> String type
          If vInput = False Then 'User pressed Cancel or x button
              Exit Do
          ElseIf Len(vInput) > 0 Then 'User has entered non-blank value
              Range("P" & Rows.Count).End(xlUp).Offset(1).Value = vInput
              Exit Do
          End If
      Loop
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-10-28
        • 2023-03-21
        • 2018-04-07
        • 2014-12-16
        • 1970-01-01
        • 2013-04-06
        • 1970-01-01
        相关资源
        最近更新 更多