如何在运行带有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