我正在尝试将值存储在数组中。我正面临一个问题,它说下标超出了范围。
这是代码,
Sub Trial()
Dim HeaderArray() As Variant
Dim HeaderValue As String
Dim j As Long
Dim i as Long
set wk = Activeworkbook
lastrow_header_Config = Wk.Sheets("Config").Cells(Rows.Count, "W").End(xlUp).Row
j = 1
For i = 2 To lastrow_header_Config
HeaderValue = Wk.Sheets("Config").Range("W" & i).Value
If HeaderValue <> "" Then
HeaderArray(j - 1) = HeaderValue // Subscript out of range error
j = j + 1
End If
Next
End Sub
我犯的错误是什么。请建议。
答案 0 :(得分:4)
在尝试将数据放入其中之前,您需要声明数组的大小。使用COUNTA查找包含您范围内数据的单元格数:
Sub Trial()
Dim HeaderArray() As Variant
Dim HeaderValue As String
Dim lastrow_Header_Config As Long
Dim j As Long
Dim i As Long
Set Wk = ActiveWorkbook
lastrow_Header_Config = Wk.Sheets("Config").Cells(Rows.Count, "W").End(xlUp).Row
ReDim HeaderArray(Application.WorksheetFunction.CountA(Wk.Sheets("Config").Range("W2:W" & lastrow_Header_Config))-1) As Variant
j = 0
For i = 2 To lastrow_Header_Config
HeaderValue = Wk.Sheets("Config").Range("W" & i).Value
If HeaderValue <> "" Then
HeaderArray(j) = HeaderValue
j = j + 1
End If
Next
End Sub
答案 1 :(得分:3)
试一下,看看它是如何为你工作的
密切关注 ReDim HeaderArray(j)
行和 ReDim Preserve HeaderArray(j)
行
Sub Trial()
Dim HeaderArray() As Variant
Dim HeaderValue As String
Dim j As Long
Dim i As Long
Set Wk = ActiveWorkbook
lastrow_header_Config = Wk.Sheets("Config").Cells(Rows.Count, "W").End(xlUp).Row
j = 1
ReDim HeaderArray(j) '<============= initialize your array length
For i = 2 To lastrow_header_Config
HeaderValue = Wk.Sheets("Config").Range("W" & i).Value
If HeaderValue <> "" Then
ReDim Preserve HeaderArray(j) '<================= adjust your array length to accomodate the additional info
HeaderArray(j - 1) = HeaderValue '// Subscript out of range error
j = j + 1
End If
Next
End Sub
您也可以阅读使用option关键字。默认情况下,数组在索引0处具有第一个数据点,因此例如,数组(1)创建一个具有1个数据点的数组,但是要引用该数据点,您将使用数组(0)。如果您希望使用数组(1)引用数组中的第一个数据点,那么您可以在模块的最顶部使用 Option Base 1
关键字。
答案 2 :(得分:1)
第一遍j = 1
。因此,您尝试将HeaderArray(0)
设置为值,而HeaderArray可能基于1
您最终可以使用Option Base 0
,或明确Redim HeaderArray(0 to 10)
(或您需要的任何值)