vba excel inputbox отменяет цикл выхода

У меня есть несколько проблем с кнопкой отмены application.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 для решения проблемы, но не получил полезных результатов), но если есть способ сделать это с обычным ящиком ввода я, очевидно, согласен с этим.
Условие While i <= 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 будет независимым от локали.

Interesting Posts

Значение ячейки Excel из 2 ячеек

Назначение Деривационного отдела из списка для выбранного месяца

Конкатенация ячеек в столбце по критериям

целочисленное переполнение в vba, хотя я использую длинный тип данных

Как я могу избавиться от excels смешного автоматического формата при создании файла в php в формате excel

Суммарное значение Если дата находится между несколькими диапазонами дат (матрица)

Как читать excel и выводить переведенные данные на основе прочитанного

Свернуть / развернуть строки в разделе

Есть ли способ сделать вложенный цикл FOR в Excel?

Запись в ячейку включает ScreenUpdating в моей надстройке VSTO

Excel динамически добавляет, если строка содержит что-то

как преобразовать числа чисел в диапазон от 0 до 10

Excel – экономия рабочей книги очень медленно

VBA – Как правильно работать с объединенными ячейками / большими зонами?

Excel – удалить весь текст перед символом в последовательности

Давайте будем гением компьютера.