我遍历表的列,对于每一列,我遍历单元格,检查值是否符合单元格的验证。现在我想添加到我的代码中:如果任何其他单元格中缺少验证(存在于第 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