在 Excel 中使用 VBA 将数组作为新行添加到 Listobject 表中

问题描述 投票:0回答:1

当我将数据导入数组时,在 Excel 中使用表格的速度要快得多。但是 - 我该如何反过来工作?

我有一个 1 个暗淡数组,需要将每个数据写入/保存在 Listobject 表中的新行/记录中。

我已经做了一些准备工作:

Dim MyTable As ListObject
Set MyTable = Ws.ListObjects("TestTbl")

Dim NewRow As ListRow

Set NewRow = MyTable.ListRows.Add(AlwaysInsert:=True)

For i = 1 To MyTable.ListColumns.Count
     If Len(myArr(rowToCopy(s), i)) > 0 Then
         On Error Resume Next
         NewRow.Range(i).Formula = "=" & Replace(myArr(rowToCopy(s), i), "xxx", "SheetName")
         On Error GoTo 0
      Else
         NewRow.Range(i).Formula = "=" & "#N/A"
      End If

 Next i

这确实有效 - 但速度很慢。我将每个值复制并与每个 NewRow.Range(i) 进行比较 - 这有点慢...实际文件中有 144 列乘以 6 行。

是否可以用数据创建一个数组,然后将整个数组复制到表中,一次完成?

我想;

dim valueArray(1 to 144) as String

for i = 1 to 144
     If Len(myArr(rowToCopy(s), i)) > 0 Then
          On Error Resume Next
          valueArray(i).Formula = "=" & Replace(myArr(rowToCopy(s), i), "xxx", "SheetName")
          On Error GoTo 0
      Else
          valueArray(i).Formula = "=" & "#N/A"
      End If
next i

然后 - 以某种方式,将整个数组一步复制到表中,作为一个新行...... 为什么我不能??

OBS:我使用另一个带有通用“公式”的表,并在新表中创建带有功能公式的新行。这就是为什么我使用.Formula.

arrays excel vba
1个回答
0
投票

为了插入一维数组中包含的值,请尝试下一个改编代码:

Sub InsertValsInNewTableRow()
 Dim MyTable As ListObject,ws As Worksheet, arr, i As Long
 
 Set ws = Workseets("MySheet") 'please, use here your real sheet!!!
 Set MyTable =  ws.ListObjects("TestTbl")

 Dim NewRow As listRow

 Set NewRow = MyTable.ListRows.Add(AlwaysInsert:=True)

 ReDim arr(1 To NewRow.Range.Columns.count)
 For i = 1 To UBound(arr)
    arr(i) = i * 10
 Next i

 NewRow.Range.Resize(, UBound(arr)).value = arr
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.