我正在尝试删除数据集中所有注释为“ New”的行。为此,我首先自动过滤E列中的“ new”(效果很好),并使用代码“ specialcells”将其删除。我使用了两种方法,一种是通过命名范围,另一种是通过命名表。对于这两个代码,我都有运行时错误“ 104”
调试时,下面的代码行显示运行时错误104;
-表
tableData.DataBodyRange.SpecialCells(xlCellTypeVisible).Rows.Delete
-范围
tableData.SpecialCells(xlCellTypeVisible).Rows.Delete
奇怪的是,有时它设法删除单元格,但仍会显示运行时错误104弹出窗口,其他时候我的excel工作簿在运行代码时崩溃。
我不确定我要去哪里错了://您的帮助将不胜感激!谢谢
下面是带有表的代码
Sub Deleterows_Tryagain()
Dim ws As Worksheet
Dim tableData As ListObject
'Worksheet
Set ws = ThisWorkbook.Worksheets("Run_Mailbox")
'Declare table1
Set tableData = ws.ListObjects(1)
'Autofilter Column E,comment "New"
tableData.Range.AutoFilter field:=5, Criteria1:="New"
'Delete Rows with comment "New"
tableData.DataBodyRange.SpecialCells(xlCellTypeVisible).Rows.Delete
'Show all data
ws.ShowAllData
End Sub
指示范围的代码
Sub Deleterow_NewInvoices()
Dim Rng As Range
Dim tableData As Range
'The Table
Set tableData = Range(Range("A9").End(xlDown), Range("E9"))
'The range to filter the data
Set Rng = Range(Range("A8").End(xlDown), Range("E8"))
'Autofilter Column E,comment "New"
Rng.AutoFilter field:=5, Criteria1:="New"
'Delete row
tableData.SpecialCells(xlCellTypeVisible).Rows.Delete
Rng.ShowAllData
End Sub
答案 0 :(得分:0)
您也可以使用类似的方法。
它不使用自动过滤器,而是从第9行开始删除第5列中所有带有“ New”的行
Sub DeleteRowsIf()
Dim lRow As Long
Dim iCntr As Long
lRow = Range("A8").End(xlDown).Row
For iCntr = lRow To 9 Step -1
If Cells(iCntr, 5).Value = "New" Then
Rows(iCntr).Delete
End If
Next
End Sub
答案 1 :(得分:0)
经过一番谷歌搜索后,我找到了答案。我的代码无法正常工作,因为我的工作表受到保护。为了纠正这一点;
声明工作表并取消保护
Set ws = ThisWorkbook.Worksheets("blabla")
ws.Unprotect
具有下表的完整代码
'Select worksheet
Set ws = ThisWorkbook.Worksheets("blabla")
'Done to avoid errors
ws.Unprotect
'Declare table1
Set tableData = ws.ListObjects(1)
'Autofilter Column E,comment "New"
tableData.Range.AutoFilter Field:=5, Criteria1:="New"
'Delete Rows with comment "New"
tableData.DataBodyRange.SpecialCells(xlCellTypeVisible).Rows.Delete
End Sub
我希望这对某人有帮助:)