我对application.inputbox
的取消按钮有一些问题,这似乎是一个很多人必须处理的问题,但我还没有真正管理过各种解决方案来适应我的情况。
我想要的是有一个“无限”循环,要求用户输入一个数字,直到他在输入框上按下取消。
为了解释这种情况,循环应该要求本月消费,然后在单元格A1中写下月份,在B1中消费,然后询问上个月的消费并将其写在下面,依此类推,直到用户完成要输入的数据并按下取消,但如果按取消,我的代码将写入FALSE并继续运行,尽管Data = "FALSE"
检查。
我在网上发现的许多解决方案都不起作用,因为我需要程序接受0作为数字,拒绝任何不是数字的东西,并且如果没有任何内容就按下确定,则在同一个月继续询问。
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
条件只是为了阻止循环永远继续下去,在我的最终代码中,我会把它放在那里我需要退出的条件。
有什么建议吗?谢谢大家!
答案 0 :(得分: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
将独立于区域设置。