View Single Post
  #3   Report Post  
Posted to microsoft.public.excel.programming
L. Howard L. Howard is offline
external usenet poster
 
Posts: 852
Default Sheets(MyArr(i)).Range("L2:L20") to a variable range of column L

try it this way:

Sub Greater_Than_Copy()
Dim MyArr As Variant
Dim c As Range
Dim i As Long
Dim rngA As Range, lrMA As Range
Dim lrCl As Long

With Sheets("Sheet5")
lrCl = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("A1:L" & lrCl).ClearContents
End With

MyArr = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")

Application.ScreenUpdating = False

For i = LBound(MyArr) To UBound(MyArr)

With Sheets(MyArr(i))
lrCl = .Cells(Rows.Count, "L").End(xlUp).Row
Set rngA = .Range("L2:L" & lrCl)

For Each c In rngA
If c.Value 0 Then
c.Offset(, -11).Resize(1, 12).Copy Sheets("Sheet5") _
.Range("A" & Rows.Count).End(xlUp)(2)
End If
Next 'c

End With
Next 'i

Application.ScreenUpdating = True
End Sub

But faster without the loop through the cells:

Sub Greater_Than_Copy2()
Dim MyArr As Variant
Dim c As Range
Dim i As Long
Dim rngA As Range, lrMA As Range
Dim lrCl As Long

With Sheets("Sheet5")
lrCl = .Cells(Rows.Count, 1).End(xlUp).Row
.Range("A1:L" & lrCl).ClearContents
End With

MyArr = Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")

Application.ScreenUpdating = False

For i = LBound(MyArr) To UBound(MyArr)

With Sheets(MyArr(i))
lrCl = .Cells(Rows.Count, "L").End(xlUp).Row
.Range("L:L").AutoFilter Field:=1, Criteria1:="0"
.Range("A2:L" & lrCl).SpecialCells(xlCellTypeVisible).Copy _
Sheets("Sheet5").Range("A" & Rows.Count).End(xlUp)(2)
End With
Next 'i

Application.ScreenUpdating = True
End Sub


Regards
Claus B.
--


Hi Claus,

Well, rats, that fix looks just like at least one of my attempts, I guess I was just missing a dot or some little thing. Every attempt compiled but always threw an error.

The filter method seems to be gaining popularity, I see more and more of it.

Thanks for corrections.

Howard