Vba 当满足条件时,从一行复制某些单元格,并粘贴到新的工作表中

Vba 当满足条件时,从一行复制某些单元格,并粘贴到新的工作表中,vba,excel,Vba,Excel,当列E=“Accepted”时,我试图从一行复制单元格A:D,并将数据作为值粘贴到另一张表中 For i = 2 To LastRowSourceSheet If SourceSheet.Range("E" & i).Value = "Accepted" Then _ DestSheet.Range("A" & LastRowDestSheet + 1 & ":D" & LastRowDestSheet + 1).Value = _

当列E=“Accepted”时,我试图从一行复制单元格A:D,并将数据作为值粘贴到另一张表中

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
但每次我尝试,它只复制最后一行,我不明白为什么。我真的很感激你的帮助

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
我的代码如下所示:

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
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

您没有更新目标工作表的最后一行

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

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

在if子句的末尾(在“Set DestRange=DestSheet.Range…”之后)

您没有更新目标工作表的最后一行

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

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

在if子句的末尾(在“Set DestRange=DestSheet.Range…”之后)

尝试用以下内容替换循环:

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

编辑(进一步操作请求)

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

尝试用以下内容替换您的循环:

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

编辑(进一步操作请求)

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

另一种可能更快的方法是使用.AutoFilter为列E选择“accepted”。然后在单个组中复制/粘贴可见单元格(列A:D)。另一种可能更快的方法是为列E使用.AutoFilter选择“accepted”。然后复制/粘贴可见单元格(列A:D)在一个集团里。这太棒了,完全符合我的要求。但是,如果复制数据的A列中的数据在目标工作表的A列中不存在(即,还没有具有该唯一ID的技术请求),是否有任何方法仅将数据粘贴到“已接受的更改请求”中。恐怕您需要进一步澄清,
DestSheet
是“已接受的变更请求”表,因此仅将值复制到该表中?基本上,任何新的变更请求都将添加到“所有变更请求”表中,并在a列中分配一个唯一ID。我只想通过将E列的值设置为“已接受”将已接受的变更请求复制到“已接受的变更请求”表中“床单。但是,我不希望任何已经出现在“已接受的更改请求”上的更改请求被复制。我希望这有意义?你必须为此添加一个唯一的ID。同时,将该唯一ID复制到dest工作表中,并迭代现有条目/自动筛选它们,以检查您在Momentgjohn复制的唯一ID-我该怎么做?这太棒了,完全符合我的要求。但是,如果复制数据的A列中的数据在目标工作表的A列中不存在(即,还没有具有该唯一ID的技术请求),是否有任何方法仅将数据粘贴到“已接受的更改请求”中。恐怕您需要进一步澄清,
DestSheet
是“已接受的变更请求”表,因此仅将值复制到该表中?基本上,任何新的变更请求都将添加到“所有变更请求”表中,并在a列中分配一个唯一ID。我只想通过将E列的值设置为“已接受”将已接受的变更请求复制到“已接受的变更请求”表中“床单。但是,我不希望任何已经出现在“已接受的更改请求”上的更改请求被复制。我希望这有意义?你必须为此添加一个唯一的ID。还要将该唯一ID复制到dest工作表中,并迭代现有条目/自动筛选它们,以检查您在Momentgjohn复制的唯一ID-我将如何做?