?
Solved

Filter criteria for Excel using VBA in Access

Posted on 2009-04-01
12
Medium Priority
?
515 Views
Last Modified: 2013-11-27
Hi Experts,

I'm having a application defined error when I run the following VBA code in Access that tried to do a filter in an Excel file:


Dim myDate as Date
Dim getRow As Integer
myDate = Date     
 
With wb.Worksheets("Sheet1")
        .AutoFilterMode = False 'To turn off the filter in case there is any
        With .Rows(8)
         .AutoFilterMode = True 'To turn on the filter
         .AutoFilter Field:=4, Criteria1:="New"
         .AutoFilter Field:=9, Criterial:=myDate 'This is the line that error happens
         .AutoFilter Field:=29, Criteria1:="=s-*"
        End With
        getRow = .Range("B2").End(xlDown).Row
        .Rows("2:" & getRow).Delete shift:=xlUp
End With

Open in new window

0
Comment
Question by:LizzJ
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 6
  • 6
12 Comments
 
LVL 85

Expert Comment

by:Rory Archibald
ID: 24038059
You need to pass myDate as a String, formatted the same way the cells are.
HTH
Rory
0
 

Author Comment

by:LizzJ
ID: 24038116
the cells contain dates.

can you provide the right way of doing such conversion? tried a few, but doens't seem to work
0
 

Author Comment

by:LizzJ
ID: 24038119
btw, the dates are in format: dd/mm/yyyy
0
Free Backup Tool for VMware and Hyper-V

Restore full virtual machine or individual guest files from 19 common file systems directly from the backup file. Schedule VM backups with PowerShell scripts. Set desired time, lean back and let the script to notify you via email upon completion.  

 
LVL 85

Expert Comment

by:Rory Archibald
ID: 24038246
I would recommend not using just Rows(8) to set the filter, but use the actual range you want filtered - it's much more reliable. Then your original syntax should work if the dates are real dates.
0
 

Author Comment

by:LizzJ
ID: 24046972
Can you provide the codes for that in such a case? Not much idea on how to specify the range...
0
 
LVL 85

Expert Comment

by:Rory Archibald
ID: 24047120
Sure - is there a column that should always have data for each row?
0
 

Author Comment

by:LizzJ
ID: 24047161
the column will be D
0
 
LVL 85

Expert Comment

by:Rory Archibald
ID: 24047211
Ok - I'll put something together when I'm back in the office, hopefully later this morning?
0
 

Author Comment

by:LizzJ
ID: 24047360
okie. Thanks. Please also let me know how to fix the date error
0
 
LVL 85

Expert Comment

by:Rory Archibald
ID: 24047762
Quick question - your code starts the filter from row 8, which I assume is where the headers are, but then deletes from row 2 downwards - is that correct?
0
 
LVL 85

Accepted Solution

by:
Rory Archibald earned 2000 total points
ID: 24047854
I've just looked at your code more closely - on the date line that errors, you have written:
 CRITERIAL:=
 rather than:
 CRITERIA1:=
 
if you change the L to a 1 that should fix that error. I just ran a quick test using this code, and it worked fine:
 
 

Sub FilterXL()
   Dim myDate As Date
   Dim getRow As Long
   Dim wb As Excel.Workbook, appXL As Excel.Application
   myDate = Date
   Set appXL = CreateObject("Excel.Application")
   appXL.Visible = True
   Set wb = appXL.workbooks.Open("C:\test\filter_test.xls")
   With wb.Worksheets("Sheet1")
      ' get last used row in column D
      getRow = .cells(.Rows.Count, "D").End(xlUp).Row
      .AutoFilterMode = False 'To turn off the filter in case there is any
      With .Range("A8", .cells(getRow, 29))
         ' filter col D
         .AutoFilter Field:=4, Criteria1:="New"
         ' filter col I
         .AutoFilter Field:=9, Criteria1:=myDate 'This is the line that error happens
         ' filter col AC
         .AutoFilter Field:=29, Criteria1:="=s-*"
      End With
      .Range("B2", .cells(getRow, "B")).SpecialCells(xlCellTypeVisible).EntireRow.Delete shift:=xlUp
   End With
 
End Sub

Open in new window

0
 

Author Comment

by:LizzJ
ID: 24047933
Thanks a lot! it works! Couldn't imagine the silly mistake bothered me whole day...

Anyway, I've got another related question regarding looping through the filtered records. But I'll post another question. Maybe you can also help me look through that?
0

Featured Post

Veeam Task Manager for Hyper-V

Task Manager for Hyper-V provides critical information that allows you to monitor Hyper-V performance by displaying real-time views of CPU and memory at the individual VM-level, so you can quickly identify which VMs are using host resources.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

AutoNumbers should increment automatically, without duplicates.  But sometimes something goes wrong, and the next AutoNumber value is a duplicate.  This article shows how to recover from this problem.
Code that checks the QuickBooks schema table for non-updateable fields and then disables those controls on a form so users don't try to update them.
This Micro Tutorial demonstrates in Microsoft Excel how to consolidate your marketing data by creating an interactive charts using form controls. This creates cool drop-downs for viewers of your chart to choose from.
Although Jacob Bernoulli (1654-1705) has been credited as the creator of "Binomial Distribution Table", Gottfried Leibniz (1646-1716) did his dissertation on the subject in 1666; Leibniz you may recall is the co-inventor of "Calculus" and beat Isaac…

752 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question