INDIRECT在单元格地址上添加引号
运行此代码时没有错误。 但validation公式中的输出是=INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE("A10"," ","_"),"-","_"),"/","_"),"(",""),")",""))
其中范围是“A10”,我需要的是只有没有引号的范围,所以它可以显示下拉菜单。 我尝试了不同的组合,头开始疼痛。
这是我的代码:
Formu1 = ActiveCell.Offset(1, -12).Address(False, False) With Range(Formu1).Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ Operator:=xlBetween, Formula1:="=Name_Range" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With Formu2 = ActiveCell.Offset(1, -10).Address(False, False) offsetter = ActiveCell.Offset(1, -12).Address(False, False) With Range(Formu2).Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _ Formula1:="=INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(""" _ & offsetter & ""","" "",""_""),""-"",""_""),""/"",""_""),""("",""""),"")"",""""))" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With
这个公式只有一个问题。 那就是你在公式里有额外的引号。
""" _ & offsetter & """
所以使用这个
"=INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(" _ & offsetter & _ ","" "",""_""),""-"",""_""),""/"",""_""),""("",""""),"")"",""""))"
现在这个公式会给你一个#REF!
如果=INDIRECT(OUTPUT)
中的=INDIRECT(OUTPUT)
不计算为有效范围,则会出错。
示范
假设你的工作表看起来像这样
现在试试这个代码
offsetter = "A10" With Range("B1").Validation .Delete .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ xlBetween, Formula1:= _ "=INDIRECT(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(" _ & offsetter & _ ","" "",""_""),""-"",""_""),""/"",""_""),""("",""""),"")"",""""))" .IgnoreBlank = True .InCellDropdown = True .InputTitle = "" .ErrorTitle = "" .InputMessage = "" .ErrorMessage = "" .ShowInput = True .ShowError = True End With
产量
说明
在上述代号中,代号SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(" & offsetter & ","" "",""_""),""-"",""_""),""/"",""_""),""("",""""),"")"","""")
代号」)代表「代号SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(" & offsetter & ","" "",""_""),""-"",""_""),""/"",""_""),""("",""""),"")"","""")
代号SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(" & offsetter & ","" "",""_""),""-"",""_""),""/"",""_""),""("",""""),"")"","""")
代号SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(" & offsetter & ","" "",""_""),""-"",""_""),""/"",""_""),""("",""""),"")"","""")
代号SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(" & offsetter & ","" "",""_""),""-"",""_""),""/"",""_""),""("",""""),"")"","""")
代号SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(" & offsetter & ","" "",""_""),""-"",""_""),""/"",""_""),""("",""""),"")"","""")
计算为My_Range
,因此得到正确的值=Index("My_Range")
。 如果它评价说Sidd
那么=Index("Sidd")
会给出一个错误,因为没有范围Sidd