vba excel inputbox取消退出循环

时间:2015-05-20 09:08:28

标签: excel vba excel-vba

我对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 + 2Type:=1 + 8来解决问题但没有得到有用的结果)但是如果有办法的话使用常规输入框来做这件事我很明显 While i <= 0条件只是为了阻止循环永远继续下去,在我的最终代码中,我会把它放在那里我需要退出的条件。

有什么建议吗?谢谢大家!

1 个答案:

答案 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) ThenIf TypeName(Data) = "Boolean" And Data = False Then将独立于区域设置。