2015-01-14 32 views
0

我尝试从列中复制单元格A:D,当列E =“接受”时,并将数据粘贴为值,放到另一张纸上。复制行中的某些单元格,满足criterea时,粘贴到新表中

虽然每次我尝试,但它只复制最后一行,我不明白为什么。我会很感激任何帮助。

我的代码如下所示:

Public Sub AcceptLastChangeRequest() 

With Application 
     .ScreenUpdating = False 
     .EnableEvents = False 
End With 

On Error GoTo errorHandler: 

    Dim varAnswer As String 
     varAnswer = MsgBox("Are you sure you wish to accept the most recent Change Request?", vbYesNo, "Accept Change Request") 
      If varAnswer = vbNo Then 
       MsgBox ("No changes saved") 
        With Application 
         .ScreenUpdating = True 
         .EnableEvents = True 
        End With 
       Exit Sub 
      End If 

    Dim SourceRange As Range, DestRange As Range 
    Dim DestSheet As Worksheet, SourceSheet As Worksheet 
    Dim LastRowDestSheet As Long, i As Long, LastRowSourceSheet As Long 
     Set DestSheet = ThisWorkbook.Worksheets("Accepted Change Requests") 
     Set SourceSheet = ThisWorkbook.Worksheets("All Change Requests") 

      LastRowDestSheet = DestSheet.Cells(DestSheet.Rows.Count, "A").End(xlUp).Row 
      LastRowSourceSheet = SourceSheet.Cells(SourceSheet.Rows.Count, "E").End(xlUp).Row 

       For i = 2 To LastRowSourceSheet 
        If Sheets("All Change Requests").Range("E" & i).Value = "Accepted" Then 
         Set SourceRange = SourceSheet.Range("A" & i, "D" & i) 
         Set DestRange = DestSheet.Range("A" & LastRowDestSheet + 1) 
         SourceRange.Copy 
         DestRange.PasteSpecial _ 
         Paste:=xlPasteValues, _ 
         operation:=xlPasteSpecialOperationNone, _ 
         skipblanks:=False, _ 
         Transpose:=False 

         Application.CutCopyMode = False 

        End If 
       Next i 

      With Application 
      .ScreenUpdating = True 
      .EnableEvents = True 
      End With 

    Exit Sub 

errorHandler: 
MsgBox ("There was an error adding this Change Request") 
Resume Next 

    With Application 
     .ScreenUpdating = True 
     .EnableEvents = True 
    End With 

End Sub 
+0

的另一种方法,有可能更快,是使用所述.AutoFilter选择“接受”列E.然后复制/粘贴可见细胞(在列A:d)在一个单一的集团。 –

回答

3

你没有更新的目标表的最后一排。

LastRowDestSheet = LastRowDestSheet + 1 

在if子句结束(在 '设置DestRange = DestSheet.Range ...')

1

尝试用这种替代你的循环:

For i = 2 To LastRowSourceSheet 
    If SourceSheet.Range("E" & i).Value = "Accepted" Then _ 
    DestSheet.Range("A" & LastRowDestSheet + 1 & ":D" & LastRowDestSheet + 1).Value = _ 
     SourceSheet.Range("A" & i & ":D" & i).Value 
    LastRowDestSheet = LastRowDestSheet + 1 
Next i 

编辑(Further OP request)

For i = 2 To LastRowSourceSheet 
    If SourceSheet.Range("E" & i).Value = "Accepted" Then 
    If Evaluate("ISERROR(MATCH(A" & i & ",'Accepted Change Requests'!A:A,0))") Then 
     DestSheet.Range("A" & LastRowDestSheet + 1 & ":D" & LastRowDestSheet + 1).Value = _ 
      SourceSheet.Range("A" & i & ":D" & i).Value 
     LastRowDestSheet = LastRowDestSheet + 1 
    End If 
    End If 
Next i 
+0

这真是太棒了,正是我所问的。但如果复制数据的A列中的数据尚不存在于目标工作表的A列中,那么是否有办法只将数据粘贴到“已接受的变更请求”中(即,尚未有该用户的chnage请求唯一身份)。 – MLucas

+0

恐怕您需要澄清一点,DestSheet'就是“接受的变更请求”表,因此只能在那里复制值? –

+0

基本上任何新的变更请求都将被添加到“所有变更请求”表单中,并且将在列A中分配一个唯一的ID。我只想通过将列E的值设置为“已接受”复制那些已接受的变更请求, “已接受的变更请求”表单。但是,我不希望已经出现在“已接受的变更请求”上的任何变更请求被复制。我希望这是有道理的? – MLucas

相关问题