【问题标题】:Getting error 1004 when deleting filtered rows?删除过滤行时出现错误 1004?
【发布时间】:2018-07-11 16:46:23
【问题描述】:

我试图在过滤指示项目是否仅限供应商(是/否)的列后删除行。

我想删除该列下的值指示“是”的所有行。但是,当我选择要删除的可见行时遇到错误。

我以前在其他宏中使用过相同的代码,但这次它不起作用。

Dim VisibleCell As Long 'Variable to count the number of visible cells after filtering

VisibleCell = Application.WorksheetFunction.Subtotal(3, Range("A3:A50000"))
Range("Table1").Select

'Filter and remove all Vendor Only items
Rows("2:2").Select 'Find column for Vendor Only and filter for Yes values
    Cells.Find(What:="Vendor Item?", After:=ActiveCell, LookIn:=xlFormulas, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False).Activate

MyCol = ActiveCell.Column
ActiveSheet.ListObjects("Table1").Range.AutoFilter Field:=MyCol, Criteria1:= _
    "Yes", Operator:=xlAnd
VisibleCell = Application.WorksheetFunction.Subtotal(3, Range("A3:A50000"))

If VisibleCell > 0 Then
    Range("A3:A2000").SpecialCells(xlCellTypeVisible).Select
    Selection.EntireRow.Delete 'Error occurs here
End If

【问题讨论】:

  • 欢迎来到 Stack Overflow! 请务必查看tour(它也为您赢得了徽章!)...我认为您过于复杂了任务您知道如何使用自动筛选手动执行此操作吗?如果是这样,记录你自己做任何你想做的动作的宏,你的代码将为你编写 90%。
  • 嗨,我最初就是这样做的。我录制了宏并对其进行了调整以供自己使用。它适用于我以前的文件,但由于某种原因不适用于这个文件..

标签: excel vba filter


【解决方案1】:

由于您有一个ListObject,您可以通过其标题(“供应商项目?”)引用ListColumn,而不是Find第2行中的单元格。

另外,当你想过滤时,我会参考那个ListColumnIndex,而不是它的ColumnIndex 返回它在表格中的列号,而Column 将是它在工作表上的列。如果您的表格从 A 列开始(这里听起来就是这种情况),这两者会重合,但如果您的表格位置发生变化,Index 会更加稳健。

最后,不需要ActivateSelect

Option Explicit

Sub DeleteVendorOnly()
    Dim tbl As ListObject
    Dim colIndex As Integer
    Dim rngToDelete As Range

    Set tbl = Sheets("Sheet1").ListObjects("Table1")  ' Change to your sheet name
    colIndex = tbl.ListColumns("Vendor Item?").Index

    tbl.Range.AutoFilter Field:=colIndex, Criteria1:="Yes"

    On Error Resume Next
        Set rngToDelete = tbl.DataBodyRange.SpecialCells(xlCellTypeVisible)
    On Error GoTo 0

    If Not rngToDelete Is Nothing Then
        rngToDelete.EntireRow.Delete
    End If
End Sub

【讨论】:

  • 您好,感谢您的回复!我刚刚在上面测试了您的代码,但在“rngToDelete.EntireRow.Delete”部分仍然遇到相同的错误... :(:(:(
  • 您的工作表上还有一张桌子吗?
  • OK.. 所以我将代码更改为“rngToDelete.Rows.Delete”,出于某种原因,它可以代替。我不确定为什么 .EntireRow 会给我带来问题.... :(
  • 不,我的工作表中只有一张桌子。
  • 有一个类似的问题EntireRow.Delete 是它的工作方式(工作表上有其他表格(垂直排列)和其他东西,表格不是从 A 列开始)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
  • 2014-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多