【发布时间】:2015-05-20 09:08:28
【问题描述】:
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 条件只是为了阻止循环永远继续,在我的最终代码中,我会放在那里我需要退出的任何条件。
有什么建议吗?谢谢大家!
【问题讨论】:
-
你的情况不一致,试试
If Data = "False" Then -
If CStr(Data) = CStr(False) Then或If TypeName(Data) = "Boolean" And Data = False Then -
我删除了我的答案。坚持@brettdj 的建议。
-
@brettdj 这很好用!如果您将其写成答案,我会将其标记为...但是您能解释一下它是如何工作的吗?我真的看不出与我最初所做的有如此大的不同,但它仍然有很大的不同!
-
False 的值等于 0。因此它退出了我的代码中的循环。
Data = "False"或Ucase(Data)= "FALSE"只是说同一件事的另一种方式