循环数据验证; set range =不基于单元格来源的数据验证列表

时间:2017-01-19 16:40:04

标签: excel vba excel-vba validation

我确切地知道我的问题是什么,但无法找到解决方案。

我有两张纸,它们运行几乎相同的代码,但第二张纸是第一张纸头的子纸。

这是我的代码:

Dim inputRange, inrng2 As Range

 Dim c, d As Range
Set inputRange = Evaluate(ws2.Range("D1").Validation.Formula1)
 For Each c In inputRange

 temp = c.Value

     ws2.Cells(1, 4).Value = temp
    ws2.Activate
    ws2.PrintOut


   ws3.Activate

Set inrng2 = Evaluate(ws3.Range("D1").Validation.Formula1)


 For Each d In inrng2

 temp = d.Value

     ws3.Cells(1, 4).Value = temp
    ws3.Activate
    ws3.PrintOut
Next d

我的问题是,inrng2给了我一个类型不匹配的错误。

这是因为我对ws3表的数据验证是由早期在表单不同部分的代码驱动的:

ThisWorkbook.ws3.Activate

ActiveSheet.Range("D1:E2").Select
With Selection.Validation
    .Delete
    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
    xlBetween, Formula1:=TClist
    .IgnoreBlank = True
    .InCellDropdown = True
    .InputTitle = ""
    .ErrorTitle = ""
    .InputMessage = ""
    .ErrorMessage = ""
    .ShowInput = True
    .ShowError = True


End With

其中TC list是由ws2标头

驱动的逗号分隔字符串

所以

 Set inputRange = Evaluate(ws2.Range("D1").Validation.Formula1)

有效,因为公式为:='团队代码'!$ N $ 2:$ N $ 6

但是

 Set inrng2 = Evaluate(ws3.Range("D1").Validation.Formula1)

不起作用,因为'公式'是:

team1,team2,team3等

这个印刷元素是构建这张纸的长期努力的最后一个方面,我对这张纸的其余部分表现非常满意。如何让vba循环遍历列出的每个数据验证项目?

谢谢!

1 个答案:

答案 0 :(得分:0)

感谢@rory,我只是需要朝着正确的方向努力,以打破我的隧道愿景:

teamlist = ws3.Range("D1").Validation.Formula1
   tlsplit() = Split(teamlist, ",")



 For i = LBound(tlsplit) + 1 To UBound(tlsplit)

' +1 so you dont start at 0


     ws3.Cells(1, 4).Value = tlsplit(i)
    ws3.Activate
    ws3.PrintOut
Next i