2015-05-20 7 views
1

У меня есть несколько проблем с кнопкой отмены application.inputbox, кажется, проблема, с которой приходится сталкиваться многим людям, но мне не удалось слишком адаптировать различные решения к мое дело.
Что бы я хотел, это иметь «бесконечный» цикл, который просит пользователя ввести число, пока он не отменит отмену ввода.vba excel inputbox отменить цикл выхода

Чтобы объяснить ситуацию немного, цикл должен запросить потребление в этом месяце, а затем записать месяц в ячейке A1 и потреблении в B1, затем запросить потребление за предыдущий месяц и записать его под и так далее пока пользователь не завершит ввод данных и не отменит их, но если вы отмените отмену, мой код просто напишет FALSE и продолжит работу, несмотря на проверку Data = "FALSE".
Многие решения, которые я нашел в Интернете, не работают, потому что мне нужна программа, чтобы принять 0 в виде числа, отказаться от всего, что не является числом, и продолжать спрашивать в том же месяце, если ok нажата без чего-либо внутри.

Dim Data 
Dim i As Integer, Years As Integer, MonthNum As Integer, LastRow As Integer 

i = 2 
Do While i <= 10 
    MonthNum = Month(DateAdd("m", -i + 1, Date)) 'calculates month 
    Years = year(DateAdd("m", -i + 1, Date))  'calculates year 
    Data = Application.InputBox("Please enter consumption of " & vbNewLine _ 
     & MonthNum & "." & Years, "Imput Consumtion", Type:=1) 
    If Data = "FALSE" Then 
     Exit Do 
    Else 
     Cells(i, 1) = MonthName(MonthNum, 1) & " " & Years 
     Cells(i, 2) = Data 
     i = i + 1 
    End If 
Loop 
LastRow = Range("A:A").Find("*", searchorder:=xlByRows, searchdirection:=xlPrevious).Row 
Range(Cells(i, 1), Cells(LastRow, 2)).Clear 

Я использую application.inputbox, потому что я думал, что это будет работать лучше (я попытался с помощью Type:=1 + 2 и Type:=1 + 8, чтобы решить эту проблему, но не получил никаких полезных результатов), но если есть способ сделать это с регулярным InputBox I Очевидно, с этим все в порядке.
Условие While i <= 0 заключается в том, чтобы остановить цикл, продолжающийся вечно, в моем конечном коде я бы поставил там, что когда-либо было необходимо для выхода.

Любые советы? Спасибо всем!

+3

Ваш случай несогласован, попробуйте 'If Data =" False "Then' – brettdj

+0

' If CStr (Data) = CStr (False) Then' или 'If TypeName (Data) =" Boolean "И Data = False Then' –

+0

Я удалил свой ответ. Придерживайтесь того, что предложил @brettdj. –

ответ

0

Проблема в VBA 0 = False и отсутствует или === компаратор. Таким образом, вы не можете отличать 0 и False от прямого сравнения.

If Data = "False" Then преобразует Data в String и сравните его. Если Data равно 0, то он сравнивает «0» с «False», а если Data False, то он сравнивает «False» с «False». Таким образом, это работает с английскими версиями Excel.

If CStr(Data) = CStr(False) Then или If TypeName(Data) = "Boolean" And Data = False Then не зависит от региона.

Смежные вопросы