整数使 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
我定义了以下数组:
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