我一直在开发一个宏,由我的工作表中的按钮驱动,在某个列中满足某些条件时,我可以将行复制并粘贴到另一个工作表的下一个可用行。
我遇到的问题是,当宏运行时,它会复制并粘贴到另一个电子表格中,但是,即使在目的地上平均只有150-200个任务,它也会粘贴到第8000行片。
此外,除此之外,它只会粘贴到第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
如果有人可以帮助开发这个宏,那将非常感激。
如果宏可以复制并粘贴到目标电子表格中,也可以将该行复制到第三个电子表格,然后再从源表格中删除该行。
非常感谢
答案 0 :(得分:1)
请勿使用UsedRange
查找电子表格中最后使用过的行,尤其是如果您有格式化的单元格,您不想将其视为"使用过的"
更可靠的方式是:
J = Worksheets("Change Log").Cells(Worksheets("Change Log").Rows.Count, "A").End(xlUp).Row
(将"A"
替换为您所拥有的任何列,该列始终包含"使用过的"行中的数据
您的代码也在计算J
一次,然后不断地将新信息粘贴到该第J行。每次将行写入目标时都需要增加J.
也许使用:
J = J + 1
之前
xRg(K).EntireRow.Copy Destination:=Worksheets("Change Log").Range("A" & J)
(如果您无法解决问题,可以在另一个问题中解决行删除时出现的问题,这些问题在您的问题中没有提及。但是已经有很多问题/答案了在Stack Overflow上解决该问题。)