Excel 通过VBA创建间接公式的数据验证列表

Excel 通过VBA创建间接公式的数据验证列表,excel,vba,validation,macros,excel-indirect,Excel,Vba,Validation,Macros,Excel Indirect,通常Excel中的记录选项很好,但这次没有帮助 我可以使用以下代码通过VBA创建数据验证列表: Sub Macro 8() With Range("C8").Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:="=Land" .IgnoreBlank = True .InCellDropd

通常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
现在这是可行的。但是在下面的单元格中,我需要公式是
=间接($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)"

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

你的代码基本上是对的。执行间接()部分不需要很多代码。事情是这样的:

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

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


谢谢你

嗨,迈克,谢谢你的回答!我需要间接单元格也是下拉列表。。。如果我手动执行,它会工作,因为我从C8中获得的值是我工作表中列表的名称,所以我从C9中的列表中获得选择,只需插入=间接($C$8),它不工作。。。有什么想法吗?你必须使用=间接($C$8)。除此之外,我会考虑这个问题的答案。对于任何进一步的问题,最好开始一个新问题。它计算C8的地址。所以它的计算结果是“C8”。所以这是同样的事情。你有C8作为参数。它需要参数作为字符串的地址;所以它应该是“C8”或某个字符串表达式,计算结果是“C8”,啊,我明白了,但现在我完全搞糊涂了。。。它工作了2次,现在要么抛出相同的错误,要么抛出“语法错误”。什么是。。。我做错了吗???还有别的方法写这个吗?错误是什么?在哪一行?再次尝试使用同一行单步执行代码。从。添加