5

我有两张桌子:

    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 中的一切,这应该很容易。我可能会以错误的方式去做。任何帮助表示赞赏。谢谢。

4

3 回答 3

4

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

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
于 2015-02-04T22:08:37.680 回答
1

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

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

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

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

于 2015-02-04T21:56:12.013 回答
0

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

  • 削减温度范围
  • 将最后一行添加到目标表
  • 选择最后一行
  • 使用 Shift:=xlDown 将剪切选择插入目标表
  • 删除你不想要的最后一行
于 2015-11-02T08:06:56.303 回答