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

Excel运行VBA查找ISIN未找到报1004错误,On Error Resume Next应放在何处

VBA代码ISIN查找报错/Excel无响应修复方案

问题根因

  • 原代码第二个Do Loop未设置循环边界,当目标ISIN不存在时,c会持续累加直到超过Excel允许的最大行号,此时访问Cells(c,1)就会触发1004错误,同时无意义的循环累加也会导致Excel无响应。
  • 不推荐直接滥用On Error Resume Next掩盖逻辑问题,更稳妥的方案是提前获取工作表有效数据行边界,避免无限制循环,同时匹配不到时直接跳过当前迭代。

最优修改方案

修改说明

  • 修正变量声明问题:原VBA语法中Dim a,b,c As Double只会把c声明为Double,其余变量默认是Variant类型,统一修正为明确的Long类型(更适配行号存储,无精度隐患)
  • 提前获取两个工作表的有效数据行边界,替代原无意义的计数循环
  • 取消所有冗余的Select操作,VBA操作工作表不需要选中对象,可大幅降低运行卡顿概率
  • 增加匹配状态标记,只有匹配到ISIN才执行赋值操作,匹配失败自动进入下一轮迭代

修改后完整代码

Sub 匹配ISIN()
    Dim a As Long, b As Long, c As Long
    Dim WS1 As String, WS2 As String
    Dim ISIN As String
    Dim maxRow_WS1 As Long, matchFlag As Boolean
    
    WS1 = "1M_issues"
    WS2 = "MI_1"
    
    '获取WS2表A列最大有效行(即待查找的ISIN总数量)
    a = Sheets(WS2).Cells(Rows.Count, 1).End(xlUp).Row
    '获取WS1表A列最大有效行,作为查找循环的终止边界,避免无限循环
    maxRow_WS1 = Sheets(WS1).Cells(Rows.Count, 1).End(xlUp).Row
    
    '遍历所有待查找的ISIN
    For b = 2 To a
        ISIN = Sheets(WS2).Cells(b, 1).Value
        matchFlag = False
        c = 1
        '循环查找ISIN,到WS1最大有效行就自动停止
        Do While c < maxRow_WS1
            c = c + 1
            If Sheets(WS1).Cells(c, 1) Like "*" & ISIN & "*" Then
                matchFlag = True
                Exit Do '找到匹配项后直接退出循环
            End If
        Loop
        
        '仅匹配成功时执行赋值
        If matchFlag = True Then
            Sheets(WS2).Cells(b, 2).Value = Sheets(WS1).Cells(c, 3).Value
        End If
    Next
End Sub

可选:On Error Resume Next兼容方案

如果不想修改原有循环逻辑,仅用错误捕获临时处理,可参考以下写法,注意错误捕获要及时关闭避免掩盖其他问题:

'Find ISIN within cells (looping)
Sheets(WS1).Select
c = 1
On Error Resume Next '出错后继续执行后续代码
Do
    c = c + 1
Loop Until Cells(c, 1) Like "*" & ISIN & "*"
If Err.Number <> 0 Then '错误编号不为0代表未找到ISIN
    Err.Clear '清除错误标记
    On Error GoTo 0 '恢复系统默认错误处理
    GoTo NextISIN '跳转到下一个ISIN迭代
End If
On Error GoTo 0 '匹配成功也恢复默认错误处理

'Copy CR from general_report to target sheet
Sheets(WS2).Cells(b, 2) = Sheets(WS1).Cells(c, 3)
NextISIN:
Next

内容的提问来源于stack exchange,提问作者DataDan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:57:02