2016-11-04 72 views
0

我想通过使用一个循环的执行列表的数据验证,但我在这条线的错误1004抛出:VBA与数据验证列表循环

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
     xlBetween, Formula1:="=lista" & i 

这是整个代码:

Sub sampllle() 
    For i = 2 To 6 
    With Sheets("HSZI AD").Range("H972:H978").Validation 
     .Delete 
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
     xlBetween, Formula1:="=lista" & i 
     .IgnoreBlank = True 
     .InCellDropdown = True 
     .InputTitle = "" 
     .ErrorTitle = "" 
     .InputMessage = "" 
     .ErrorMessage = "" 
     .ShowInput = True 
     .ShowError = True 
    End With 
    Next i 
    End Sub 

回答

0

我意识到,我必须有在,我想转换成数据验证列出了一些细胞值问题。它现在可以工作

0

让我们退后一步。您的代码似乎会应用验证五次,但您每次都将其删除,以便只保留最后一次。你有命名范围“lista2”等?

+0

.delete函数没有保存在那里,你是对的。我希望单元格h972-h978是数据验证列表,其中公式分别是lista2,lista3,它们是现有的已命名范围 –

+0

您的意思是说H972有lista2,H973有lista3等?在这种情况下,H978将有lista8超出你的循环? – SJR

+0

是的,但问题在于addtpye行。如果它超出我的循环,它仍然会说同样的错误。 –

0

试试这个

Sub sampllle() 

Dim i As Long 

Sheets("HSZI AD").Range("H972:H978").Validation.Delete 

For i = 2 To 6 
    With Sheets("HSZI AD").Range("H972").Offset(i - 2).Validation 
     .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _ 
     xlBetween, Formula1:="=lista" & i 
     .IgnoreBlank = True 
     .InCellDropdown = True 
     .InputTitle = "" 
     .ErrorTitle = "" 
     .InputMessage = "" 
     .ErrorMessage = "" 
     .ShowInput = True 
     .ShowError = True 
    End With 
Next i 

End Sub