繁体   English   中英

通过VBA使用间接公式创建数据验证列表

[英]Creating data validation list with indirect formula through VBA

通常,Excel中的记录选项很棒,但是这次没有帮助。

我可以使用以下代码通过VBA创建数据验证列表:

Sub Macro 8()

With Range("C8").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="=Land"
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With
End Sub

现在这有效。 但是在下面的单元格中,我需要公式为=INDIRECT($C$8) 因此,使用记录器,我得到了几乎相同的代码:

Sub Macro1()

With Range("C9").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="=indirect($C$8)"
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With
End Sub

但是使用该代码,我总会得到一个“应用程序定义的错误或对象定义的错误”,指向该行

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="=indirect($C$8)"

谁能告诉我我的错误在哪里?

您的代码大部分是正确的。 您不需要很多代码即可完成Indirect()部分。 这是整个事情:

Sub Macro8()

With Range("C8").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="=Land"
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With
Range("C9").Formula = "=INDIRECT(""$C$8"")"
End Sub

好的,我可以立即使用它,现在我又遇到了同样的错误...:

With Range("C9").Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:="=Indirect(" & Range("C8").Address & ")"
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True
End With

我不太明白为什么...有人可以解释什么

" & Range("C8").Address & "

手段?

得到它的工作!

我将现有代码放在单独的宏中,并使其相对于ActiveCell

现在,只要在上面的单元格中选择了某项,它就会运行

谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM