如何使用可变范围的循环

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

有人可以帮我理解如何让我的代码识别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 

你需要使用一个数组,如果你想要一个像这样的设置。 就是这样:

replace你的variables声明语句

 '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 

然后改变你如何设置范围:

 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") 

当你循环它们时,看起来像这样:

  For Each curCell In arrRanges(i).Cells 

你可以给一个范围variables赋一个不连续的范围,而不是使用4个不同的范围variables或者一个范围数组(像@tigeravatar在他们的优秀答案中所build议的那样)。 像这样的东西:

 Sub test() Dim R As Range Dim myCell As Range Dim ws As Worksheet Dim i As Long Set ws = ActiveSheet Set R = ws.Range("E6:E9,E15:E19,E21,E23") i = 1 For Each myCell In R.Cells myCell.Value = i i = i + 1 Next myCell End Sub 

我会更进一步

  • 看看整个范围内的每个范围。
  • 使用variables数组来处理范围(其中范围区域是多个单元格),然后转储回范围。

 Sub recut() Dim rng1 As Range Dim rng2 As Range Dim lngCol As Long Dim lngRow As Long Dim ws As Worksheet Set ws = ActiveSheet Set rng1 = ws.Range("E6:E9,E15:E19,E21,E23") For Each rng2 In rng1.Areas If rng2.Cells.Count > 1 Then x = rng2.Value For lngRow = 1 To UBound(x) For lngCol = 1 To UBound(x, 2) If IsNumeric(x(lngRow, lngCol)) Then x(lngRow, lngCol) = 0 Next Next rng2.Value2 = x Else If IsNumeric(rng2.Value) Then rng2.Value = 0 End If Next rng2 End Sub