循环取决于细胞价值

时间:2014-06-14 05:46:27

标签: excel vba loops excel-vba

我需要宏在Excel中的列中运行并运行TEST过程,直到单元格为空。 TEST过程始终以您选择的单元格结束。以下是它的手动外观,但我想将其编码为循环运行,直到列中的单元格" B"是空的。在此先感谢您的帮助。这是我现在正在做的事情(没有循环):

Sub NotLooped()
Windows("Pattern Scanv4.xlsm").Activate
Sheets("DATA").Select

Range("B2").Select
Application.Run ("TEST")

If ActiveCell.Offset(1, 0).Value = 0 Then
ElseIf ActiveCell.Offset(1, 0).Value > 0 Then
ActiveCell.Offset(1, 0).Range("A1").Select
Application.Run ("TEST")
End If

If ActiveCell.Offset(1, 0).Value = 0 Then
ElseIf ActiveCell.Offset(1, 0).Value > 0 Then
ActiveCell.Offset(1, 0).Range("A1").Select
Application.Run ("TEST")
End If

'etc.................

If ActiveCell.Offset(1, 0).Value = 0 Then
ElseIf ActiveCell.Offset(1, 0).Value > 0 Then
ActiveCell.Offset(1, 0).Range("A1").Select
Application.Run ("TEST")
End If

If ActiveCell.Offset(1, 0).Value = 0 Then
ElseIf ActiveCell.Offset(1, 0).Value > 0 Then
ActiveCell.Offset(1, 0).Range("A1").Select
Application.Run ("TEST")
End If

End Sub

1 个答案:

答案 0 :(得分:0)

试试这个:

Sub Looped()
    Dim sht As Worksheet, rng as Range

    Set sht = Workbooks("Pattern Scanv4.xlsm").Sheets("DATA")

    sht.Parent.Activate
    sht.Select

    Set rng = sht.Range("B2")
    Do While Len(rng.value) > 0
        rng.Select
        TEST
        Set rng = rng.offset(1,0)
    Loop
End Sub

但是,如果您的代码不依赖于特定工作表处于活动状态或选择给定范围,那将会更好。

如果您修改TEST Sub以添加Range参数,则可以将rng直接传递给它。

即。而不是:

Sub TEST()
   ...do something with selection/activecell

你可以这样做:

Sub TEST(rng As Range)
   ...do something with rng

并将其称为:

TEST rng

请参阅How to avoid using Select in Excel VBA macros