VBA Excel验证命名区域错误1004

niwlg2el  于 2023-02-05  发布在  其他
关注(0)|答案(1)|浏览(190)

我有一个宏,它会在一个更改事件上添加验证。在名称管理器中,我有一个表,它是“Table1”,我将其更改为“tblBrand”。这行代码应该从该表创建一个列表,但它抛出了错误1004。

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Operator:=xlBetween, Formula1:="=tblBrand"

奇怪的是,我以前使用过名称框,并将此表命名为“shtblBrand”,这样做效果很好。但在名称管理器中,我基本上将每个表命名了两次。因此,此表在名称管理器中命名为Table1和shtblBrand。为了提高效率,我删除了shtblBrand,并将Table1重命名为tblBrand。这时,它停止工作并抛出错误1004。

ozxc1zmp

ozxc1zmp1#

不应在公式中输入=符号,更正代码为:事实上你应该。

With shPD.Cells(tr, Range("pdBrand").Column).Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Operator:=xlBetween, Formula1:="tblBrand"
End With

好的,我做了进一步的实验。不知何故,Table不是普通的Name。如果你在Names窗口中查看它们,它们有一个不同的图标,并且它们不在ThisWorkbook.Names中枚举。结果,它们不允许在Formula1中使用。
您应该创建一个具有相同范围的新名称,或者创建一个新名称,例如引用表=tblBrandtblBrandIndirect(可以通过VBA,但通过“名称”窗口更容易),并在Formula1中使用该名称:

With shPD.Cells(tr, Range("pdBrand").Column).Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertInformation, Operator:=xlBetween, Formula1:="tblBrandIndirect"
End With

这样,您既可以将其用作表,也可以将其用作普通名称,而无需更新其地址。

相关问题