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

空工作表执行VBA宏触发Error '13',求错误处理方案

VBA代码报错修正方案

核心问题梳理

原代码存在三个关键错误:

  • LastRow获取逻辑失效(无数据时会跳到工作表最后一行)
  • 空值判断语法错误(直接比较单元格集合与空字符串)
  • 可见区域单元格引用错误(行号与可见区域的相对位置不匹配)

修正后的代码片段

' 修正:从底部向上获取G列最后一行有数据的行号
lastrow = Cells(Rows.Count, "G").End(xlUp).Row

' 先判断G3以下是否无数据
If lastrow < 3 Then
    MsgBox "データが見つかりません。結果シートを削除します。", vbOKOnly + vbExclamation, "エラー"
    resultWS.Delete
    Exit Sub
End If

Set rngVisible = Range("A3:S" & lastrow).SpecialCells(xlCellTypeVisible)
' 处理筛选后无可见单元格的错误
If Err.Number = 1004 Then
    MsgBox "データが見つかりません。結果シートを削除します。", vbOKOnly + vbExclamation, "エラー"
    resultWS.Delete
    Exit Sub
End If
Err.Clear

Set buyerStoreMap = CreateObject("Scripting.Dictionary")
buyerStoreMap.RemoveAll

' 遍历可见区域的每一行,避免行号不匹配问题
Dim rngRow As Range
For Each rngRow In rngVisible.Rows
    Dim cellValue As Variant
    cellValue = rngRow.Cells(1, 7).Value ' 获取当前行第7列(G列)的值
    
    ' 全面判断空值场景
    If IsEmpty(cellValue) Or cellValue = "" Or IsNull(cellValue) Then
        MsgBox "データが見つかりません。結果シートを削除します。", vbOKOnly + vbExclamation, "エラー"
        resultWS.Delete
        Exit Sub
    Else
        buyerName = Trim(CStr(cellValue))
    End If
    
    If buyerName <> "" Then
        ' 后续逻辑代码...
    End If
Next rngRow

关键修改说明

  1. LastRow获取逻辑:从工作表底部向上查找G列最后一个有数据的单元格,避免无数据时跳到无效行号;同时判断lastrow < 3直接提示无数据。
  2. 捕获SpecialCells错误:当筛选后没有可见单元格时,SpecialCells(xlCellTypeVisible)会抛出1004错误,需捕获并处理。
  3. 遍历可见区域方式:用For Each遍历可见区域的每一行,确保单元格引用是基于当前可见行的相对位置,避免原代码中rowIndex与实际可见行不匹配的问题。
  4. 空值判断逻辑:综合IsEmpty、空字符串、IsNull三种情况,覆盖所有可能的空值场景,避免报错。

内容的提问来源于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:50:57