6
hy A Search Box? Ever since search engines came into fruition (I can still remember those Yahoo! commercials ), search boxes have become an experience that everyone has become accustomed to. Can you think of the last time you have been on your computer and haven't interacted with some sort of search box or even anomnibox? It's unfortunate that Excel doesn't have a form control search box (maybe in the future?) as I could see that type of tool opening the doors to a ton of creative and time saving functionalities. But luckily you can create a search box on your own. In this post I will walk you through how to create a gorgeous-looking search box that can filter your data to only show your search results. First I will show you how to set it up and then you will learn how to tweak the VBA code to fit your setup. Creating Your Search Box User Interface Your search UI (user-interface) can look however you want as long as there is a place for your user(s) to enter in some text and a search button for them to click. The above image shows how I will typically create my UI. I use a nice clean textbox to hold the search text and flat-styled, rounded rectangle shape for the button. Get Fancy With Option Buttons Instead of only allowing your users to filter on a single column, why not let them search through a few? By integrating Option Buttons with your search box you can have your users specify which column they want to search in. To insert the Option Buttons you will need to

hy A Search Box

Embed Size (px)

DESCRIPTION

search

Citation preview

hy A Search Box?Ever since search engines came into fruition (I can still remember thoseYahoo! commercials), search boxes have become an experience that everyone has become accustomed to. Can you think of the last time you have been on your computer and haven't interacted with some sort of search box or even anomnibox? It's unfortunate that Excel doesn't have a form control search box (maybe in the future?) as I could see that type of tool opening the doors to a ton of creative and time saving functionalities. But luckily you can create a search box on your own. In this post I willwalk you through how to create a gorgeous-looking search box thatcan filter your data to only show your search results. First I will show you how to set it up and then you will learn how to tweak the VBA code to fit your setup.Creating Your Search Box User Interface

Your search UI (user-interface) can look however you want as long as there is a place for your user(s) to enter in some text and a search button for them to click. The above image shows how I will typically create my UI. I use a nice clean textbox to hold the search text and flat-styled, rounded rectangle shape for the button.Get Fancy With Option Buttons

Instead of only allowing your users to filter on a single column, why not let them search through a few? By integrating Option Buttons with your search box you can have your users specify which column they want to search in. To insert the Option Buttons you will need to1. Navigate to yourDeveloper Tabin theRibbon2. Click theInsertdrop down button in theControlsgroup3. Select theOption Button Form Control(first row, last icon)4. Your mouse should now look like cross hairs and you will just want to click somewhere on your spreadsheet to draw the Option ButtonAfter you draw a couple of Option Buttons, you can drag them into place so that they are relatively close to your search box. You can use the alignment tools to make everything look professional with even spacing.One PitfallThe one pitfall that I could not seem to get around is that fact that after entering in your search text, you need to click outside of the textbox before you can click on the Search button. There are two workarounds that I could think of:1. Instead of using a textbox, use a cell to hold the search text2. Assign a keyboard shortcut to execute the macro, alleviating the need to click the Search buttonI typically go the shortcut route as I like having the ability to place my search box wherever I want on my spreadsheet.Now For The VBA!Naming Your ObjectsThe key to getting this code to work well is to setup your objects (aka form controls) properly. First you will need to determine the name of the text box that is holding your search term. To do this, you need to select the text box and then look at theName Box(which is located to the left of theFormula Bar). Typically you will see a default name of "Text Box 1", however you can change this name to something more meaningful like "UserSearch". Make sure you hit theEnterkey immediately after typing in your new name to apply the name change! If you click outside of the Name Box before hitting enter, your text box will revert back to it's previous name.

For yourOption Buttonsyou will not need to change their object names (unless you really want to). You will, however, need to ensure that their text is verbatim with the data headings you will be filtering on. Notice how all my example Option Button's have the exact same text as the headings in my data. This isEXTREMELYimportant as the VBA code below will be filtering based on the text associated with the selected Option Button.Searching For Text OnlyThis macro will allow you to filter on any column with a text value within it. The macro uses an open ended search (designated by the asterisk symbol before and after the search term). This means that you could search "whi" and the search would show any cell containing those 3 characters. If you want your search box to only filter on exactly what the user types, just remove the asterisks from the VBA code.To set up this code with your data you will need to designate your data range for the variableDataRangeand you will also need to modify your text box name inside theShapesreference. If your data does not start in Column A you may need to add or subtract from themyFieldvariable to ensure you are filtering on the correct column number associated with your data set.

SubSearchBox()'PURPOSE: Filter Data on User-Determined Column & Text'SOURCE: www.TheSpreadsheetGuru.com

DimmyButtonAsOptionButtonDimMyValAsLongDimButtonNameAsStringDimshtAsWorksheetDimmyFieldAsLongDimDataRangeAsRange'Unfilter Data (if necessary)OnErrorResumeNextActiveSheet.ShowAllDataOnErrorGoTo0'Filtered Data RangeSetDataRange = Range("A4:E31")'Loop Through Option ButtonsForEachmyButtonInActiveSheet.OptionButtonsIfmyButton.Value = 1ThenButtonName = myButton.TextExitForEndIfNextmyButton'Determine Filter FieldmyField = WorksheetFunction.Match(ButtonName, DataRange.Rows(1), 0)'Filter DataDataRange.AutoFilter _Field:=myField, _Criteria1:="=*" & ActiveSheet.Shapes("UserSearch").TextFrame.Characters.Text & "*", _Operator:=xlAnd'Clear Search FieldActiveSheet.Shapes("UserSearch").TextFrame.Characters.Text = ""

EndSubSearching For Text & Numerical ValuesThis VBA code is the exact same setup as the previous code but it has a few extra lines added to handle both numerical and text inputs from your user.

SubSearchBox()'PURPOSE: Filter Data on User-Determined Column & Text/Numerical value'SOURCE: www.TheSpreadsheetGuru.com

DimmyButtonAsOptionButtonDimSearchStringAsStringDimButtonNameAsStringDimshtAsWorksheetDimmyFieldAsLongDimDataRangeAsRange

'Unfilter Data (if necessary)OnErrorResumeNextActiveSheet.ShowAllDataOnErrorGoTo0'Filtered Data RangeSetDataRange = Range("A4:E31")

'Retrieve User's Search InputmySearch = ActiveSheet.Shapes("UserSearch").TextFrame.Characters.Text'Determine if user is searching for number or textIfIsNumeric(mySearch) =TrueThenSearchString = "=" & mySearchElseSearchString = "=*" & mySearch & "*"EndIf'Loop Through Option ButtonsForEachmyButtonInActiveSheet.OptionButtonsIfmyButton.Value = 1ThenButtonName = myButton.TextExitForEndIfNextmyButton'Determine Filter FieldmyField = WorksheetFunction.Match(ButtonName, DataRange.Rows(1), 0)'Filter DataDataRange.AutoFilter _Field:=myField, _Criteria1:=SearchString, _Operator:=xlAnd'Clear Search FieldActiveSheet.Shapes("UserSearch").TextFrame.Characters.Text = ""

EndSubGet The Example FileIf you would like to receive the example Excel file I created (shown above in the animated GIFs) you can become a subscriber to my free email newsletters. All my subscribers receive instant access to all example files posted to TheSpreadsheetGuru.com and they also get emails filled with my exclusive tips & tricks that are not published on this website. Join the thousands of subscribers and start learning how you can become a guru for your company!