0

我正在开发一个用于工作的解析器。基本上,我有一个 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 = 2iRows + 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 背景,所以这对我来说有很大不同。

4

2 回答 2

0

您切换了 aArray 中的维度。在代码中,您重新调整并用 (count_of_rows_in_usedRang,count_of_elements_in_a) 填充 aArray,我想使用的 rang 只有 9 行,所以 aArray(10, 0) 超出范围,而 aArray(0,10) 不会。

我认为您问题第一部分的输出可能存在类似问题。如果不是:请张贴,Excel 表中的内容以及结果。

于 2012-05-08T12:12:13.237 回答
0

如果您只想从工作表中读取数据,而忽略标题,那您就过于复杂了。像这样的东西会起作用:

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
于 2012-05-09T12:07:54.097 回答