【问题标题】:Run time error 9 on for loop for no reasonfor循环上的运行时错误9无缘无故
【发布时间】:2019-07-29 20:32:28
【问题描述】:

我正在尝试运行红色圈出的循环,根据“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 时,代码不会引发错误,但所有手表都只会说“”。

【问题讨论】:

  • 试试For ii = 0 To 11
  • 不确定fileno 等于什么,但如果它是任何可识别日期格式的String,您可以使用thismo = Month(DateValue(fileno))
  • 嗨@cybernetic.nomad,我试过ii = 0到11。错误消失了,但代码什么也没做。

标签: excel vba loops for-loop time


【解决方案1】:

虽然答案基本上在 cmets 中(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 变量。

【讨论】:

  • 非常感谢@JvdV,fileno 是文件名,这样就不需要循环了。我很感激。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-16
相关资源
最近更新 更多