Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1
Default Improving Workbook_SheetSelectionChange for enhanced Autofiltering


Dear Community,

I have coded an enhanced Autofilter algorithm that provides improved
funtionality for Autofilter users. Hopefully, I have not replicated
existing work in Excel.

I seem to have a problem with the event handler. Essentially, the row
above the Autofilter header now becomes a field to define criteria.
Essentially, the problem lies with the event
Workbook_SheetSelectionChange not activating upon a change to the cell.
This means that you need to revisit the cell for the macro to perform
its work.

All the code has been included. This resides in the ThisWorkbook
object. Improvements and fixes would be very much apprciated.

Alberto


Code:
--------------------

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)

If ActiveSheet.AutoFilterMode Then

Dim af As AutoFilter
Set af = ActiveSheet.AutoFilter

Dim afCols As Integer
afCols = af.Range.Columns.Count

Dim afStart As Range
Set afStart = af.Range(1, 1)

If Target.Count = 1 Then
If InRange(Target, Range(afStart.Offset(-1, 0), afStart.Offset(-1, afCols - 1))) Then
If Target = "" Then
Selection.AutoFilter Field:=(Target.Column - afStart.Column + 1)
Else
searchPattern = Target
If Left(Target, 1) < "<" And Left(Target, 1) < "" And Left(Target, 1) < "=" Then
searchPattern = searchPattern & "*"
End If
Selection.AutoFilter Field:=(Target.Column - afStart.Column + 1), Criteria1:=searchPattern
End If 'NullTarget
End If 'InRange
End If 'Just One cell selected
End If 'AutoFilterMode
End Sub


Private Function InRange(Range1 As Range, Range2 As Range) As Boolean
' returns True if Range1 is within Range2
Dim InterSectRange As Range
Set InterSectRange = Application.Intersect(Range1, Range2)
InRange = Not InterSectRange Is Nothing
Set InterSectRange = Nothing
End Function

--------------------


--
aafraga
------------------------------------------------------------------------
aafraga's Profile: http://www.excelforum.com/member.php...o&userid=31314
View this thread: http://www.excelforum.com/showthread...hreadid=531447

  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 11,272
Default Improving Workbook_SheetSelectionChange for enhanced Autofiltering

Alberto,

It seems to work fine for me. I have a value in say B1 and filter B2 down,
change B1 and the filtered list changes. I assume that this is what you are
trying to do.

Although it works, you might want to change to the SheetChange event rather
than the SheetSelectionChange.

Also, you are not using formulae to calculate the criteria filed are you?

--
HTH

Bob Phillips

(remove nothere from email address if mailing direct)

"aafraga" wrote in
message ...

Dear Community,

I have coded an enhanced Autofilter algorithm that provides improved
funtionality for Autofilter users. Hopefully, I have not replicated
existing work in Excel.

I seem to have a problem with the event handler. Essentially, the row
above the Autofilter header now becomes a field to define criteria.
Essentially, the problem lies with the event
Workbook_SheetSelectionChange not activating upon a change to the cell.
This means that you need to revisit the cell for the macro to perform
its work.

All the code has been included. This resides in the ThisWorkbook
object. Improvements and fixes would be very much apprciated.

Alberto


Code:
--------------------

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal

Target As Range)

If ActiveSheet.AutoFilterMode Then

Dim af As AutoFilter
Set af = ActiveSheet.AutoFilter

Dim afCols As Integer
afCols = af.Range.Columns.Count

Dim afStart As Range
Set afStart = af.Range(1, 1)

If Target.Count = 1 Then
If InRange(Target, Range(afStart.Offset(-1, 0), afStart.Offset(-1,

afCols - 1))) Then
If Target = "" Then
Selection.AutoFilter Field:=(Target.Column - afStart.Column + 1)
Else
searchPattern = Target
If Left(Target, 1) < "<" And Left(Target, 1) < "" And Left(Target, 1)

< "=" Then
searchPattern = searchPattern & "*"
End If
Selection.AutoFilter Field:=(Target.Column - afStart.Column + 1),

Criteria1:=searchPattern
End If 'NullTarget
End If 'InRange
End If 'Just One cell selected
End If 'AutoFilterMode
End Sub


Private Function InRange(Range1 As Range, Range2 As Range) As Boolean
' returns True if Range1 is within Range2
Dim InterSectRange As Range
Set InterSectRange = Application.Intersect(Range1, Range2)
InRange = Not InterSectRange Is Nothing
Set InterSectRange = Nothing
End Function

--------------------


--
aafraga
------------------------------------------------------------------------
aafraga's Profile:

http://www.excelforum.com/member.php...o&userid=31314
View this thread: http://www.excelforum.com/showthread...hreadid=531447



  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1
Default Improving Workbook_SheetSelectionChange for enhanced Autofiltering


Hi Bob
Many thanks for your suggestion of changin
Workbook_SheetSelectionChange to Workbook_SheetChange. It does improv
the usability however there still are some problematic issues

