在Excel中,使用索引每行保存一个数组

在Excel中,使用索引每行保存一个数组,excel,vba,Excel,Vba,在Excel中,我想向Excel工作表的每一行发布一个包含6个值的数组,每次一个数组,从第一列开始,并在执行此操作时使用索引将工作表向下移动一行。我从第2行开始,考虑到列标题 我的代码基于我过去使用过的其他代码,但它会生成一个编译器警告,行TargetRange=TargetRange.Cells(I+1,1).Resize(1,6).Value=Arr 我看不出如何使用索引来逐步遍历工作表上的行。请问我该怎么办 下面是我正在使用的简化代码 '~~> Excel Objects Dim o

在Excel中,我想向Excel工作表的每一行发布一个包含6个值的数组,每次一个数组,从第一列开始,并在执行此操作时使用索引将工作表向下移动一行。我从第2行开始,考虑到列标题

我的代码基于我过去使用过的其他代码,但它会生成一个编译器警告,行
TargetRange=TargetRange.Cells(I+1,1).Resize(1,6).Value=Arr

我看不出如何使用索引来逐步遍历工作表上的行。请问我该怎么办

下面是我正在使用的简化代码

'~~> Excel Objects
Dim oXLApp As Object, oXLwb As Object, oXLws As Object

'Create a new Excel Application
Set oXLApp = CreateObject("Excel.Application")

'Hide Excel
oXLApp.Visible = False

'Open the relevant Excel file
Set oXLwb = oXLApp.Workbooks.Open("C:\test\test.xlsx")

'Work with Sheet1
Set oXLws = oXLwb.Sheets(1)

' Create an array to hold the cell values for posting to Excel
Dim Arr As Variant

Dim TargetRange As Range

For i = 1 to 100

    ' I set values of pProducer, pCuveee etc
    pProducer = "Fred"
    ' etc etc

    Arr = Array( _
        pProducer, _
        pCuvee, _
        pScore, _
        pLabels, _
        pVarieties, _
        pEmail _ 
        )
        
    ' Start adding cells in the second row, to leave the first row for column headings at the top of the sheet
    Set TargetRange = oXLws.Range(Cells(i + 1, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False))

    ' Save company data
    TargetRange.Cells(i + 1,1).Resize(1, 6).Value = Arr

Next i

您可以尝试修改以下代码,看看它是否工作,因为您已经使用了
调整大小和循环i
方法,所以不需要设置
目标范围

发件人:

 ' Start adding cells in the second row, to leave the first row for column headings at the top of the sheet
    Set TargetRange = oXLws.Range(Cells(i + 1, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False))

    ' Save company data
    TargetRange.Cells(i + 1,1).Resize(1, 6).Value = Arr
Cells(i + 1, 1).Resize(1, 6) = arr
To only(建议为单元格添加sheetname):

 ' Start adding cells in the second row, to leave the first row for column headings at the top of the sheet
    Set TargetRange = oXLws.Range(Cells(i + 1, 1).Address(RowAbsolute:=False, ColumnAbsolute:=False))

    ' Save company data
    TargetRange.Cells(i + 1,1).Resize(1, 6).Value = Arr
Cells(i + 1, 1).Resize(1, 6) = arr

首先填充数组,然后在一条指令中输出到工作表,速度会快得多:

Dim Arr(1 To 100, 1 To 6)
For I = LBound(Arr, 1) To UBound(Arr, 1)
    ' fill the Arr
    For J = LBound(Arr, 2) To UBound(Arr, 2)
        Arr(I, J) = "Foo " & I & "," & J
    Next J
Next I
oXLws.Range("A2").Resize(UBound(Arr, 1), UBound(Arr, 2)) = Arr

您不能在行代码中使用double
=
,这就是为什么它会抛出errorThank@Kin发现错误的原因。但是修正后的(?!)行代码也不起作用:
TargetRange.Cells(i+1,1)、Resize(1,6)、Value=Arr
@А峈峈峈峈峈峈峈峈峈峈峈峈峈,速度不错,但我甚至无法克服“修正后”行代码的问题这是一个很好的建议。如果我有更多的时间,我一定会采纳你的建议。我接受了@Kin的解决方案,因为它很快就能实现