【问题标题】:How do I Append Multiple Rows from one Excel Table (ListObject) to Another?如何将多个行从一个 Excel 表(ListObject)附加到另一个?
【发布时间】:2015-04-04 14:21:27
【问题描述】:

我有两张桌子:

    Table_1         Table_2
   A   B   C       A   B   C
 -------------   -------------
1| A1| B1| C1|  1| A2| B2| C2|
2| A1| B1| C1|  2| A2| B2| C2|
3| A1| B1| C1|  3| A2| B2| C2|

结果表:

    Table_1   
   A   B   C  
 -------------
1| A1| B1| C1|
2| A1| B1| C1|
3| A1| B1| C1|
4| A2| B2| C2|
5| A2| B2| C2|
6| A2| B2| C2|

Table_2 是一个临时表 (ListObject),它使用数据连接查询数据库中的条目。

Table_1 是一个表 (ListObject),用作条目的集合列表。它是分开的,因为它 (1) 缩短了 Table_2 中的查询时间,并且 (2) 有一些程序化的编辑。

我有将 Table_2 复制到 Table_1 的 VBA 代码,然后更新 Table_2 的连接字符串以不包括日期在 Table_1 范围内的条目。结果就是Table_2只拉取新数据。

我的代码(正确)将数据从 Table_2 复制到 Table_1:

For Each temprow in Table_2.ListRows
  Set newRow = table_1.ListRows.Add
  tempRow.Range.Copy
  newRow.Range.PasteSpecial xlPasteValues
Next

如果 Table_2(新条目)只有十几个条目,这将非常有用。有时,Table_2 会有几百个条目,实际上需要 20 分钟才能完成。我怀疑这是因为我正在对 .Copy 和 .Paste 进行几百次迭代。

有没有办法批发:复制所有 Table_2 并使其成为 Table_1 的一部分?我觉得我想做的事情应该只需要 1 秒以编程方式执行,而不是 20 分钟。我没有条件或例外。我想要 Table_2 中的一切,这应该很容易。我可能会以错误的方式去做。任何帮助表示赞赏。谢谢。

【问题讨论】:

  • 也许您可以一步复制 .DataBodyRange。
  • Ron Rosenfield 的上述回复在我删除总计行之后对我有用。也许这就是 Schmalls 无法让它发挥作用的原因。我会将此添加为评论,但我没有声誉。

标签: excel vba listobject


【解决方案1】:

也许是这样,适当地更改工作表:

Option Explicit
Sub CombineTables()
    Dim LO1 As ListObject, LO2 As ListObject

With Sheet3
    Set LO1 = .ListObjects("Table_1")
    Set LO2 = .ListObjects("Table_2")
End With

LO2.DataBodyRange.Copy Destination:= _
    LO1.DataBodyRange.Offset(LO1.DataBodyRange.Rows.Count).Resize(1, 1)

End Sub

【讨论】:

  • 这让我朝着正确的方向前进。但是,它没有将行附加到表中,只是将它们粘贴到表之后。我必须添加在表格底部创建新表格行并将其用作副本的目标的步骤。例如,最后一行将替换为:LO2.DataBodyRange.Copy Destination:=LO1.DataBodyRange.ListRows.Add.Resize(1, 1)
  • @Schmalls 没有这些更改(Excel 2007),它可以正常工作,所以我猜你的环境或数据有一些不同。
  • 奇怪的是我当时有那个输出。如果有人遇到同样的问题,我想我的可能只是一个替代版本。
【解决方案2】:

尝试使用 SQL union 语句进行快速表连接 (ODBC):

SELECT * FROM [Sheet1$] UNION SELECT * FROM [Sheet2$]

其中表 1 位于名为“Sheet1”的工作表上,而表 2 位于“Sheet2”上。

通过转到“数据->来自其他来源->来自 Microsoft Query”来执行此操作

【讨论】:

    【解决方案3】:

    复制源表和特殊粘贴值+在温度范围内格式化

    • 缩小温度范围
    • 将最后一行添加到目标表
    • 选择最后一行
    • 使用 Shift:=xlDown 将剪切选择插入到目标表中
    • 删除不需要的最后一行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 2020-02-18
      • 1970-01-01
      • 2020-02-02
      相关资源
      最近更新 更多