我正在研究一个用于工作的解析器。基本上,我有一个充满数据行的 excel 文档,我需要解析这些数据行并将其存储到一个多维数组中才能使用。
这是我到目前为止的代码:
Dim a
Dim iRows As Long
Dim i As Integer
Dim aArray() As Variant
a = Array(2,3,4,5,6,9,10,14,19,21,23,25,29,38)
iRows = ActiveWorkbook.Sheets(1).UsedRange.Rows.Count
ReDim aArray(iRows, UBound(a))
For i = 2 To iRows + 1
For x = 0 To UBound(a)
aArray(i - 2, x) = ActiveSheet.Cells(i, a(i - 2)).Value
Next x
Next i
请记住,i = 2
和iRows + 1
的偏移量是忽略标题行
问题是当我尝试输出它时,我发现所有行都相同,因此aArray(0,1)
和aArray(1,1)
是相同的值,它们应该是 excel 文件不同行的不同值。
每行应该存储 14 列,但是当我尝试输出位置 9 之后的任何值时,我会收到这样的超出范围的错误
ActiveSheet.Cells(1, 1).Value = aArray(10, 0)
ActiveSheet.Cells(1, 2).Value = aArray(11, 0)
根据我用来指定要在主数组中存储哪些值的小数组,它们应该是 aArray 中包含的每个子数组的总位置 14 个。
有什么见解吗?
请记住,这是我的第一个真正的 VBA 脚本,所以如果我犯了错误,请让我的病人来自 JS/PHP 背景,所以这对我来说有很大的不同。
你在 aArray 中切换了维度。在代码中,你重新变暗并用 (count_of_rows_in_usedRang,count_of_elements_in_a( 填充 aArray,我想使用的 rang 只有 9 行,所以 aArray(10, 0( 超出了范围,而 aArray(0,10( 则不会。
我认为您问题的第一部分的输出可能存在类似的问题。如果没有:请发布,excel表中的内容以及结果
如果您希望简单地从工作表中读取数据,而忽略标题,那么您就过于复杂了。这样的东西会起作用:
Const intOffsetRow As Integer = 2
Dim rngUsedRange As Range
Dim varWksArray As Variant
Set rngUsedRange = ActiveWorkbook.Sheets(1).UsedRange
With rngUsedRange
varWksArray = .Range(Cells(intOffsetRow, 1), Cells(.Rows.Count, .Columns.Count)).Value
End With
Set rngUsedRange = Nothing
如果您不介意数组中存在空白/空行/维度,可以进一步简化:
Const intOffsetRow As Integer = 1
Dim rngUsedRange As Range
Dim varWksArray As Variant
Set rngUsedRange = ActiveWorkbook.Sheets(1).UsedRange
varWksArray = rngUsedRange.Offset(intOffsetRow, 0).Value
Set rngUsedRange = Nothing