[英]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.