我有两张桌子:
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)缩短了表2中的查询时间,(2)进行了一些编程编辑。
我有VBA代码将Table_2复制到Table_1,然后更新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中获得一切,这应该会让事情变得简单。我可能会采取错误的方式。任何帮助表示赞赏。感谢。
答案 0 :(得分: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
答案 1 :(得分:1)
尝试使用SQL union语句进行快速表连接(ODBC):
SELECT * FROM [Sheet1$] UNION SELECT * FROM [Sheet2$]
表1位于名为" Sheet1" &表34" Sheet2"。
通过转到"数据 - >来自其他来源 - >来自Microsoft Query"
答案 2 :(得分:0)
复制Source表和特殊粘贴值+在温度范围内形成