在Do Until循环中使用.Select属性的替代方法

时间:2016-06-30 15:44:54

标签: excel vba excel-vba select

我试图运行一个简单的嵌套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语句一起使用并循环显示多个工作表?

2 个答案:

答案 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