You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

筛选后工作表无可见数据时,如何退出VBA的Sub过程?

修改方案
  1. 调整目标范围,排除表头
    将原本包含表头的整列范围,改为从表头下第一行开始的数据区域,确保仅统计实际数据行,避开表头干扰。

  2. 优化判断逻辑
    范围排除表头后,若筛选无可见数据行,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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 14:13:12