首页 > 解决方案 > for循环上的运行时错误9无缘无故

问题描述

我正在尝试运行红色圈出的循环,根据“mmm”给我“mm”。例如,如果我有“Jun”,我会得到“06”作为回报。一点都不花哨。我尝试以适当的范围“1 到 12”运行此代码,但总是得到“运行时错误 '9':下标超出范围”,因此我尝试将范围降低到“1 到 11”。当我这样做时,我没有得到任何错误,但我也没有得到任何结果。没发生什么事!

如果您在我收到错误时查看手表,我实际上会得到我需要的答案,但只是错误使我无法获得这些答案。有什么我想念的吗?为什么会这样。如果可以的话,我是否应该找到一种方法来抑制运行时错误?

我已经三次检查了数组的大小,它们都是 12。

Option Explicit
    Dim mmmonth() As Variant
    Dim MM() As Variant
    Dim ii As Long
    Dim thismo As String
    Dim thismon As String
Sub Shift1JuneReportMonthly()

        thismon = Mid(fileno, 5, 3)
        mmmonth = Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec")
        MM = Array("01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12")

        For ii = 1 To 12
            If mmmonth(ii) = thismon Then
                thismo = MM(ii)
            End If
        Next ii
End Sub

在我的手表中,即使出现错误,我也会在我的手表中看到预期的正确结果:mmmonth(ii)=12 和 thismo =“06”。但是,当我将索引设置为 1 到 11 时,代码不会引发错误,但所有手表都只会说“”。

标签: excelvbaloopsfor-looptime

解决方案


虽然答案基本上在评论中(0 是您的数组的 LBound),但我认为您可以通过以下方式大幅改进您的代码:

Option Explicit

Dim thismo As String

Sub Shift1JuneReportMonthly()
    thismo = Month(DateValue("01-" & Mid(fileno, 5, 3) & "-2019"))
End Sub

我假设fileno你指的是一个细胞?不确定是否要保留thismo as string或使其成为Long变量而不是。


推荐阅读