【发布时间】:2021-02-16 00:46:25
【问题描述】:
问题:
在计算数字系列中的数字时,如何检测何时达到定义为单独索引数组的里程碑,如下所示:
Dim sects As Variant
sects = Array(0, 3, 9, 14, 26, 29)
Dim i, N As Integer
N = 30
For i = sects(0) To N
Dim m As Integer
m = 1
For m = 1 To sects.Count
MsgBox ("i, m = " + CStr(i) + "," + CStr(m))
If i > sects(m) Then
MsgBox ("i > sects(m) = " + CStr(i) + "," + CStr(sects(m)) + ", " + CStr(m))
End If
Next m
Next i
期望:
对于每个i,看到第一个消息框在第二个之前弹出几次。
内部循环应该循环直到m 命中sects.Count。
观察:
使用上面的代码,内循环总是以 m 等于 1 结束。
内部循环只运行一次然后“中断”。请注意,不会调用显式中断(退出)。
解决方法:
删除 If 条件。
我尝试添加一个Else 子句来手动增加m,但行为没有变化。
问题:
我想我对 VBA 的循环和条件的工作方式有误解。
查阅教程后,我无法弄清楚。
【问题讨论】:
-
该代码是如何运行的?我在
For行上收到 424 错误。 VBA 数组没有Count属性 AFAIK。 -
@SJR 这很奇怪。我在 macOS 上的 PowerPoint 2016 中运行它
-
OK 可能有助于添加这些标签。
-
@SJR 我认为你是对的。问题是
sects.Count。我一定用过它,因为其他一些对象有一个 Count 属性。但是运行代码时没有引发编译器错误! -
>> 代码运行时没有编译器问题。 Option Explicit 添加到您的代码模块(实际上是每个 代码模块)的顶部;然后重新编译。它会突出显示很多错误
标签: vba loops conditional-statements