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