If you have a large data set in a work sheet (say range a3:g100), wit
the column headers defined in row 3 and also defined as the Autofilte
row. If you then define various criteria for various columns in row
(please note that you can define logical formula. lets imagine column
contains a numeric value representing age, you can type <10 in cell f
for filtering age less than 10)

The problem I have is that if you want to delete all the criteria i
row 2, lets say by highlighting the row, then hitting delete key t
remove all entries along the row, the data stays in filtered mode
rather than showing the unfiltered data

Any suggestions on how to modify the code so as to fix this problem
Many thanks for the help
Albert

--
aafrag
-----------------------------------------------------------------------
aafraga's Profile: http://www.excelforum.com/member.php...fo&userid=3131
View this thread: http://www.excelforum.com/showthread.php?threadid=53144

  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 11,272
Default Improving Workbook_SheetSelectionChange for enhanced Autofiltering

Hi Alberto,

I get the problem now.

Try this (watch wrap-around)

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim searchPattern
Dim cell As Range

If ActiveSheet.AutoFilterMode Then

Dim af As AutoFilter
Set af = ActiveSheet.AutoFilter

Dim afCols As Integer
afCols = af.Range.Columns.Count

Dim afStart As Range
Set afStart = af.Range(1, 1)

For Each cell In Target
If InRange(cell, Range(afStart.Offset(-1, 0), afStart.Offset(-1,
afCols - 1))) Then
If cell = "" Then
Selection.AutoFilter Field:=(cell.Column -
afStart.Column + 1)
Else
searchPattern = cell
If Left(cell, 1) < "<" And Left(cell, 1) < "" And _
Left(cell, 1) < "=" Then
searchPattern = searchPattern & "*"
End If
Selection.AutoFilter Field:=(cell.Column -
afStart.Column + 1), _
Criteria1:=searchPattern
End If 'NullTarget
End If 'InRange
Next cell
End If 'AutoFilterMode
End Sub

--
HTH

Bob Phillips

(remove nothere from email address if mailing direct)

"aafraga" wrote in
message ...

Hi Bob,
Many thanks for your suggestion of changing
Workbook_SheetSelectionChange to Workbook_SheetChange. It does improve
the usability however there still are some problematic issues.

If you have a large data set in a work sheet (say range a3:g100), with
the column headers defined in row 3 and also defined as the Autofilter
row. If you then define various criteria for various columns in row 2
(please note that you can define logical formula. lets imagine column f
contains a numeric value representing age, you can type <10 in cell f2
for filtering age less than 10).

The problem I have is that if you want to delete all the criteria in
row 2, lets say by highlighting the row, then hitting delete key to
remove all entries along the row, the data stays in filtered mode,
rather than showing the unfiltered data.

Any suggestions on how to modify the code so as to fix this problem ?
Many thanks for the help.
Alberto


--
aafraga
------------------------------------------------------------------------
aafraga's Profile:

http://www.excelforum.com/member.php...o&userid=31314
View this thread: http://www.excelforum.com/showthread...hreadid=531447



  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 1
Default Improving Workbook_SheetSelectionChange for enhanced Autofiltering


Hi Bob,

Magic. Thanks for the help. Your modifications have helped me attain
the exact implementation I required.

For the benefit of others, I have pasted the complete final code (with
remarks)

Code:
--------------------

'Programmer: Alberto Andrade-Fraga
'Proram Coded: 10 April 2005
'Program Version: 1.1
'Please send modificiation that improves the functionality to
'email:
'
'Purpose:
' Enhance the AutoFilter mode by providing simple criteria based filtering
'
'Implementation:
' Program autodetects the location and the size of the Autofilter header and uses the first row
' above the Autofilter header to create the criteria and filter the data.
' The * wildcard can be used to locate patterns in a string. Eg. *Andrade would search for
' a string containing Andrade. Logical constucts can be used to test for greater and equality
'
'Modifications:
' 1.1 Implementation of ActiveSheet to make code generic to workbook.
' 1.1 Limit the scope of the macro to the cells directly above the Autofilter header
' 1.1 Change event handlet to SheetChange to make more robust
' 1.1 For each cell in Range implemented to handle criteria deletion and Autofilter reset.
'
'Carried out for Davide at ABN Amro
'Concept by Alberto with thanks to Bob Phillips of ExcelTip Forum.


Private Function InRange(Range1 As Range, Range2 As Range) As Boolean
' returns True if Range1 is within Range2
Dim InterSectRange As Range
Set InterSectRange = Application.Intersect(Range1, Range2)
InRange = Not InterSectRange Is Nothing
Set InterSectRange = Nothing
End Function


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

Dim searchPattern
Dim cell As Range

If ActiveSheet.AutoFilterMode Then

Dim af As AutoFilter
Set af = ActiveSheet.AutoFilter

