我试图运行一个简单的嵌套If&多个工作表的Do Until循环:
Sub DoUntil()
Dim ws As Worksheet
Dim i As Integer
For Each ws In ActiveWorkbook.Worksheets
For i = 1 To 25
If ws.Cells(i, 10) = "T" Then
ws.Cells(i, 10).Select
Do Until ActiveCell = "P"
ActiveCell.Offset(1, 1) = 1
ActiveCell.Offset(1, 0).Select
Loop
End If
Next i
Next ws
End Sub
目的:此功能用于循环一列,并将1放在右侧的下一列中。 1之后必须在" T"之后开始。并结束于" P"。 T&P和P的间距不均匀。
问题:在没有ws的情况下为单个工作表运行此代码。对象没有问题。但是,只要我想循环遍历多个工作表,.Select就无法获取指定的范围(错误1004)。
给出了此错误ws.Cells(i, 10).Select
问题:我知道使用.Select属性的危险,但我不确定如何解决这个问题,因为ActiveCell对我的Do Until函数至关重要。是否有另一种方法来运行我的Do Until函数,该函数将与If语句一起使用并循环显示多个工作表?
答案 0 :(得分:1)
尝试以下方法:
Sub DoUntil()
Dim ws As Worksheet
Dim i As Integer, j as Integer
For Each ws In ActiveWorkbook.Worksheets
For i = 1 To 25
If ws.Cells(i, 10) = "T" Then
j = i
Do Until ws.Cells(j,10) = "P"
ws.Cells(j, 10+1) = 1
j = j + 1
Loop
End If
Next i
Next ws
End Sub
答案 1 :(得分:0)
使用匹配,类似于
cells(match("T",range("a1:a50000"),0),1)
来
cells(match("P",range("a" & match("T",range("a1:a50000"),0) & ":a50000"),0),1)
等等
range(cells(y,x),cells(y2,x2)).offset(0,1).value=1