VBA 代码未删除整行导致数据未对齐

问题描述 投票:0回答:1

我正在开发一个 Excel 宏,以便在两列中的任何一列包含 #N/A 时从表中删除行。该表名为 TrialData,位于工作表 Trial Sheet 上。如果 Dog 或 Partner Dog 列包含 #N/A,则代码应删除整行。然而,该代码似乎只删除 A-C 列,而不是整行。谁能帮我弄清楚为什么会发生这种情况?

这是当前代码:

Sub DeleteRowsBasedOnNA()
Dim ws As Worksheet
Dim tbl As ListObject
Dim rng As Range
Dim cell As Range
Dim delRng As Range

' Set worksheet and table
Set ws = ThisWorkbook.Worksheets("Trial Sheet")
Set tbl = ws.ListObjects("TrialData") ' Ensure the table is named 'TrialData'

' Activate worksheet (optional)
ws.Activate

' Clear any existing filters
If tbl.AutoFilter.FilterMode Then
    tbl.AutoFilter.ShowAllData
End If

' Loop through each row in the table to find #N/A in columns 2 (Dog) and 3 (Partner Dog)
For Each cell In tbl.ListColumns(2).DataBodyRange
    If IsError(cell.Value) Or IsError(cell.Offset(0, 1).Value) Then
        If delRng Is Nothing Then
            Set delRng = cell.EntireRow
        Else
            Set delRng = Union(delRng, cell.EntireRow)
        End If
    End If
Next cell

' Delete the identified rows
If Not delRng Is Nothing Then
    delRng.Delete
End If

' Clear filters and reset AutoFilter mode
If tbl.AutoFilter.FilterMode Then
    tbl.AutoFilter.ShowAllData
End If

End Sub
excel vba
1个回答
0
投票

请尝试下一个更简单的代码变体,不涉及任何迭代:

Sub deleteTableErrorRows()
 Dim sh As Worksheet: Set sh = ThisWorkbook.Worksheets("Trial Sheet")
 Dim tbl As ListObject: Set tbl = sh.ListObjects("TrialData")
 
 Dim rngDel As Range
 On Error Resume Next
  Set rngDel = tbl.ListColumns(2).DataBodyRange.Resize(, 2).SpecialCells(xlCellTypeFormulas, xlErrors)
 On Error GoTo 0
 If Not rngDel Is Nothing Then rngDel.EntireRow.Delete
End Sub

您的代码应该可以工作。即使如此,不将所有行保留在

Union
范围内会更有效。您可以尝试仅将找到的单元格放入范围中,然后在末尾删除,如上所示
rngDel.EntireRow.Delete

© www.soinside.com 2019 - 2024. All rights reserved.