使用集合对象填充Excel表

使用集合对象填充Excel表,excel,vba,Excel,Vba,我试图创建一个宏,让用户输入,比方说,20个不同单元格中的值,然后(单击一个按钮)将这些信息添加到另一个工作表上的数据库中,供以后使用 我已经成功地编写了将这20个不同的值存储在一个集合对象中的代码,现在我正在尝试编写代码的后面部分,我希望这个集合对象在其中填充,比如表中的第8行 大纲如下: 向集合对象添加20个不同的值 转到其他工作表(数据表) 查看表的最后一行是否为空,如果不是,则添加一行,否则转至步骤4 使用集合对象中的值填充表中的相应行 我可以用计数器等创建一个循环,但可能存在更复杂的解

我试图创建一个宏,让用户输入,比方说,20个不同单元格中的值,然后(单击一个按钮)将这些信息添加到另一个工作表上的数据库中,供以后使用

我已经成功地编写了将这20个不同的值存储在一个集合对象中的代码,现在我正在尝试编写代码的后面部分,我希望这个集合对象在其中填充,比如表中的第8行

大纲如下:

  • 向集合对象添加20个不同的值
  • 转到其他工作表(数据表)
  • 查看表的最后一行是否为空,如果不是,则添加一行,否则转至步骤4
  • 使用集合对象中的值填充表中的相应行
  • 我可以用计数器等创建一个循环,但可能存在更复杂的解决方案

    Sub AddDataRow(myCol As Collection)    
        Dim sheet As Worksheet
        Dim table As ListObject
        Dim rng2 As Range
    
        Set sheet = Worksheets("Databas")
        Set table = sheet.ListObjects("Table1")
    
        If table.ListColumns("Projektnamn").Range.End(xlDown) <> "" Then
            table.ListRows.Add
        Else
    
        End If
    
    子AddDataRow(mycl作为集合)
    将工作表设置为工作表
    将表设置为列表对象
    变暗rng2 As范围
    集合表=工作表(“数据库”)
    Set table=sheet.ListObjects(“表1”)
    如果table.ListColumns(“Projektnamn”).Range.End(xlDown)”,则
    table.ListRows.Add
    其他的
    如果结束
    
    我认为计数器和循环是收集对象的最佳选择。如果要设置对Microsoft脚本运行时的引用,可以使用字典对象而不是集合对象。使用字典,您可以使用Items或Keys方法一次写入一个范围,而不是循环

    Sub test()
    
        Dim dc As Scripting.Dictionary
    
        Set dc = New Scripting.Dictionary
    
        dc.Add "1", "1"
        dc.Add "2", "2"
        dc.Add "3", "3"
    
        Sheet1.ListObjects(1).ListRows.Add.Range.Value = dc.Items
    
    End Sub
    


    我过去不喜欢使用字典,因为我不想外部引用。但是一旦我克服了这一点(并且没有任何问题),我几乎在所有情况下都喜欢字典。

    假设存在
    DataBodyRange
    ,使用
    table.ListColumns(“Projektnamn”).DataBodyRange(table.ListColumns(“Projektnamn”).DataBodyRange.Rows.Count)可能更可靠,而不是
    Range.End(xlDown)
    。我不确定我是否完全理解你的问题,但我不认为有任何本机/方便的方法可以将集合的内容传输到Excel表/
    ListObject
    ——我想这就是你所问的。