我确切地知道我的问题是什么,但无法找到解决方案。
我有两张纸,它们运行几乎相同的代码,但第二张纸是第一张纸头的子纸。
这是我的代码:
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循环遍历列出的每个数据验证项目?
谢谢!
答案 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