【问题标题】:Excel VBA code to set validation throws 1004 error设置验证的 Excel VBA 代码引发 1004 错误
【发布时间】:2019-12-30 19:32:25
【问题描述】:

我遍历表格的列,并且对于每一列我遍历单元格,检查值是否符合单元格的验证。现在我想在我的代码中添加:如果任何其他单元格中缺少验证(存在于第二行),则验证将复制到该单元格。

首先我为第二行中的内容创建一个 Validation 对象:

Dim valMasterValidation As Validation
Set valMasterValidation = recordInTable.Range(columnInTable.Index).Validation

然后当单元格中缺少验证时,我添加一个验证如下:

With recordInTable.Range(columnInTable.Index).Validation
   .Add Type:=valMasterValidation.Type, _
      AlertStyle:=valMasterValidation.AlertStyle, _
      Operator:=valMasterValidation.Operator, _
      Formula1:=valMasterValidation.Formula1, _
      Formula2:=valMasterValidation.Formula2
   .IgnoreBlank = valMasterValidation.IgnoreBlank
   .ErrorTitle = valMasterValidation.ErrorTitle
   .ErrorMessage = valMasterValidation.ErrorMessage
End With

但是,.Add 部分会引发 1004 错误(“应用程序定义的或对象定义的错误”)。

为什么会这样?解决方案必须如何?

进一步调查后的附加信息:一些验证公式 (= Validation.Formula1) 将被复制而没有任何问题,其他则引发问题。例如:

=LEN(INDIRECT("tblCalibre[@CalibreName]"))>3

没问题,但是

=COUNTIF(INDIRECT("tblCountry[Country]");INDIRECT("tblCountry[@Country]"))=1

导致错误。

【问题讨论】:

    标签: excel validation


    【解决方案1】:

    这是一个语言环境问题...阅读 .Validation.Formula1 显然会返回一个带有“;”的公式在里面,但必须用“,”写。所以我的代码现在有:

    With recordInTable.Range(columnInTable.Index).Validation
       .Add Type:=valMasterValidation.Type, _
            AlertStyle:=valMasterValidation.AlertStyle, _
            Operator:=valMasterValidation.Operator, _
            Formula1:=Replace(valMasterValidation.Formula1, ";", ","), _
            Formula2:=Replace(valMasterValidation.Formula2, ";", ",")
    End With
    

    【讨论】:

      猜你喜欢
      • 2013-03-11
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多