Excel 无原因的for循环运行时错误9

Excel 无原因的for循环运行时错误9,excel,vba,loops,for-loop,time,Excel,Vba,Loops,For Loop,Time,我试图运行红色圆圈的循环,根据“mmm”给出“mm”。例如,如果我有“Jun”,我会得到一个“06”作为回报。一点也不奇怪。我尝试以适当的范围“1到12”运行这段代码,并且总是得到“运行时错误'9:下标超出范围”,因此我尝试将范围降低到“1到11”。当我这样做时,我没有得到错误,我没有得到错误,但我也没有得到结果。什么也没发生 如果你看手表,当我得到错误时,我实际上得到了我需要的答案,但这只是错误使我无法得到任何答案。我有什么遗漏吗?为什么会发生这种情况。如果可以的话,我是否应该找到一种抑制运行

我试图运行红色圆圈的循环,根据“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时,代码不会抛出错误,但所有手表都会说“.”

答案基本上在注释中(0是数组的LBound),我认为您可以通过以下几点大幅改进代码:

Option Explicit

Dim thismo As String

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

我假设
fileno
是您所指的单元格?不确定是否要将
thismo保留为字符串
,或使其成为
变量isntead。

答案基本上在注释中(0在数组中绑定),我认为您可以通过以下几点大幅度改进代码:

Option Explicit

Dim thismo As String

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

我假设
fileno
是您所指的单元格?不确定是否要将
thismo保留为字符串
或将其设置为
Long
变量isntead。

尝试
ii=0到11
不确定
fileno
等于什么,但如果它是任何可识别日期格式的
string
,则可以使用
thismo=Month(DateValue(fileno))
Hi@controlnetic.nomad,我试过ii=0到11。错误消失了,但代码什么也没做。尝试ii=0到11的
不确定
fileno
等于什么,但是如果它是任何可识别日期格式的
字符串,您可以使用
thismo=Month(DateValue(fileno))
Hi@controlnetic.nomad,我已经尝试过ii=0到11。错误消失了,但代码什么也没做。非常感谢@JvdV,fileno是文件名,这样就不需要在那里进行循环了。非常感谢@JvdV,fileno是文件名,这样就不需要循环了。我很感激。