【问题标题】:VBA conditions for a UserForm用户窗体的 VBA 条件
【发布时间】:2020-02-05 13:05:46
【问题描述】:

我是 VBA 新手。我想对我在用户窗体中的输入设置一些限制。我希望我的变量是一个数字(用户应该选择行号),如果她/他输入文本或将其留空,则会出现错误消息。这是我的代码:

Public Sub AddPolicy_Click()
Dim RowNumber As Integer
RowNumber = TextBox1.Value
If RowNumber = "" Then
    MsgBox "Error Row Number- enter a value!", vbOKCancel + vbCritical, "Error"
ElseIf VarType(RowNumber) = vbString Then
    MsgBox "Error Row Number- enter a  Numerical Value!", vbOKCancel + vbCritical, "Error"
End If
Range("A1") = RowNumber
End Sub

我知道问题是因为我将变量 RowNumber 声明为整数,但如果我不这样做,软件将无法识别我的变量,并向我显示文本、空白和数字的错误消息。所以我不知道我该如何解决这个问题。

提前感谢您的帮助

【问题讨论】:

    标签: vba if-statement integer


    【解决方案1】:

    这个怎么样?

    Public Sub AddPolicy_Click()
    Dim RowNumber As String
    RowNumber = TextBox1.Value
    If RowNumber = "" Then
        MsgBox "Error Row Number- enter a value!", vbOKCancel + vbCritical, "Error"
    ElseIf Not IsNumeric(RowNumber) Then
        MsgBox "Error Row Number- enter a  Numerical Value!", vbOKCancel + vbCritical, "Error"
    End If
    Range("A1") = RowNumber
    End Sub
    

    编辑:关于字符串、整数等的声明:我知道人们往往对此非常挑剔。但对于大多数宏来说,它在效率方面确实没有什么不同。例如,在这里你不会通过更好地声明它来获得任何东西。即使只是不调暗它也能很好地工作。

    【讨论】:

    • 你好。太感谢了。有效。我有个问题。所以基本上,在“ElseIf not”中你说:如果它不是一个数字(并且因为 RowNumber As String)那么显示其他消息?
    • 编辑:我误解了。是的你是对的。实际上 IsNumeric() 也排除了字符串而不会给您错误。所以即使你给它“123”而不是123,它也会把它评估为数字。但是 KS123 将无法通过 IsNumeric 检查,然后显示第二个 msgbox。
    • 我肯定会 Dim 所有变量 - 我强烈建议在 VBE 选项中单击“需要变量声明”(这样您就可以在每个模块的顶部看到 Option Explicit)。如果您在代码中的任何位置键入 RoNumber 而不是 RowNumber,它会很乐意为您创建该变量,您会花很长时间想知道为什么您的变量不包含正确的值。
    【解决方案2】:

    你可以试试这个代码。
    文本框上的更改事件将阻止您输入除数字以外的任何内容。

    Private LastText As String '<-- place this at the very top of the module.
    
    Private Sub TextBox1_Change()
        With Me.TextBox1
            'Allow only whole numbers.
            If .Text Like "[!0-9]" Or Val(.Text) < -1 Or .Text Like "?*[!0-9]*" Then
                .Text = LastText
            Else
                LastText = .Text
            End If
        End With
    End Sub
    
    Private Sub TextBox1_AfterUpdate()
        'Remove any leading or trailing spaces
        '(although the Change event should stop you entering spaces).
        Me.TextBox1 = Trim(Me.TextBox1)
    End Sub
    
    Private Sub AddPolicy_Click()
        With Me.TextBox1
            If .Value <> "" Then
                'Fully qualify where you want to put the data, or it will
                'put it in A1 of whichever sheet happens to be active.
                ThisWorkbook.Worksheets("Sheet1").Range("A1") = Me.TextBox1
            Else
                MsgBox "Invalid or no value entered.", vbCritical + vbOKOnly
            End If
        End With
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-09
      • 2018-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-10
      相关资源
      最近更新 更多