2012-09-06 163 views
2

我对VBA很新,我想解决我认为应该是一个非常简单的问题(我有Java/J2EE背景)......我正在循环一个表,并希望根据一些条件语句将行复制到另一个工作表上的表中。见下面的代码。VBA - 将表格行复制并粘贴到另一个表

Sub closeActionItems() 
    Dim i, iLastRow As Integer 
    Dim date1 As Date 
    Dim oLastRow As ListRow 

    date1 = Date 
    iLastRow = ActiveSheet.ListObjects("Open_Items").ListRows.Count 

    For i = 6 To iLastRow 
     If Cells(i, 7).Value <= date1 And Cells(i, 7).Value <> vbNullString Then 
      Rows(i).Copy 
      Set oLastRow = Worksheets("Closed").ListObject("Closed_Items").ListRows.Add 
      'Paste into new row 

      Application.CutCopyMode = False 
      Rows(i).EntireRow.Delete 
     End If 
    Next 
End Sub 

我已经尝试了许多不同的迭代,但一直无法找到将剪贴板的内容复制到新创建的行的正确方法。

任何帮助,将不胜感激。提前致谢。

+0

看看[this](http://stackoverflow.com/a/12298714/445425)答案。它处理将数据添加到“ListObject” –

+0

谢谢克里斯。这对于如何访问我创建的ListRow的范围子对象提供了一些有用的提示,但不幸的是,我仍然无法找到合适的语法来将剪贴板中的行“粘贴”到该范围中。有任何想法吗? – user1651899

回答

3

定义srcRow像这样一个范围:

Dim srcRow as Range 

然后在循环尝试这样做:

 Set srcRow = ActiveSheet.ListObjects("Open_Items").ListRows(i).Range 
     Set oLastRow = Worksheets("Closed").ListObjects("Closed_Items").ListRows.Add 

     srcRow.Copy 
     oLastRow.Range.PasteSpecial xlPasteValues 

     Application.CutCopyMode = False 
     Rows(i).EntireRow.Delete 

注意,您仍然有一个问题,因为你是要删除的行试图通过它们循环,所以你可能想要改变你的循环,以便它从底部开始并上升。

+0

感谢这工作完美!你对循环问题也是正确的,我纠正了这一点。谢谢您的帮助! – user1651899

相关问题