2016-07-20 1 views
0

У меня есть следующие простые таблицы Excel с этой формулой в ячейке A1:Ограничения на Application.Inputbox и клетки отформатирован как текст

= 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, которая формируется как «ТЕКСТ». В противном случае невозможно использовать «30:30» в этой ячейке.

Поэтому я попытался изменить формулу в A1 на следующее:

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

Это делает работу, но тогда система также позволяет значения ниже 30.

У вас есть какие-либо идеи, как решить Эта проблема?

+0

Проблема не значение 'A1', но возвращаемое значение [Application.InputBox] (https://msdn.microsoft.com/en-us/library/office/ff839468.aspx). Это будет текст, пока вы не будете использовать 'Type: = 1' или преобразовать его с помощью' Val (first_row) '. –

ответ

0

Set Application.Inputbox type parameter = 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 
Смежные вопросы