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

VBA循环中设置自定义公式数据验证触发1004运行时错误如何解决?

报错原因
  • 公式语法不符合VBA要求:VBA中数据验证的Formula1参数强制要求使用英文函数名、英文逗号作为参数分隔符,不识别本地化函数(如你使用的LICZ.JEŻELI)和本地化的分号分隔符,这是触发报错的核心原因。
  • 单元格引用未绑定指定工作表:代码中的Range、Cells对象没有显式绑定到Sheets("B"),如果运行代码时活动工作表不是B表,会出现范围引用错位,触发1004错误。
  • 多余的无效参数:自定义类型(xlValidateCustom)的数据验证不需要指定Operator:=xlBetween参数,该参数仅适用于数值区间类验证规则,多余的无效参数也可能触发异常。
解决方法

按以下规则修正代码即可:

  1. 公式统一使用英文语法:函数名用COUNTIF,参数分隔符替换为英文逗号
  2. 所有单元格/范围对象显式绑定到目标工作表,避免引用错位
  3. 删除.Add方法中多余的Operator参数

修正后的核心代码如下:

Dim valFormula As String
Dim ws As Worksheet
' 提前绑定工作表,避免重复引用出错
Set ws = Sheets("B")

For Each cell In ws.Range(ws.Cells(4, 2), ws.Cells(LastRow, 2))
     
    If cell.Row = 54 Or cell.Row = 55 Then
         '<some code>
    
    ElseIf cell.Row = 4 Then
        ' 公式改用英文函数+英文逗号分隔
        valFormula = "=COUNTIF($B$4:" & ws.Cells(4, LastColumn).Address & "," & cell.Address(0,0) & ")<2"
        ' 所有范围绑定到ws工作表
        With ws.Range(ws.Cells(cell.Row, 2), ws.Cells(cell.Row, LastColumn)).Validation
            .Delete
            ' 去掉多余的Operator参数
            .Add Type:=xlValidateCustom, AlertStyle:=xlValidAlertStop, Formula1:=valFormula
            .IgnoreBlank = True
            .InCellDropdown = True
            .InputTitle = ""
            .ErrorTitle = ""
            .InputMessage = ""
            .ErrorMessage = ""
            .ShowInput = True
            .ShowError = True
        End With
        '<some code>
    End If
Next

调试时可以在.Add代码行前添加Debug.Print valFormula,输出的公式直接复制到英文模式的Excel公式栏可正常运行,即代表公式语法正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 07:15:03