5

我需要能够使用 VBA 代码将大量值插入到 excel 中的空表中。到目前为止,代码是这样工作的。

首先,用户在用户表单中输入一个值。然后代码清除表格,然后根据代码中已有的查找条件查找一系列数字。检索到的数据全部包含在单个列中,并像数组一样存储。

从这里开始,我需要将所有值放入表中的某个列(策略#),从而将表行扩展为检索数据集中的行数。(如果需要,我确实已经将计数单独存储为“AC”)我要插入的列标题是“Policy #”。

请记住,在代码的当前时间表中只有一个空白行,我怎样才能正确插入数据?我试过了

 range("commissionstatement[Policy #]").value = Als

但这不起作用。顺便说一下,Als 是值数组。通常要插入数组,我必须插入一个大小相等的范围,这就是我已经将行数作为 AC 的原因。

我也尝试过使用range("commissionstatement").listobject.listrows,但这也不起作用。

有什么建议吗?我是否需要在表中插入与我添加的数据数量相等的行数,然后才能像这样将数据实际放入其中...

range("commissionstatement").listobject.listrows.add ()

然后插入数据?

如果需要更多信息,请告诉我。谢谢!

4

2 回答 2

6

假设您使用的是 Excel 2010,试试这个(可能不适用于早期版本的 Excel)

Sub AddToList()
    Dim lo As ListObject
    Dim ws As Worksheet
    Dim Als() As Variant
    Dim rng As Range

    Set ws = ActiveSheet

    ' Get reference to table
    Set lo = ws.ListObjects("MyTable")  ' <--- Update this with your table name

    If lo.InsertRowRange Is Nothing Then
        ' List already has data
        Set rng = lo.ListRows.Add.Range
    Else
        ' List is empty
        Set rng = lo.InsertRowRange
    End If

    '  *** Remove one of these two lines ***
    ' If Als is a 1 dimensional array
    rng.Cells(1, lo.ListColumns("Policy #").Index).Resize(UBound(Als) - LBound(Als) + 1, 1) = Application.Transpose(Als)

    ' If Als is 2 dimensional array (1 to rows, 1 to 1)
    rng.Cells(1, lo.ListColumns("Policy #").Index).Resize(UBound(Als, 1), 1) = Als
End Sub
于 2012-08-23T05:54:47.637 回答
0

这对我有用。我还用数组中的数据填充了一个空的 ListObject。为此,数组matriu必须是二维数组。

Dim matriu() As Variant
Dim ls As ListObject

Set ls = Hoja1.ListObjects(1)

' Retrieve data
matriu = Hoja1.Range("Origen")

' Erease all rows of the ListObject, if needed
ls.DataBodyRange.Delete

' This line is needed in order for the next line 
' not to throw an error if the listobject is empty.
ls.ListRows.Add

' Fill the ListObject with all data in one operation to reduce execution time    
Range(ls.DataBodyRange.Cells(1, 1), _
   ls.DataBodyRange.Cells(UBound(matriu, 1), UBound(matriu, 2))) = matriu
于 2014-10-02T11:53:12.427 回答