用于将行复制并粘贴到另一个工作表而不将其粘贴到页面数英里的宏

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用于将行复制并粘贴到另一个工作表而不将其粘贴到页面数英里的宏相关的知识,希望对你有一定的参考价值。

我一直在开发一个宏,由我的工作表中的一个按钮驱动,我可以复制行,并将它们粘贴到另一个工作表的下一个可用行上,当某个列满足某些条件时。

我遇到的问题是,当宏运行时,它会复制并粘贴到另一个电子表格上,但是,即使在目标表上平均只有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

如果有人可以帮助开发这个宏,那将非常感激。

如果宏可以复制并粘贴到目标电子表格中,也可以将该行复制到第三个电子表格,然后再从源表格中删除该行。

非常感谢

答案

不要使用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上已经有很多问题/答案可以解决这个问题。问题。)

以上是关于用于将行复制并粘贴到另一个工作表而不将其粘贴到页面数英里的宏的主要内容,如果未能解决你的问题,请参考以下文章

根据标准复制并粘贴到另一个工作表

删除一个单词而不将其添加到 Emacs 中的 kill-ring

在字符串中搜索文本,将行复制并粘贴到新工作表

如何将行从一个 Excel 工作表复制到另一个工作表并使用 VBA 创建重复项?

Excel VBA 宏将复制一系列单元格并粘贴到另一个工作簿中

复制并粘贴到另一个工作表的第一个空行,如果第一个单元格为空,则粘贴到上一行