Dim afCols As Integer
afCols = af.Range.Columns.Count

Dim afStart As Range
Set afStart = af.Range(1, 1)

For Each cell In Target
If InRange(cell, Range(afStart.Offset(-1, 0), afStart.Offset(-1, afCols - 1))) Then
If cell = "" Then
Selection.AutoFilter Field:=(cell.Column - afStart.Column + 1)
Else
searchPattern = cell
If Left(cell, 1) < "<" And Left(cell, 1) < "" And Left(cell, 1) < "=" Then
searchPattern = searchPattern & "*"
End If 'Logical Formula Criteria
Selection.AutoFilter Field:=(cell.Column - afStart.Column + 1), Criteria1:=searchPattern
End If 'Is Empty Cell
End If 'In Range
Next cell

End If 'AutoFilterMode
End Sub

--------------------


--
aafraga
------------------------------------------------------------------------
aafraga's Profile:
http://www.excelforum.com/member.php...o&userid=31314
View this thread: http://www.excelforum.com/showthread...hreadid=531447



  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 11,272
Default Improving Workbook_SheetSelectionChange for enhanced Autofiltering

Not to carp or anything Alberto, but I am not in the ExcelTip forum, I am in
the Microsoft public newsgroups. Questions posted at ExcelTip get forwarded
to the public NGs. I never persoanlly use ExcelTip.

--
HTH

Bob Phillips

(remove nothere from email address if mailing direct)

"aafraga" wrote in
message ...

Hi Bob,

Magic. Thanks for the help. Your modifications have helped me attain
the exact implementation I required.

For the benefit of others, I have pasted the complete final code (with
remarks)

Code:
--------------------

'Programmer: Alberto Andrade-Fraga
'Proram Coded: 10 April 2005
'Program Version: 1.1
'Please send modificiation that improves the functionality to
'email:
'
'Purpose:
' Enhance the AutoFilter mode by providing simple criteria based

filtering
'
'Implementation:
' Program autodetects the location and the size of the Autofilter

header and uses the first row
' above the Autofilter header to create the criteria and filter the

data.
' The * wildcard can be used to locate patterns in a string. Eg.

*Andrade would search for
' a string containing Andrade. Logical constucts can be used to test

for greater and equality
'
'Modifications:
' 1.1 Implementation of ActiveSheet to make code generic to workbook.
' 1.1 Limit the scope of the macro to the cells directly above the

Autofilter header
' 1.1 Change event handlet to SheetChange to make more robust
' 1.1 For each cell in Range implemented to handle criteria deletion

and Autofilter reset.
'
'Carried out for Davide at ABN Amro
'Concept by Alberto with thanks to Bob Phillips of ExcelTip Forum.


Private Function InRange(Range1 As Range, Range2 As Range) As Boolean
' returns True if Range1 is within Range2
Dim InterSectRange As Range
Set InterSectRange = Application.Intersect(Range1, Range2)
InRange = Not InterSectRange Is Nothing
Set InterSectRange = Nothing
End Function


Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As

Range)

Dim searchPattern
Dim cell As Range

If ActiveSheet.AutoFilterMode Then

Dim af As AutoFilter
Set af = ActiveSheet.AutoFilter

Dim afCols As Integer
afCols = af.Range.Columns.Count

Dim afStart As Range
Set afStart = af.Range(1, 1)

For Each cell In Target
If InRange(cell, Range(afStart.Offset(-1, 0), afStart.Offset(-1,

afCols - 1))) Then
If cell = "" Then
Selection.AutoFilter Field:=(cell.Column - afStart.Column + 1)
Else
searchPattern = cell
If Left(cell, 1) < "<" And Left(cell, 1) < "" And Left(cell, 1) <

"=" Then
searchPattern = searchPattern & "*"
End If 'Logical Formula Criteria
Selection.AutoFilter Field:=(cell.Column - afStart.Column + 1),

Criteria1:=searchPattern
End If 'Is Empty Cell
End If 'In Range
Next cell

End If 'AutoFilterMode
End Sub

--------------------


--
aafraga
------------------------------------------------------------------------
aafraga's Profile:

http://www.excelforum.com/member.php...o&userid=31314
View this thread: http://www.excelforum.com/showthread...hreadid=531447



Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
SUMPRODUCT - enhanced formula carol Excel Discussion (Misc queries) 1 July 21st 08 04:05 PM
Enhanced lottery question Brad Excel Discussion (Misc queries) 5 April 18th 08 07:21 PM
Pasting from xl into word as an enhanced metafile LB[_2_] Excel Discussion (Misc queries) 0 April 23rd 07 06:12 PM
enhanced conditional formatting Stuart Excel Discussion (Misc queries) 13 November 13th 05 07:20 PM
Workbook_SheetSelectionChange R.VENKATARAMAN Excel Programming 3 January 23rd 05 11:44 AM


All times are GMT +1. The time now is 12:52 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright ©2004-2025 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"