gpt4 book ai didi

VBA 代码删除不正确的行

转载 作者:行者123 更新时间:2023-12-04 21:34:52 25 4
gpt4 key购买 nike

我有这个代码,如果它在 D 到 L 列中有空单元格,则删除一行。
出于某种原因,它还删除了我位于 C8 的标题单元格。
有谁知道为什么?以及如何解决?

Sub RemoveEmptyRows()

Dim ws As Worksheet
For Each ws In Sheets
ws.Activate

Dim n As Long
Dim nlast As Long
Dim rw As Range
Set rw = ActiveWorkbook.ActiveSheet.UsedRange.Rows
nlast = rw.count
For n = nlast To 1 Step -1
If (rw.Cells(n, 4).Value = "" And rw.Cells(n, 5).Value = "" And rw.Cells(n, 6).Value = "" And rw.Cells(n, 7).Value = "" And rw.Cells(n, 8).Value = "" And rw.Cells(n, 9).Value = "" And rw.Cells(n, 10).Value = "" And rw.Cells(n, 11).Value = "") Then
rw.Rows(n).Delete
End If
Next n
Next ws
End Sub

最佳答案

问题是您正在使用 UsedRange 的行和列索引。假设它们与 Worksheet 的索引匹配.情况不一定如此。正如您在评论中向@YowE3K 指出的那样,您有一些完全空的列。

解决方案非常简单 - 只需使用 ws.Cells而不是 rw.Cells .我还将循环内的所有内容都放入 With block 以使其更快,更具可读性。你也可以短接那么长的If通过将其转换为 Select Case 来声明梯子:

Sub RemoveEmptyRows()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
With ws
Dim n As Long
Dim nlast As Long
nlast = .UsedRange.Rows(.UsedRange.Rows.Count).Row
For n = nlast To 9 Step -1
Select Case False
Case .Cells(n, 4).Value = vbNullString
Case .Cells(n, 5).Value = vbNullString
Case .Cells(n, 6).Value = vbNullString
Case .Cells(n, 7).Value = vbNullString
Case .Cells(n, 8).Value = vbNullString
Case .Cells(n, 9).Value = vbNullString
Case .Cells(n, 10).Value = vbNullString
Case .Cells(n, 11).Value = vbNullString
Case Else
.Rows(n).Delete
End Select
Next n
End With
Next ws
End Sub

请注意,还有更可靠的方法可以找到工作表的最后一行。

关于VBA 代码删除不正确的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41151801/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com