M
Mountaineer
Hi,
I'm want to autofilter in "Master.xls" sheet1 and paste the results to the
bottom of existing "Current.xls" sheet1. I found a macro by Ron de Bruin
that works if pasting to a worksheet in the same workbook. I tried to modify
it but have not had any luck.
Dim My_Range As Range
Dim DestSh As Worksheet
Dim CalcMode As Long
Dim ViewMode As Long
Dim FilterCriteria As String
Dim CCount As Long
Dim rng As Range
'set filter ranger on Sheet 1 of Master.xls
Windows("Master.xls").Activate
Set My_Range = Worksheets("sheet1").Range("A2:H" &
LastRow(Worksheets("Sheet1")))
My_Range.Parent.Select
'set the destination worksheet. This is where it bombs!
Set DestSh = Worksheets("[Current.xls]sheet1")
'change ScreenUpdating, Calculation, EnableEvents,...
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With
ViewMode = ActiveWindow.View
ActiveWindow.View = xlNormalView
ActiveSheet.DisplayPageBreaks = False
'Firstly, remove the Autofilter
My_Range.Parent.AutoFilterMode = False
'Filter and set the filter field and filter criteria:
My_Range.AutoFilter Field:=1, Criteria1:="=3015"
'Check if there are not more then 8192 areas (limit of areas that Excel
can copy)
CCount = 0
On Error Resume Next
CCount =
My_Range.Columns(1).SpecialCells(xlCellTypeVisible).Areas(1).Cells.Count
On Error GoTo 0
If CCount = 0 Then
MsgBox "There are more than 8192 areas:" _
& vbNewLine & "It is not possible to copy the visible data." _
& vbNewLine & "Tip:Sort your data before you use this macro.", _
vbOKOnly, "Copy to worksheet"
Else
'Copy the visible data and use PasteSpecial to paste to the Desth
With My_Range.Parent.AutoFilter.Range
On Error Resume Next
'Set rng to the visible cells in My_Range without the header row
Set rng = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count) _
.SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If Not rng Is Nothing Then
'copy and paste the cells into Destsh below the existing data
rng.Copy
With DestSh.Range("A" & LastRow(DestSh) + 1)
.PasteSpecial Paste:=8
.PasteSpecial xlPasteValues
.PasteSpecial xlPasteFormats
Application.CutCopyMode = False
End With
End If
End With
End If
'close autofilter
My_Range.Parent.AutoFilterMode = False
'Restore screenupdating, calculation, enableevents...
ActiveWindow.View = ViewMode
Application.Goto DestSh.Range("a2")
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = CalcMode
End With
End Sub
Function LastRow(sh As Worksheet)
On Error Resume Next
LastRow = sh.Cells.Find(what:="*", _
After:=sh.Range("a2"), _
Lookat:=xlPart, _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function
I'm want to autofilter in "Master.xls" sheet1 and paste the results to the
bottom of existing "Current.xls" sheet1. I found a macro by Ron de Bruin
that works if pasting to a worksheet in the same workbook. I tried to modify
it but have not had any luck.
Dim My_Range As Range
Dim DestSh As Worksheet
Dim CalcMode As Long
Dim ViewMode As Long
Dim FilterCriteria As String
Dim CCount As Long
Dim rng As Range
'set filter ranger on Sheet 1 of Master.xls
Windows("Master.xls").Activate
Set My_Range = Worksheets("sheet1").Range("A2:H" &
LastRow(Worksheets("Sheet1")))
My_Range.Parent.Select
'set the destination worksheet. This is where it bombs!
Set DestSh = Worksheets("[Current.xls]sheet1")
'change ScreenUpdating, Calculation, EnableEvents,...
With Application
CalcMode = .Calculation
.Calculation = xlCalculationManual
.ScreenUpdating = False
.EnableEvents = False
End With
ViewMode = ActiveWindow.View
ActiveWindow.View = xlNormalView
ActiveSheet.DisplayPageBreaks = False
'Firstly, remove the Autofilter
My_Range.Parent.AutoFilterMode = False
'Filter and set the filter field and filter criteria:
My_Range.AutoFilter Field:=1, Criteria1:="=3015"
'Check if there are not more then 8192 areas (limit of areas that Excel
can copy)
CCount = 0
On Error Resume Next
CCount =
My_Range.Columns(1).SpecialCells(xlCellTypeVisible).Areas(1).Cells.Count
On Error GoTo 0
If CCount = 0 Then
MsgBox "There are more than 8192 areas:" _
& vbNewLine & "It is not possible to copy the visible data." _
& vbNewLine & "Tip:Sort your data before you use this macro.", _
vbOKOnly, "Copy to worksheet"
Else
'Copy the visible data and use PasteSpecial to paste to the Desth
With My_Range.Parent.AutoFilter.Range
On Error Resume Next
'Set rng to the visible cells in My_Range without the header row
Set rng = .Offset(1, 0).Resize(.Rows.Count - 1, .Columns.Count) _
.SpecialCells(xlCellTypeVisible)
On Error GoTo 0
If Not rng Is Nothing Then
'copy and paste the cells into Destsh below the existing data
rng.Copy
With DestSh.Range("A" & LastRow(DestSh) + 1)
.PasteSpecial Paste:=8
.PasteSpecial xlPasteValues
.PasteSpecial xlPasteFormats
Application.CutCopyMode = False
End With
End If
End With
End If
'close autofilter
My_Range.Parent.AutoFilterMode = False
'Restore screenupdating, calculation, enableevents...
ActiveWindow.View = ViewMode
Application.Goto DestSh.Range("a2")
With Application
.ScreenUpdating = True
.EnableEvents = True
.Calculation = CalcMode
End With
End Sub
Function LastRow(sh As Worksheet)
On Error Resume Next
LastRow = sh.Cells.Find(what:="*", _
After:=sh.Range("a2"), _
Lookat:=xlPart, _
LookIn:=xlValues, _
SearchOrder:=xlByRows, _
SearchDirection:=xlPrevious, _
MatchCase:=False).Row
On Error GoTo 0
End Function