首页 > 解决方案 > VBA 代码擦除、复制和删除多张工作表中的行

问题描述

我在运行 2 个宏按钮时遇到一些问题。它们彼此非常相似,但宏 2 有点复杂,而且老实说……我是 VBA 新手,所以我一直在学习。我能够将下面的代码拼凑在一起,但后来了解到删除行会破坏工作簿流程,并且似乎无法让它像需要的那样工作。

宏 1(下面的示例):如果在 Q 列中输入了“移动”一词,并且在“项目”页面上点击了按钮(宏),则 excel 将删除特定单元格中的数据,但保持行不变(它不会'不删除行,只是删除单元格中的数据)并粘贴到名为'待定'的工作表上的下一个空白行。我在下面提供了一个链接,作为“项目”页面的示例。数据从“项目”表的第 5 行开始,其他所有数据从第 3 行开始。A、B 和 E 是下拉菜单。

宏 2:我需要一个与上述非常相似的单独宏。主要区别在于您在 R 列中键入“移动”并点击按钮 1. 运行宏 1 中的代码,但复制到名为“跟踪”而不是“待定”的工作表中的第一个空白行 2. 它搜索所有除了工作表“项目”和“跟踪”之外的其他工作表,并删除整行而不是仅擦除单元格。它仍然只是在“项目”页面上删除。

一般理解,宏 1 将用于将文件置于“待处理”状态,宏 2 将用于“关闭”文件并将其跟踪保留在“跟踪”中。

这是我为宏 1 提出的,它删除行并且有时会很慢/冻结 excel:

Sub RoundedRectangle4_Click()


Dim xRg As Range
Dim xCell As Range
Dim I As Long
Dim J As Long
Dim K As Long
I = Worksheets("Projects").UsedRange.Rows.Count
J = Worksheets("Pending").UsedRange.Rows.Count
If J = 1 Then
If Application.WorksheetFunction.CountA(Worksheets("Pending").UsedRange) = 0 Then J = 0
End If
Set xRg = Worksheets("Projects").Range("Q1:Q" & I)
On Error Resume Next
Application.ScreenUpdating = False
For K = 1 To xRg.Count
If CStr(xRg(K).Value) = "Move" Then
xRg(K).EntireRow.Copy Destination:=Worksheets("Pending").Range("A" & J + 1)
xRg(K).EntireRow.Delete
If CStr(xRg(K).Value) = "Move" Then
K = K - 1
End If
J = J + 1
End If
Next
Application.ScreenUpdating = True
End Sub

项目截图

“项目”截图

再一次,我真的很感激任何帮助,如果你有任何笔记,我很想学习如何在 excel 中使用类似的东西以备将来使用。

标签: vbacopymoveerase

解决方案


推荐阅读