繁体   English   中英

VBA宏复制和粘贴,粘贴到离散位置

[英]VBA Macro Copy and Paste, pasting to discrete locations

我正在尝试编写一个宏,以将信息从一张纸复制并粘贴到另一张纸,具体取决于它是否在原始纸的J列中被标记为“即将完成/完成/正在进行中”(这称为“跟踪器”)。 它可以工作-但问题是它正在复制跟踪器工作表中的整行,而我只希望它复制A:K列。 理想情况下,它将根据状态将结果发布到Sheet1上的不同位置,但是我总是可以合并另一个宏以随后执行此操作! 我必须承认我在使用现有的宏,因为我在VBA上有些虚弱,所以这可能是问题的一部分。 非常感谢。

Sub Copybasedonstatus()
'Niall McCracken 12/12/16

Dim lRow, cRow As Integer        
lRow = Sheets("Tracker").Range("A800").End(xlUp).Row

For j = lRow To 1 Step -1    
    If Sheets("Tracker").Range("J" & j) = "Upcoming" Then
        cRow = Sheets("Sheet1").Range("A800").End(xlUp).Row
        Sheets("Tracker").Rows(j).Copy Destination:=Sheets("Sheet1").Range("A" & cRow + 1)

    ElseIf Sheets("Tracker").Range("J" & j) = "Complete" Then
        cRow = Sheets("Sheet1").Range("A800").End(xlUp).Row
        Sheets("Tracker").Rows(j).Copy Destination:=Sheets("Sheet1").Range("A" & cRow + 1)

    ElseIf Sheets("Tracker").Range("J" & j) = "In Progress" Then
        cRow = Sheets("Sheet1").Range("A800").End(xlUp).Row
        Sheets("Tracker").Rows(j).Copy Destination:=Sheets("Sheet1").Range("A" & cRow + 1)

    End If
Next

End Sub

x一旦您确定要粘贴复制的行(列A:K)的内容(或位置),请告诉我,我可以进行相应的修改。

我使用With Sheets("Tracker")语句使代码更短(也有助于减少错误),我也用Select Case .Range("J" & j).Value替换了If

注意 :如果您不删除行或单元格,则没有真正的向后循环的需要。 如果需要,可以使用常规的For j = 1 To lRow

Option Explicit

Sub Copybasedonstatus()

'Niall McCracken 12/12/16

Dim lRow As Long, cRow As Long, j As Long

With Sheets("Tracker")
    lRow = .Range("A800").End(xlUp).Row

    ' another method of finding last row in Column A (skipping blank cells in the middle)
    lRow = .Cells(.Rows.Count, "A").End(xlUp).Row

    For j = lRow To 1 Step -1
        cRow = Sheets("Sheet1").Range("A800").End(xlUp).Row

        Select Case .Range("J" & j).Value
            Case "Upcoming"
                .Range("A" & j & ":K" & j).Copy Destination:=Sheets("Sheet1").Range("A" & cRow + 1)

            Case "Complete"
                .Range("A" & j & ":K" & j).Copy Destination:=Sheets("Sheet1").Range("A" & cRow + 1)

            Case "In Progress"
                .Range("A" & j & ":K" & j).Copy Destination:=Sheets("Sheet1").Range("A" & cRow + 1)

        End Select
    Next
End With

End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM