Why is the Autofilter saying "Autofilter method of Range Class Failed"

Darren Smith

Well-known Member
Joined
Nov 23, 2020
Messages
631
Office Version
  1. 2019
Platform
  1. Windows
Hi All,
This code will not work can`t work out why?
Sorry to say but this is very urgent...

This part fails it says Error 1004 "Autofilter method of Range Class Failed"

VBA Code:
With rngFull
                   .AutoFilter Field:=lngDateCol, _
                    Criteria1:=">=" & StartDate, _
                    Criteria2:="<=" & EndDate

VBA Code:
Public Sub PromptUserForInputDates()
    
    Dim strStart As String, strEnd As String, strPromptMessage As String

    strStart = InputBox("Please enter the Current JobNos. start date")
    

    If Not IsDate(strStart) Then
        strPromptMessage = "Oops! It looks like your entry is not a valid " & _
                           "date. Please retry with a valid date..."
        MsgBox strPromptMessage
        Exit Sub
    End If
    

    strEnd = InputBox("Please enter the  Current JobNos. end date")
    

    If Not IsDate(strStart) Then
        strPromptMessage = "Oops! It looks like your entry is not a valid " & _
                           "date. Please retry with a valid date..."
        MsgBox strPromptMessage
        Exit Sub
    End If

    Call CreateSubsetWorksheet(strStart, strEnd)
    
End Sub

Public Sub CreateSubsetWorksheet(StartDate As String, EndDate As String)

    Dim wksData As Worksheet, wksTarget As Worksheet
    Dim lngLastRow As Long, lngLastCol As Long, lngDateCol As Long
    Dim rngFull As Range, rngResult As Range, rngTarget As Range
    

    Set wksData = ThisWorkbook.Worksheets("TGS JOB RECORD")
    lngDateCol = 53
    
    lngLastRow = LastOccupiedRowNum(wksData)
    lngLastCol = LastOccupiedColNum(wksData)
    With wksData
        Set rngFull = wksData.Range(.Cells(1, 1), .Cells(lngLastRow, lngLastCol))
    End With

    With rngFull
                   .AutoFilter Field:=lngDateCol, _
                    Criteria1:=">=" & StartDate, _
                    Criteria2:="<=" & EndDate
                    
                    

        If wksData.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count = 1 Then
        
            MsgBox "Oops! Those dates filter out all data!"
            
   
            wksData.AutoFilterMode = False
            If wksData.FilterMode = True Then
                wksData.ShowAllData
            End If
            Exit Sub
            
        Else
        

            Set rngResult = .SpecialCells(xlCellTypeVisible)
            
              Set wksTarget = ThisWorkbook.Worksheets.Add("Current Jobs")
            Set rngTarget = wksTarget.Cells(1, 1)
            rngResult.Copy Destination:=rngTarget

        End If
    End With
    
    
    wksData.AutoFilterMode = False
    If wksData.FilterMode = True Then
        wksData.ShowAllData
    End If
    
MsgBox "Data transferred!"

End Sub

Public Function LastOccupiedRowNum(Sheet As Worksheet) As Long
    Dim lng As Long

    If Application.WorksheetFunction.CountA(Sheet.Cells) <> 0 Then
        With Sheet
            lng = .Cells.Find(What:="*", _
                              After:=.Range("A1"), _
                              Lookat:=xlPart, _
                              LookIn:=xlFormulas, _
                              SearchOrder:=xlByRows, _
                              SearchDirection:=xlPrevious, _
                              MatchCase:=False).Row
        End With
    Else
        lng = 1
    End If
    LastOccupiedRowNum = lng
End Function

Public Function LastOccupiedColNum(Sheet As Worksheet) As Long
    Dim lng As Long
    If Application.WorksheetFunction.CountA(Sheet.Cells) <> 0 Then
        With Sheet
            lng = .Cells.Find(What:="*", _
                              After:=.Range("A1"), _
                              Lookat:=xlPart, _
                              LookIn:=xlFormulas, _
                              SearchOrder:=xlByColumns, _
                              SearchDirection:=xlPrevious, _
                              MatchCase:=False).Column
        End With
    Else
        lng = 1
    End If
    LastOccupiedColNum = lng
End Function
 
Could I send the workbook to you so you could see the whole picture?
Might be able to see more easily where I have gone wrong.
 
Upvote 0

Excel Facts

Best way to learn Power Query?
Read M is for (Data) Monkey book by Ken Puls and Miguel Escobar. It is the complete guide to Power Query.
I'm never good at reading scripts that do not work when I do not know what your trying to do.
I see nothing here in words that mention what your trying to do.
I would need specific details.
 
Upvote 0
We build vehicle bodies on trucks need to see how many are going through production at a chosen date range.
First, need to filter "TGS JOB RECORD" sheet column 53 then copy all that data to a spreadsheet also name the spreadsheet.
If that make`s sense?
 
Upvote 0
We build vehicle bodies on trucks need to see how many are going through production at a chosen date range.
First, need to filter "TGS JOB RECORD" sheet column 53 then copy all that data to a spreadsheet also name the spreadsheet.
If that make`s sense?
Need exact specific details.
Copy all data to what?
Spreadsheet is a term used in the 1980's to refer to what we now call a Workbook
So is this data being copied to another Workbook or Worksheet. And what is the name of this worksheet or workbook.

And you said: date range.
do you mean like the range Jan 1, 2020 to June 1 2021
so if value in column 53 meets that range copy row some place

Again specific details are always important
 
Upvote 0
Need exact specific details.
Copy all data to what? A Worksheet next to the "The Job Record" sheet in same Workbook
Spreadsheet is a term used in the 1980's to refer to what we now call a Workbook Ok sorry
So is this data being copied to another Workbook or Worksheet. And what is the name of this worksheet or workbook.

And you said: date range.
do you mean like the range Jan 1, 2020 to June 1 2021
so if value in column 53 meets that range copy row some place Yes that`

Again specific details are always important
 
Upvote 0
Don`t look at above

Need exact specific details.
Copy all data to what? A Worksheet next to the "The Job Record" sheet in same Workbook
Spreadsheet is a term used in the 1980's to refer to what we now call a Workbook Ok sorry
So is this data being copied to another Workbook or Worksheet. And what is the name of this worksheet or workbook. The workbook is called "Job Planner" then the worksheet is called "Current Jobs". So create "Current jobs" sheet and then add detail to "Current Jobs" sheet from filter in "Job Card Record" Sheet in the same workbook

And you said: date range.
do you mean like the range Jan 1, 2020 to June 1 2021 Yes that`s right
so if value in column 53 meets that range copy row some place Yes that`s right

Again specific details are always important
 
Upvote 0
Here you go

 
Upvote 0
Sorry wrong file
Right one below

 
Upvote 0

Forum statistics

Threads
1,223,904
Messages
6,175,295
Members
452,632
Latest member
jladair

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top