我有以下这个公式的简单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的值。
你知道如何解决这个问题吗?
答案 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