Reputation: 41
I have created a macro in an Excel workbook and pulled this code from VBA. The line Rows("45:45").Select does not work well as the filtered rows will vary each time I run the report. I am total novice when it comes to VBA so any help would be greatly appreciated!
Sheets("Sheet1").Select
ActiveSheet.Range("$A:$AQ").AutoFilter Field:=1, Criteria1:=Array("Chloe", "Bob", "GBUK", "Shape", "Lifestyle", "MYP", _
"MYP Aus", "MYP In", "MYP Retail", "MYV", "MYV Retail"), Operator:=xlFilterValues
Rows("45:45").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete
ActiveSheet.Range("$A:$AQ").AutoFilter Field:=1
Thanks Laura
EDITED:
I have edited the code as follows;
Sheets("Sheet1").Select
ActiveSheet.Range("$A:$AQ").AutoFilter Field:=1, Criteria1:=Array("Chloe", "Bob", "GBUK", "Shape", "Lifestyle", "MYP", _
"MYP Aus", "MYP In", "MYP Retail", "MYV", "MYV Retail"), Operator:=xlFilterValues
Rows(rowVariable).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Delete
ActiveSheet.Range("$A:$AQ").AutoFilter Field:=1
I am receiving a runtime error when I run the macro.
I have also removed .Select
but I receive a Compile Error: invalid use of property.
Upvotes: 2
Views: 2145
Reputation: 57683
.Select
UsedRange
(without the header)And you end up with something like
Option Explicit
Public Sub DeleteFilteredData()
Dim ws As Worksheet ' define the sheet you want to work with
Set ws = ThisWorkbook.Worksheets("Sheet1")
' Filter
ws.Range("$A:$AQ").AutoFilter Field:=1, Criteria1:=Array("Chloe", "Bob", "GBUK", "Shape", "Lifestyle", "MYP", _
"MYP Aus", "MYP In", "MYP Retail", "MYV", "MYV Retail"), Operator:=xlFilterValues
' get filtered data without heading
Dim FilteredRows As Range
On Error Resume Next ' avoid an error message if no rows were filtered
Set FilteredRows = ws.UsedRange.Resize(RowSize:=ws.UsedRange.Rows.Count - 1).Offset(RowOffset:=1).SpecialCells(xlCellTypeVisible)
' if you don't have a header row use
'Set FilteredRows = ws.UsedRange.SpecialCells(xlCellTypeVisible)
On Error GoTo 0 ' re-activate error reporting !!!
If Not FilteredRows Is Nothing Then
FilteredRows.EntireRow.Delete
Else
MsgBox "Nothing to delete", vbInformation
End If
ws.Range("$A:$AQ").AutoFilter Field:=1
End Sub
Upvotes: 1
Reputation: 509
Rows("45:45").Select
can be changed to
Rows(rowVariable & ":" & rowVariable)
Where row variable is a variable which can change at run time.
Upvotes: 0