用于设置验证的ExcelVBA代码抛出1004错误



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

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

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 part 引发 1004 错误("应用程序定义或对象定义的错误"(。

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

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

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

没关系,但是

=COUNTIF(INDIRECT("tblCountry[Country]");INDIRECT("tblCountry[@Country]"))=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

相关内容

  • 没有找到相关文章

最新更新