我正在使用 VBA 将 Excel 电子表格中的数据导入 Access 数据库。我有一个包含 17 个元素的数组变量(数据),并使用以下代码从电子表格的单行导入 17 个值:
For i = 1 To 17
data(i) = Cells(Line.Row, i).Value
Next i
我可以在没有循环的情况下执行此操作吗?
顺便说一句 - 我也在循环内处理电子表格的每一行,因为不同的行会根据第 1 列中的数据得到不同的处理。
是的,您可以简单地将 Range 的值分配给变量变量,然后它将值保存在二维数组中。
您可以像这样使用它:在 debug.print 行上,第一个维度指的是行,并且在这里始终为 1。
Sub test()
Dim v
Dim line As Range
Dim i As Long
Set line = Range("A2:Q2")
v = line.Value
' accessing the values:
For i = LBound(v, 2) To UBound(v, 2)
Debug.Print v(1, i)
Next
End Sub
正如您所说的,您也正在迭代多行,您还可以将整个 Range 分配给v
并在两个维度上进行迭代。
当传递range
给任何变量时,您可以创建一个数组。但是,它将是二维数组。为了使其成为一维,我们需要对其进行转置(两次)。因此,代码可能如下:
data = Application.Transpose(Application.Transpose(Range(Cells(Line.Row, 1), _
Cells(Line.Row, 17))))
一个更重要的信息 - 这data array
将从索引 1 而不是默认的 0 开始。