У меня есть несколько проблем с кнопкой отмены 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
заключается в том, чтобы остановить цикл, продолжающийся вечно, в моем конечном коде я бы поставил там, что когда-либо было необходимо для выхода.
Любые советы? Спасибо всем!
Ваш случай несогласован, попробуйте 'If Data =" False "Then' – brettdj
' If CStr (Data) = CStr (False) Then' или 'If TypeName (Data) =" Boolean "И Data = False Then' –
Я удалил свой ответ. Придерживайтесь того, что предложил @brettdj. –