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

运行Excel VBA触发1004错误 无法获取WorksheetFunction类CountIf属性求助

修复VBA运行时错误1004(WorksheetFunction.CountIf属性获取失败)方案

错误核心原因

Application.WorksheetFunction.CountIf 当搜索范围无效、待匹配值为错误值(如#N/A、#VALUE!)或无匹配结果时,会直接抛出运行时错误,而非返回0或错误值。

可行修复步骤

  • 步骤1:替换CountIf调用方式

    放弃带强制抛错机制的WorksheetFunction.CountIf,改用Application.CountIf,后者执行出错时会返回错误值而非中断程序,可配合IsError()判断处理。
  • 步骤2:前置校验范围和匹配值合法性

    先确认搜索范围Sheet5.Range(Data_pocetak, Data_kraj)有效,且待匹配值不是错误值,再执行计数逻辑。
  • 步骤3:修改高亮行代码

    原报错高亮代码替换为如下逻辑:
    Dim searchRng As Range
    Dim matchVal As Variant
    Dim countResult As Variant
    
    ' 定义搜索范围和待匹配值
    Set searchRng = Sheet5.Range(Data_pocetak, Data_kraj)
    matchVal = Sheet5.Range(Data_pocetak).Offset(Broj_offset_redka, 6).Value
    
    ' 前置校验
    If Not searchRng Is Nothing And Not IsError(matchVal) Then
        countResult = Application.CountIf(searchRng, matchVal)
        ' 若返回错误值则赋值为0
        If IsError(countResult) Then countResult = 0
        Sheet5.Range(Data_pocetak).Offset(Broj_offset_redka, 8).Value = countResult
    Else
        ' 范围或值非法时默认赋值0
        Sheet5.Range(Data_pocetak).Offset(Broj_offset_redka, 8).Value = 0
    End If
    
  • 额外优化建议

    你代码中所有Range.Find调用都没有判断返回值是否为Nothing,如果查找不到对应文本直接取.Address也会触发1004错误,建议所有Find逻辑都增加非空判断:
    Dim findRng As Range
    Set findRng = Sheet5.Range("B:B").Find(Trazeni_tekst_1, lookAt:=xlWhole)
    If Not findRng Is Nothing Then
        Pocetak = findRng.Address
        ' 原有后续逻辑
    End If
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:39:04