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

时间:2016-03-19 17:06:07

标签: excel vba validation macros excel-indirect

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

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

topicIds

现在这个有效。但是在下面的Cell中,我需要公式为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 。所以使用Recorder我得到了几乎相同的代码:

=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

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

3 个答案:

答案 0 :(得分:0)

您的代码大部分是正确的。您不需要很多代码来执行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

答案 1 :(得分:0)

好的,我用它来工作ONCE,现在我再次得到同样的错误......:

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 & "

装置?

答案 2 :(得分:0)

让它发挥作用!

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

现在只要在上面的单元格中选择了某些内容就会运行

谢谢你!