VBA筛选上月数据报错‘NO CELLS WERE FOUND’,求助添加条件
解决VBA代码"NO CELLS WERE FOUND"报错问题
嘿,我懂你现在的困扰——运行这段筛选排除上月日期的VBA代码时,一旦没有符合条件的数据,就弹出"NO CELLS WERE FOUND"错误,加了else msgbox也没用对吧?其实问题出在:当没有可见数据行时,SpecialCells(xlCellTypeVisible)找不到目标单元格就会触发错误。咱们给代码加个判断逻辑和错误防护,就能完美解决这个问题了。
修改后的完整代码
Sub ExclusionDates() Dim sh As Worksheet, ws As Worksheet Dim filteredRange As Range Set sh = Worksheets("Raw Data") ' 设置要筛选的工作表 Set ws = Worksheets("Exclusion") ' 设置要粘贴的工作表 ' 清空粘贴工作表中A到AD列的已有内容 ws.Range("AD1", ws.Cells(ws.Rows.Count, "A").End(xlUp)).ClearContents ' Application.ScreenUpdating = False ' 如需提速可以取消注释 With sh ' 引用要复制数据的工作表 With .Range("AD1", .Cells(.Rows.Count, "A").End(xlUp)) ' 引用要筛选的单元格区域 .AutoFilter Field:=10, Criteria1:=xlFilterLastMonth, Operator:=xlFilterDynamic ' 判断是否有除表头外的筛选结果(Subtotal(103)统计可见单元格数量,表头算1) If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then ' 先把可见单元格(除表头)赋值给变量,避免直接操作报错 On Error Resume Next ' 临时开启错误捕获 Set filteredRange = .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible) On Error GoTo 0 ' 关闭错误捕获 If Not filteredRange Is Nothing Then ' 复制筛选结果到粘贴工作表的最后一行下方 .SpecialCells(xlCellTypeVisible).Copy ws.Cells(ws.Rows.Count, "A").End(xlUp).Offset(0) ' 删除筛选出来的行 filteredRange.EntireRow.Delete End If Else ' 没有找到符合条件的数据时,弹出提示 MsgBox "未找到上月日期的数据,无需执行后续操作!", vbInformation End If End With .AutoFilterMode = False ' 关闭筛选 End With ' Application.ScreenUpdating = True ' 如需提速可以取消注释 End Sub
关键修改点说明
- 添加了筛选结果判断:通过
Subtotal(103, .Cells) > 1确认除了表头外是否有有效数据,没有的话直接弹出提示,避免后续无效操作。 - 增加了Range变量和错误捕获:把可见数据行赋值给
filteredRange,并用If Not filteredRange Is Nothing判断变量是否有效,彻底避免"NO CELLS WERE FOUND"错误。 - 补全了缺失的End If:你原来的代码里注释掉了一个
End If,这会导致逻辑结构错误,现在已经补全。 - 新增无数据提示:当没有上月日期的数据时,会弹出友好提示,让你清楚当前状态。
这样修改后,不管有没有符合条件的数据,代码都能平稳运行啦!
内容的提问来源于stack exchange,提问作者aicirtap
相关产品推荐
相关产品推荐

