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