在Excel中增加单元格值但LOOP不会相应地运行

时间:2017-12-17 16:04:26

标签: excel-vba vba excel

我想循环一个定义了UpperLimit,LowerLimit&以3秒的间隔递增。但Do While循环不会停止......它会继续递增

Sub IntervalIncrement()
varValueL = InputBox("Input LowerBound")
varValueU = InputBox("Input UpperBound")
varValueI = InputBox("Input increment")
ActiveCell.Value = varValueL
Application.Wait (Now + TimeValue("0:00:03"))
    Do While (ActiveCell.Value < varValueU)
    ActiveCell.Value = ActiveCell.Value + varValueI
    Application.Wait (Now + TimeValue("0:00:03"))
    Loop
End Sub

1 个答案:

答案 0 :(得分:1)

这是因为您的变量varValueU设置为String而不是Integer(或更一般的数值)。

您应该通过更改此问题来解决问题:

Do While (ActiveCell.Value < varValueU)

......用这个:

Do While (ActiveCell.Value < CInt(varValueU))

问题1:

  • 为什么varValueU被定义为String
  • 它实际上是一个Variant,因为你从来没有声明它,但是因为你通过一个InputBox得到它,它有默认类型String(因为你可以输入任何东西)它被解释作为String

问题2:

  • 为什么它理解ActiveCell.Value = ActiveCell.Value + varValueI(其中varValueI也是String)呢?
  • 因为您的变量未声明。这是一个非常好的习惯(实际上,在大多数语言中是强制性的)来声明变量的类型以避免这种问题。如果您未申报,则您的类型将为Variant。在您的特定情况下,在操作中找到的Variant(如总和ActiveCell.Value + varValueI)尝试被评估为数字并成功,但它与解释器在比较中给出的处理方式不同(如条件ActiveCell.Value < varValueU

问题3:

  • 如何确保声明所有变量并避免此类事件?
  • 在模块顶部添加Option Explicit,编译器将强制您明确声明代码中的每个变量。