excel - 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 时,代码不会引发错误,但所有手表都只会说“”。
解决方案
虽然答案基本上在评论中(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
变量而不是。
推荐阅读
- regex - 寻找正确的方法来格式化列中的文本并将其与单元格的值进行比较?
- f# - 如何使用 F# 读取降价文件的逐字代码部分
- python - 如何在python中对齐图例?
- python - 为什么在 Python 中拟合一个数组索引可能会改变的函数?
- javascript - esc 键关闭弹出窗口的 VanillaJS 问题
- firebase - Flutter Firebase 配置变量
- ibm-infosphere - 我可以直接将 DataStage 从 8.7 升级到 11.7 吗?
- python - 将列表中的每个元素与下一个元素进行比较
- javascript - 如何使用 prev 和 next 按钮遍历带有嵌套下拉菜单的 Bootstrap 选项卡式导航菜单?
- javascript - 如何让用户选择的背景图像保持不变