VBA循环中设置自定义公式数据验证触发1004运行时错误如何解决?
报错原因
- 公式语法不符合VBA要求:VBA中数据验证的
Formula1参数强制要求使用英文函数名、英文逗号作为参数分隔符,不识别本地化函数(如你使用的LICZ.JEŻELI)和本地化的分号分隔符,这是触发报错的核心原因。 - 单元格引用未绑定指定工作表:代码中的
Range、Cells对象没有显式绑定到Sheets("B"),如果运行代码时活动工作表不是B表,会出现范围引用错位,触发1004错误。 - 多余的无效参数:自定义类型(
xlValidateCustom)的数据验证不需要指定Operator:=xlBetween参数,该参数仅适用于数值区间类验证规则,多余的无效参数也可能触发异常。
解决方法
按以下规则修正代码即可:
- 公式统一使用英文语法:函数名用
COUNTIF,参数分隔符替换为英文逗号 - 所有单元格/范围对象显式绑定到目标工作表,避免引用错位
- 删除
.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
相关产品推荐
相关产品推荐

