整数使 Array return 值错误

Integer makes Array return wrong value

我定义了以下数组:

Global Locations_Array() As String
ThisWorkbook.Worksheets("Locations").Activate
TotalRowsLocations = ActiveSheet.UsedRange.Rows.Count
ReDim Locations_Array(1 To TotalRowsLocations, 1 To 6) As String

据此,我希望数组的第一行是第 1 行。 我用这个数组来命名我工作簿中的新工作表,它从 1 开始,到它应该结束的地方结束。

但是现在我用下面的代码再次调用这个数组:

Sub Get_Lat_Lng()
    Dim row As Integer
    Dim data_row As Integer

    Call Fill_Array_Locations

    totalrowsdata = ThisWorkbook.Worksheets("Locations").UsedRange.Rows.Count - 1

    TotalRowsDataLookup = ThisWorkbook.Worksheets(Locations_Array(row, 1)).UsedRange.Rows.Count

    For row = 2 To totalrowsdata
        ThisWorkbook.Worksheets(Locations_Array(row, 1)).Activate
        If (UCase(Locations_Array(row, 5))) = (UCase(ThisWorkbook.ActiveSheet(row, 7))) And (UCase(Locations_Array(row, 6))) = (UCase(Worksheet.ActiveSheet(row, 8))) Then

            For data_row = 1 To TotalRowsDataLookup
                If (UCase(Locations_Array(row, 2)) = UCase(ThisWorkbook.Worksheets(Locations_Array(data_row, 1)).Cells(data_row, 5))) Then
                   Cells(data_row, 7) = Locations_Array(row, 5)
                   Cells(data_row, 8) = Locations_Array(row, 6)
                   Exit For
                End If
            Next data_row

            Exit For
       End If
    Next row
End Sub

它 returns 一个 "Run-time error '9': Subscript out of range" 当我检查这行代码行中的值时,由于是整数,所以值为 0。有没有办法让这个 Integer 从 1 而不是 0 开始?我找到了设置选项:

Option Base 1

但这会干扰我的其余代码。

Dim row As Integer 定义一个整数而不为其赋值将默认为 row = 0。如果你想要一个不同的值,那么你必须在使用它之前分配你想要的值。

尝试:

Dim row As Integer
row = 1

如果您在 Location_Array 的每一行中都有数据直到 totalrowsdata,那么您的 For Loop 将重新定义 row = 2 作为起始值并递增到 totalrowsdata.

了解更改将对您的代码产生的影响的最佳方法是尝试看看。如果它没有像你想象的那样工作,请尝试使用 F8 单步执行每一行并在每个循环中检查 row 的值。

Sub Get_Lat_Lng()
    Dim row As Integer
    Dim data_row As Integer

    Call Fill_Array_Locations

    totalrowsdata = ThisWorkbook.Worksheets("Locations").UsedRange.Rows.Count - 1

    Row = 1 'Row should be at least 1

    '"Row" should be at least 1 before here.
    TotalRowsDataLookup = ThisWorkbook.Worksheets(Locations_Array(row, 1)).UsedRange.Rows.Count

    For row = 2 To totalrowsdata
        ThisWorkbook.Worksheets(Locations_Array(row, 1)).Activate
        If (UCase(Locations_Array(row, 5))) = (UCase(ThisWorkbook.ActiveSheet(row, 7))) And (UCase(Locations_Array(row, 6))) = (UCase(Worksheet.ActiveSheet(row, 8))) Then

            For data_row = 1 To TotalRowsDataLookup
                If (UCase(Locations_Array(row, 2)) = UCase(ThisWorkbook.Worksheets(Locations_Array(data_row, 1)).Cells(data_row, 5))) Then
                   Cells(data_row, 7) = Locations_Array(row, 5)
                   Cells(data_row, 8) = Locations_Array(row, 6)
                   Exit For
                End If
            Next data_row

            Exit For
       End If
    Next row
End Sub