如何使用Loop with Variable Range

SAS*_*00b 1 excel vba excel-vba

在下面的代码中,当我到达Range(i)中的每个curCell时,它无法理解我引用的Range.我收到一个Object'_worksheet'方法'范围'失败了.我知道当前的范围(i)是不正确的,但我已经尝试了每一个变化,似乎没有任何效果.

有人可以帮我理解如何让我的代码识别Range1,然后Range2等?

Sub Worksheet_Change(ByVal Target As Range)

Dim Range1 As Range, Range2 As Range, Range3 As Range, Range4 As Range
Dim curCell As Variant
Dim i As Integer
Dim ws As Worksheet

Set ws = ThisWorkbook.Worksheets(cCostingQSheet)

Set Range1 = ws.Range("E6:E9")
Set Range2 = ws.Range("E15:E19")
Set Range3 = ws.Range("E21")
Set Range4 = ws.Range("E23")

For i = 1 To 4

    For Each curCell In Range(i).Cells

        If Not WorksheetFunction.IsNumber(curCell) = True Then

            curCell.Value = 0

        Else

        End If

    Next

Next

End Sub
Run Code Online (Sandbox Code Playgroud)

tig*_*tar 5

如果你想要这样的设置,你需要使用一个数组.这是如何做:

替换您的变量声明语句

'Instead of your original
'Dim Range1 As Range, Range2 As Range, Range3 As Range, Range4 As Range

'Use this:
Dim arrRanges(1 To 4) As Range
Run Code Online (Sandbox Code Playgroud)

然后更改您设置范围的方式:

Set arrRanges(1) = ws.Range("E6:E9")
Set arrRanges(2) = ws.Range("E15:E19")
Set arrRanges(3) = ws.Range("E21")
Set arrRanges(4) = ws.Range("E23")
Run Code Online (Sandbox Code Playgroud)

当你遍历它们时,它看起来像这样:

        For Each curCell In arrRanges(i).Cells
Run Code Online (Sandbox Code Playgroud)