【问题标题】:vba excel inputbox cancel exiting loopvba excel输入框取消退出循环
【发布时间】: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 + 2Type:=1 + 8 来解决问题但没有得到有用的结果)但是如果有办法使用常规输入框我显然没问题。
While i &lt;= 0 条件只是为了阻止循环永远继续,在我的最终代码中,我会放在那里我需要退出的任何条件。

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

【问题讨论】:

  • 你的情况不一致,试试If Data = "False" Then
  • If CStr(Data) = CStr(False) ThenIf TypeName(Data) = "Boolean" And Data = False Then
  • 我删除了我的答案。坚持@brettdj 的建议。
  • @brettdj 这很好用!如果您将其写成答案,我会将其标记为...但是您能解释一下它是如何工作的吗?我真的看不出与我最初所做的有如此大的不同,但它仍然有很大的不同!
  • False 的值等于 0。因此它退出了我的代码中的循环。 Data = "False"Ucase(Data)= "FALSE" 只是说同一件事的另一种方式

标签: vba excel


【解决方案1】:

问题在于 VBA 0 = False 并且没有 ===== 比较器。所以在直接比较中你不能区分 0 和 False。

If Data = "False" Then 会将Data 转换为字符串并进行比较。如果 Data 为 0,则将“0”与“False”进行比较,如果 Data 为 False,则将“False”与“False”进行比较。所以这适用于英文 Excel 版本。

If CStr(Data) = CStr(False) ThenIf TypeName(Data) = "Boolean" And Data = False Then 将独立于区域设置。

【讨论】:

    猜你喜欢
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 1970-01-01
    相关资源
    最近更新 更多