2

日付が配列に含まれているかどうかを確認するために検証する小さなコードを書き込もうとしています。が表示される行If lists(i) = TodaysDate Thenに到達するまで、コードをスクロールできました。インターネットで検索しましたが、この問題を解決できません。lists(i)subscript out of range

私のマクロは次のようになります。

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

私は比較的新しく、VBA名前付き範囲を使用して配列を取り込もうとしていますが、この部分を解決しようとするのは完全に頭が痛いです。

どんな助けでも大歓迎です。

4

2 に答える 2

2

lists配列を 1 次元配列から 2 次元配列にReDimmedし、疑わしい行 (以下) で 1 つの次元のみを使用して要素を参照しようとしていますが、これがエラーの原因となっています。

If lists(i) = TodaysDate Then

参考までに、Run-time error 9: Subscript out of range存在しない配列要素を参照していることを意味します。

于 2013-02-04T18:06:21.170 に答える
0

これがあなたがしようとしていることだと思いますか?

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。興味のある方は、このリンクをご覧ください。

于 2013-02-04T18:08:04.023 に答える