【问题标题】:Populate an Excel table with a collection object使用集合对象填充 Excel 表
【发布时间】:2019-09-16 22:06:41
【问题描述】:

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

我已成功编写代码以将这 20 个不同的值存储在一个集合对象中,现在我正在尝试编写代码的后半部分,我希望该集合对象填充到表中的第 8 行。

大纲如下:

  1. 向集合对象添加 20 个不同的值
  2. 转到其他工作表(数据表)
  3. 查看表的最后一行是否为空,如果不是,则添加一行,否则转到步骤4
  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

【问题讨论】:

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

标签: excel vba


【解决方案1】:

我认为计数器和循环是 Collection 对象的最佳选择。如果要设置对 Microsoft 脚本运行时的引用,可以使用 Dictionary 对象而不是 Collection 对象。使用字典,您可以使用 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

我曾经拒绝使用字典,因为我不想要那个外部参考。但是一旦我克服了这个问题(并且没有遇到任何问题),我几乎在所有情况下都更喜欢字典。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-14
    • 2014-10-31
    • 1970-01-01
    • 2016-01-12
    • 2019-05-27
    • 2014-10-11
    • 2012-11-06
    • 1970-01-01
    相关资源
    最近更新 更多