【问题标题】:VBA Runtime Error 9: Subscript out of rangeVBA 运行时错误 9:下标超出范围
【发布时间】:2013-01-19 11:32:08
【问题描述】:

我一直在尝试编写一小段代码来验证以确认日期是否包含在数组中。当lists(i) 显示subscript out of range 时,我已经能够滚动代码直到到达If lists(i) = TodaysDate Then 行。我已经在 Internet 上进行了搜索,但无法解决此问题。

我的宏如下:

Sub size_an_array()
    Dim i As Integer
    Dim Range_of_Dates As Integer
    Dim TodaysDate As Variant, finish As String
    TodaysDate = Range("Sheet11!c2")
    ThisWorkbook.Worksheets("Sheet11").Activate
    lists = Range("Processed_Dates")

    Range_of_Dates = UBound(lists, 1) - LBound(lists, 1) + 1

     For c = 1 To UBound(lists, 1) ' First array dimension is rows.
         For R = 1 To UBound(lists, 2) ' Second array dimension is columns.
             Debug.Print lists(c, R)
         Next R
     Next c

     x = Range_of_Dates  'UBound(lists, 1)
     ReDim lists(x, 1)

     i = 1
     Do Until i = x
         If lists(i) = TodaysDate Then
             Exit Do
         End If
     Loop

     MsgBox "The date has not been found"

End Sub

我对@9​​87654325@ 比较陌生,我一直在尝试使用命名范围来拉入数组,但我完全无法解决这个问题。

任何帮助将不胜感激。

【问题讨论】:

  • 如果我错了,请纠正我,但你必须比较值,所以在两边加上“.Value”。变量 x 也没有定义,所以错误必须更早出现

标签: vba excel for-loop excel-2010


【解决方案1】:

您已将数组 lists 从一维数组重新调整为二维数组,然后您尝试在可疑行(下)中仅使用一维来引用元素,这会导致您的错误。

If lists(i) = TodaysDate Then

作为参考,Run-time error 9: Subscript out of range 表示您正在引用一个不存在的数组元素。

【讨论】:

    【解决方案2】:

    我认为这就是你正在尝试的?

    Sub size_an_array()
        Dim i As Integer
        Dim TodaysDate As Variant, lists
        Dim bFound As Boolean
    
        '~~> Change SomeWorksheet to the relevant sheet
        TodaysDate = Sheets("SomeWorksheet").Range("c2")
    
        lists = Sheets("Sheet11").Range("Processed_Dates")
    
        i = 1
        Do Until i = UBound(lists)
            If lists(i, 1) = TodaysDate Then
                bFound = True
                Exit Do
            End If
            i = i + 1
        Loop
    
        If bFound = True Then
            MsgBox "The date has been found"
        Else
            MsgBox "The date has not been found"
        End If
    End Sub
    

    如果我理解正确,那么使用.Find 会容易得多。如果您有兴趣,请查看此link

    【讨论】:

    • 感谢您,我也看过您关于 .Find 的文章,稍后会尝试。我曾尝试执行代码,但卡在第一个元素的循环中。我的数组中目前有五个元素(用于测试目的)(41275,41306,41334,41365,41395),它一直在 41275 上循环。我错过了什么吗?非常感谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多