Application.Inputbox和单元格的限制形式为文本

时间:2016-07-20 08:39:04

标签: excel excel-vba vba

我有以下这个公式的简单excel表 在单元格A1中:

= MID(B1;1;2))

这给了我30的值。

        A           B              C
1      30        30:30
2
3
4
5

现在我想在宏中应用以下循环:

Sub test()
    Do
        first_row = Application.InputBox("Below which row new row(s) should be inserted?" _
                                         & vbCr & "Min: " & Sheets("Sheet1").Range("A1") & "  Max: 500")
        If first_row = False Then Exit Sub
        If first_row > 500 Or first_row < Sheets("Sheet1").Range("A1") Then MsgBox ("Row has to be >= " & Sheets("Sheet1").Range("A1").Value & " and <= 500")
    Loop Until first_row <= 500 And first_row >= Sheets("Sheet1").Range("A1") Or first_row = False
End Sub

在此宏中,用户会收到一个消息框,他必须在该消息框中输入一个数字。此数字必须介于单元格A1(在本例中为30)和500之间的值。

然而,现在一旦用户输入超过100的数字,循环就不接受该值,尽管它在30到500之间。 它只接受100以下的值。

到目前为止,我认为这个问题可能是由单元格B1引起的,单元格B1被形成为&#34; TEXT&#34;。否则就无法使用&#34; 30:30&#34;在这个细胞中。

因此,我尝试将A1中的公式更改为以下内容:

= VALUE(MID(B1;1;2)))

它确实有效,但系统也允许低于30的值。

你知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

设置Application.Inputbox类型参数= 2将返回一个数值。声明first_row As Long将确保first_row始终为数值。

Sub test()
    Dim first_row As Long
    Dim prompt As String

    Do
        prompt = "Below which row new row(s) should be inserted?" & vbCr & "Min: " & Sheets("Sheet1").Range("A1") & "  Max: 500"

        first_row = Application.InputBox(prompt:=prompt, Type:=1)

        If first_row = 0 Then Exit Sub

        If first_row > 500 Or first_row < Sheets("Sheet1").Range("A1") Then MsgBox ("Row has to be >= " & Sheets("Sheet1").Range("A1").Value & " and <= 500")

    Loop Until first_row <= 500 And first_row >= Sheets("Sheet1").Range("A1")
End Sub