2016-07-05 251 views
0

我的目标是从table1复制数据并将其插入到表2中。 我试过如下:将数据从一个表复制/插入到另一个表

 Sub Integration() 
     Dim tbl1 As Range 
     Dim tbl2 As Range 
      Application.ScreenUpdating = False 
       Set tbl1 = ActiveSheet.ListObjects("Table1").DataBodyRange 
       Set tbl2 = ActiveSheet.ListObjects("Table2").DataBodyRange 

        tbl1.Copy 
        tbl2.Insert Shift:=xlDown 

       Application.CutCopyMode = False 
       tbl1.ClearContents 
      Application.ScreenUpdating = True 
     End Sub 

,而不是复制表1,并将其插入到表2但是,它似乎复制表2,ClearContent,并与表1

事情的数据插入到本身它可以在另一张纸上完美运行,并且完全相同的代码。
任何帮助,将不胜感激。由于
Pre-Integration
After integration

+0

当你手动点击与选定的多行插入,插入擅长的行这个数字,VBA将这样做。当你做tbl2.insert时,你插入的行数与当前在tbl2中的行数相同,而不是你想插入的行数与你在tbl1中的行数一致 –

+0

对不起,但我真的不明白你的意思...什么时候我做tbl2.insert Shift:= xlDown,它实际上是将表的1个复制的单元格插入到表2中,不是吗?它应该与CTRL + SHIFT + 1相当,因为您不能通过右键单击将复制的单元格插入到表中。 –

+0

我的意思是你在这里做的是复制1行,然后选择5行并插入,所以你有效地插入5个重复的行。下面的两个答案都避免了这种情况,虽然Thomas'避免了循环,这是更可取的 –

回答

1

使用tbl2.Offset(tbl2.Rows.Count)表2后引用第一个空行。接下来使用tbl1.Copy tbl1.Copy tbl2.Offset(tbl2.Rows.Count)粘贴Table1的内容。

Sub Integration() 
    Dim tbl1 As Range 
    Dim tbl2 As Range 

    Application.ScreenUpdating = False 
    Set tbl1 = ActiveSheet.ListObjects("Table1").DataBodyRange 
    Set tbl2 = ActiveSheet.ListObjects("Table2").DataBodyRange 

    tbl1.Copy tbl2.Offset(tbl2.Rows.Count) 

    Application.CutCopyMode = False 
    tbl1.ClearContents 
    Application.ScreenUpdating = True 
End Sub 
0

或者与列表工作对象自己来分配数据:

Sub Integration() 

Dim tbl1 As ListObject, tbl2 As ListObject 
    Set tbl1 = ActiveSheet.ListObjects("Table1") 
    Set tbl2 = ActiveSheet.ListObjects("Table2") 
    For i = 1 To tbl1.ListRows.Count 
     tbl2.ListRows.Add 1, True 
     tbl2.ListRows(1).Range.Value = tbl1.ListRows(i).Range.Value 
    Next i 
End Sub 
相关问题