VBA for...不支持字节数据类型的下一个循环?

6di*_*go9 3 vba

为什么此代码会出现错误 6“溢出”?我糊涂了..

Sub test()
    Dim i as byte
    For i = 3 To 2 step - 1
        Debug.Print i
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)

与整数类型相同。

Ste*_*tef 7

在这种情况下,step也是类型Byte和字节只能是 0 ... 255,因此溢出。如果您只是这样做,也会发生同样的情况

dim i as byte
i = -1
Run Code Online (Sandbox Code Playgroud)

甚至与

For i = 200 To 255
    Debug.Print i
Next
Run Code Online (Sandbox Code Playgroud)

因为,在最后一个循环结束时,在进行比较之前inext语句中递增( <=255),这种递增导致溢出错误。

  • @Pᴇʜ使用字节的唯一充分理由是将字符串转换为字节时,因为那时操作是数字的,因此更快(例如实现编辑距离)。 (4认同)
  • 很好的答案。对此的补充是:[为什么使用 Integer 而不是 Long?](/sf/ask/1848638221/#26409520)。对于“Bytes”也很可能发生这种情况,因此根本没有充分的理由在 VBA 中使用“Byte”或“Integer”。 (3认同)