如何在运行带有variables的删除行时避免子集超出范围
我知道这可能是以各种格式被问到的,但是我对编码是全新的,并且不知道如何将它应用到这个函数中。
运行此vba时,我不断收到下标超出范围的错误消息。
Sub KeepOnlyAtSymbolRows() Dim ws As Worksheet Dim rng As Range Dim lastRow As Long Set ws = ActiveWorkbook.Sheets("Sheet1") lastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row Set rng = ws.Range("A1:A" & lastRow) With rng .AutoFilter Field:=1, Criteria1:="<>*International SBU*" .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete End With ws.AutoFilterMode = False End Sub
对于上下文我目前的工作表是178行,并上升到AK,但行数会有所不同,每个更新的列数不会
当你像这样硬编码表的名字时要小心:
Set ws = ActiveWorkbook.Sheets("Sheet1")
因为如果您在Excel中更改名称,则还必须在代码中使用该名称(很快您会发现错误消息)
所以不同的方式来调用/引用一张表 :
古典,与工作表的名称
Set ws = ActiveWorkbook.Sheets("Sheet1")
使用索引
Set ws = ActiveWorkbook.Sheets(1)
使用工作表的对象名称
Set ws = ActiveWorkbook.Sheet1
即使您在Excel中直接重命名工作表,该名称也不会改变!
我假设你没有和桌子一起工作。 如果是这样的话,试试这个:
Sub KeepOnlyAtSymbolRows() Dim ws As Worksheet Dim rng As Range Dim lastRow As Long Set ws = ActiveWorkbook.Sheets("Sheet1") lastRow = ws.Range("A" & ws.Rows.Count).End(xlUp).Row Set rng = ws.Range("A1:A" & lastRow) Application.DisplayAlerts = False 'to stop prompting for deletion With rng .AutoFilter Field:=1, Criteria1:="<>*International SBU*" .Offset(1, 0).SpecialCells(xlCellTypeVisible).Delete End With ws.AutoFilterMode = False Application.DisplayAlerts = True End Sub