将行复制并粘贴到另一个工作表的宏,而不会将其粘贴到页面下方
Macro to copy and paste rows to another worksheet without it pasting miles down the page
我一直在开发一个宏,由我作品中的一个按钮驱动sheet,我可以在其中复制行并将它们粘贴到另一个作品的下一个可用行中sheet,当在特定列中满足特定条件。
我遇到的问题是,当宏 运行s 时,它确实会复制并粘贴到另一个跨页sheet,但是,它正在粘贴到第 8000 行,即使只有曾经,在目的地 sheet 上平均有 150-200 个任务。
此外,除此之外,它只会粘贴到第 8000 行,因此会覆盖该行中已有的任何内容。
我希望宏同时 运行 以便它每次都简单地粘贴到下一个可用行,然后继续查找下一个新行而不是覆盖其他行。
我的日志中确实有格式,但仅限于边界和几个数据验证下拉列表。
我开发的代码如下:
Dim xRg As Range
Dim xCell As Range
Dim I As Long
Dim J As Long
Dim K As Long
I = Worksheets("Demand Log").UsedRange.Rows.Count
J = Worksheets("Change Log").UsedRange.Rows.Count
If J = 1 Then
If Application.WorksheetFunction.CountA(Worksheets("Change Log").UsedRange) = 0 Then J = 0
End If
Set xRg = Worksheets("Demand Log").Range("O5:O" & I)
On Error Resume Next
Application.ScreenUpdating = False
For K = 1 To xRg.Count
If CStr(xRg(K).Value) = "Change Team" Then
xRg(K).EntireRow.Copy Destination:=Worksheets("Change Log").Range("A" & J + 0)
xRg(K).EntireRow.Delete
End If
Next
Application.ScreenUpdating = True
如果有人能帮助开发这个宏,我们将不胜感激。
如果宏可以复制并粘贴到目标跨页sheet,而且在从源中删除该行之前将行复制到第三个跨页sheet,那就太好了sheet。
非常感谢
不要使用 UsedRange
查找电子表格中最后使用的行,尤其是当您设置了格式的单元格时不想将其视为 "used"。
更可靠的方法是:
J = Worksheets("Change Log").Cells(Worksheets("Change Log").Rows.Count, "A").End(xlUp).Row
(将 "A"
替换为您拥有的任何列,该列将始终包含 "used" 行中的数据)
您的代码也在计算 J
一次,然后不断地将新信息粘贴到第 J 行。每次向目标写入一行时都需要增加 J。
也许使用:
J = J + 1
就在
之前
xRg(K).EntireRow.Copy Destination:=Worksheets("Change Log").Range("A" & J)
(你的问题中没有提到的删除行会出现的问题,如果你解决不了,可以在另一个问题中解决。但是已经有很多了questions/answers在将解决该问题的 Stack Overflow 上。)
我一直在开发一个宏,由我作品中的一个按钮驱动sheet,我可以在其中复制行并将它们粘贴到另一个作品的下一个可用行中sheet,当在特定列中满足特定条件。
我遇到的问题是,当宏 运行s 时,它确实会复制并粘贴到另一个跨页sheet,但是,它正在粘贴到第 8000 行,即使只有曾经,在目的地 sheet 上平均有 150-200 个任务。
此外,除此之外,它只会粘贴到第 8000 行,因此会覆盖该行中已有的任何内容。
我希望宏同时 运行 以便它每次都简单地粘贴到下一个可用行,然后继续查找下一个新行而不是覆盖其他行。
我的日志中确实有格式,但仅限于边界和几个数据验证下拉列表。
我开发的代码如下:
Dim xRg As Range
Dim xCell As Range
Dim I As Long
Dim J As Long
Dim K As Long
I = Worksheets("Demand Log").UsedRange.Rows.Count
J = Worksheets("Change Log").UsedRange.Rows.Count
If J = 1 Then
If Application.WorksheetFunction.CountA(Worksheets("Change Log").UsedRange) = 0 Then J = 0
End If
Set xRg = Worksheets("Demand Log").Range("O5:O" & I)
On Error Resume Next
Application.ScreenUpdating = False
For K = 1 To xRg.Count
If CStr(xRg(K).Value) = "Change Team" Then
xRg(K).EntireRow.Copy Destination:=Worksheets("Change Log").Range("A" & J + 0)
xRg(K).EntireRow.Delete
End If
Next
Application.ScreenUpdating = True
如果有人能帮助开发这个宏,我们将不胜感激。
如果宏可以复制并粘贴到目标跨页sheet,而且在从源中删除该行之前将行复制到第三个跨页sheet,那就太好了sheet。
非常感谢
不要使用 UsedRange
查找电子表格中最后使用的行,尤其是当您设置了格式的单元格时不想将其视为 "used"。
更可靠的方法是:
J = Worksheets("Change Log").Cells(Worksheets("Change Log").Rows.Count, "A").End(xlUp).Row
(将 "A"
替换为您拥有的任何列,该列将始终包含 "used" 行中的数据)
您的代码也在计算 J
一次,然后不断地将新信息粘贴到第 J 行。每次向目标写入一行时都需要增加 J。
也许使用:
J = J + 1
就在
之前xRg(K).EntireRow.Copy Destination:=Worksheets("Change Log").Range("A" & J)
(你的问题中没有提到的删除行会出现的问题,如果你解决不了,可以在另一个问题中解决。但是已经有很多了questions/answers在将解决该问题的 Stack Overflow 上。)