我使用VBA从Excel电子表格导入数据到Access数据库。我有一个包含17个元素的数组变量(data),并使用以下代码从电子表格的一行中导入17个值:
For i = 1 To 17
data(i) = Cells(Line.Row, i).Value
Next i
我可以不使用循环吗?
BTW -我也在循环内处理电子表格的每一行,因为根据第1列中的数据,不同的行得到不同的处理。
是的,你可以简单地将Range的值赋给一个变量,然后它将在一个二维数组中保存这些值。
你可以这样使用它:在调试。打印行,第一个维度指的是行,在这里总是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。