筛选后工作表无可见数据时,如何退出VBA的Sub过程?
修改方案
调整目标范围,排除表头
将原本包含表头的整列范围,改为从表头下第一行开始的数据区域,确保仅统计实际数据行,避开表头干扰。优化判断逻辑
范围排除表头后,若筛选无可见数据行,visCells会被设为Nothing,直接通过该条件即可触发退出流程。
修改后的代码:
Selection.AutoFilter Field:=2, Criteria1:=DATE_ONE, Operator:=xlAnd, Criteria2:=DATE_TWO Dim visCells As Range Dim cellRange As Range ' 定位G列第2行到最后一行有数据的区域,跳过第1行表头 Set cellRange = ActiveSheet.Range("G2:G" & ActiveSheet.Cells(ActiveSheet.Rows.Count, "G").End(xlUp).Row) On Error Resume Next Set visCells = cellRange.SpecialCells(xlCellTypeVisible) On Error GoTo 0 ' 无可见数据行时执行中断逻辑 If visCells Is Nothing Then MsgBox "データが見つかりません。処理を中断します。", vbOKOnly + vbExclamation, "エラー" Application.DisplayAlerts = False resultWS.Delete originC.Worksheet.Parent.Activate originC.Worksheet.Activate originC.Select Application.DisplayAlerts = True Exit Sub End If
补充说明
- 原代码中
visCells.Count = cellRange.Columns.Count的逻辑存在错误:整列的列数固定为1,而表头始终可见会导致该判断无法识别无数据的情况。调整范围后,只需判断visCells是否为Nothing即可准确识别无数据行的状态。 - 若你的表头不在第1行,只需将代码中的
G2替换为表头下第一行数据的单元格地址(比如表头在第3行,就改为G4)。
内容的提问来源于stack exchange,提问作者Anpo Desu
相关产品推荐
相关产品推荐

