This code acts as a toggle. It switches AutoFilter on if it is off, and off if it is on. If you want to ensure
that the worksheet AutoFilter is turned off, you can use code like the following:
If ActiveSheet.AutoFilterMode Then 
ActiveSheet.AutoFilter.Range.AutoFilter
End If
You can determine whether a ListObject object AutoFilter is turned on or off by testing its
ShowAutoFilterproperty. This is a read/write property that can also be used to explicitly turn the
table’s AutoFilter on or off. You can ensure that the AutoFilter is switched off with the following code:
ActiveSheet.ListObjects(“Table1”).ShowAutoFilter = False
Filter Object
There is a Filters collection associated with the AutoFilter object that holds a Filter object for each
field in the AutoFilter. The On property of the Filter object indicates whether it is active. If it is active,
you can discover the values of its properties. The following code returns the value “=Pradesh” after
you have set the filter as shown in Figure 6-5, after converting the data to a table:
With ActiveSheet.ListObjects(1)
If .ShowAutoFilter Then
With .AutoFilter.Filters(2)
If .On Then
MsgBox .Criteria1
End If
End With
End If
End With
The Filter object can only return the properties of a filter. You can’t assign values to the properties.
That can only be done using the AutoFilter method of the Range object.
Date Custom Filter
If you want something a bit more complex, such as a range of dates, you need to do a bit more work. The
following screen shows how you can manually filter the data in a table to show a particular month. Click
the drop-down button beside Date and choose Date Filters. Then select either Custom Filter or Between.
You can then fill in the dialog box as shown in Figure 6-6.
The format you use when you type in dates in the Custom AutoFilter dialog box
depends on your regional settings. You can use a dd/mm/yy format if you work with
UK settings, or a mm/dd/yy format if you work with U.S. settings. Some formats that
are more international, such yyyy-m-d, are also recognized. You can use the calendar
controls in the AutoFilter dialog box to insert your dates in your regional date format.
148
Chapter 6: Data Lists
Pdf rotate single page reader - rotate PDF page permanently in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Empower Users to Change the Rotation Angle of PDF File Page Using C#
save pdf after rotating pages; rotate pdf page and save
Pdf rotate single page reader - VB.NET PDF Page Rotate Library: rotate PDF page permanently in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
PDF Document Page Rotation in Visual Basic .NET Class Application
pdf rotate single page reader; rotate all pages in pdf file
Figure 6-6
Adding Combo Boxes
You can make filtering even easier for a user by placing controls in the worksheet to run AutoFilter. This
also gives you the opportunity to do far more with the data than filter it. You could copy the filtered data
to another worksheet and generate a report, you could chart the data, or you could delete it. Figure 6-7
shows two ActiveX combo box controls that allow the user to select the month and year required.
Figure 6-7
149
Chapter 6: Data Lists
VB.NET PDF Page Delete Library: remove PDF pages in vb.net, ASP.
Able to remove a single page from adobe PDF document in VB.NET. using RasterEdge. XDoc.PDF; How to VB.NET: Delete a Single PDF Page from PDF File.
rotate individual pdf pages reader; change orientation of pdf page
C# PDF Page Delete Library: remove PDF pages in C#.net, ASP.NET
application. Able to remove a single page from PDF document. Ability Demo Code: How to Delete a Single PDF Page from PDF File in C#.NET. How to
pdf rotate single page and save; rotate pages in pdf expert
The combo boxes have the default names of ComboBox1 and ComboBox2. To place list values into the
combo boxes, you can enter the list values into a worksheet column and define the ListFillRange
property of the ComboBox object as something like “=Sheet2!A1:A12”. Alternatively, you can use the
following Workbook_Open event procedure in the ThisWorkbook module of the workbook to populate
the combo boxes when the workbook is opened:
Private Sub Workbook_Open()
Dim vMonths As Variant
Dim vYears As Variant
Dim i As Integer
‘Create date arrays
vMonths = Array(“Jan”, “Feb”, “Mar”, “Apr”, “May”, “Jun”, _
“Jul”, “Aug”, “Sep”, “Oct”, “Nov”, “Dec”)
vYears = Array(2006, 2007)
‘Populate months using AddItem method
For i = LBound(vMonths) To UBound(vMonths)
Sheet1.ComboBox1.AddItem vMonths(i)
Next i
‘Populate years using List property
Sheet1.ComboBox2.List = WorksheetFunction.Transpose(vYears)
End Sub
The AddItem method of the ComboBox object adds the Monthsarray values to the ComboBox1list. To
show an alternative technique, the worksheet Transpose function is used to convert the Years array
from a row to a column, and the values are assigned to the List property of ComboBox2.
Note that the programmatic name of Sheet1, which you can see in the Project Explorer window or the
Properties window of the VBE, has been used to define the location of the combo boxes. Even though the
name of the worksheet is Sales, the programmatic name is still Sheet1, unless you change it at the top
of the Properties window where it is identified by (Name), rather than Name, as shown in Figure 6-8.
Figure 6-8
150
Chapter 6: Data Lists
VB.NET PDF- View PDF Online with VB.NET HTML5 PDF Viewer
C#.NET PDF file & pages edit, C#.NET PDF pages extract, copy, paste, C#.NET rotate PDF pages, C# Users can view PDF document in single page or continue
rotate a pdf page; pdf rotate just one page
How to C#: Basic SDK Concept of XDoc.PDF for .NET
insert, delete, re-order, copy, paste, cut, rotate, and save or query data and save the PDF document. The PDFPage class presents a single page in a PDFDocument
how to rotate a single page in a pdf document; how to change page orientation in pdf document
In the code module behind the worksheet, the following code is entered:
Private Sub ComboBox1_Click()
If ComboBox2.Value=”” Then Exit Sub
Call FilterDates
End Sub
Private Sub ComboBox2_Click()
If ComboBox1.Value=”” Then Exit Sub
Call FilterDates
End Sub
As long as the other combo box has been assigned a value, when you click an entry in their drop-down
lists, each combo box executes the FilterDates procedure, which is described next. FilterDatescan
be in the same module and declared Private if you do not want any other modules to be able to use it,
or it can be in a standard code module if you want to use it as a general utility procedure.
So, how do you construct the FilterDates procedure? As shown in previous chapters, you can use the
macro recorder to get something to start with, and then refine the code to make it more flexible and effi-
cient. If you use the macro recorder to record the process of filtering the dates, you will get code like this:
ActiveSheet.ListObjects(“Table1”).Range.AutoFilter Field:=1, Criteria1:= _
“>=1/01/2007”, Operator:=xlAnd, Criteria2:=”<=31/01/2007”
You might notice that the dates have been translated to the format of the regional settings—in this case
that of Australia, which uses the same format as the UK. The format generated by the recorder is
d/mm/yyyy. Also note that the dates are formatted as text, rather than dates, because the criteria must
include the logical operators.
Date Format Problems
Unfortunately, the previous code does not perform as expected. When you run the recorded macro, the
dates are interpreted by VBAas U.S. dates in the format mm/dd/yyyyCriteria2 is not understood by
VBA. To make this macro perform properly, you need to convert the dates to a U.S. format. Of course,
you will not have this problem with your recorded code if you work with U.S. date formats in your
regional settings in the first place.
The following FilterDates procedure is executed from the Click event procedures of the combo
boxes, and it computes the start and end dates required for the criteria of the AutoFiltermethod.
FilterDateshas been placed in the same module as the combo box event procedures and declared as
Private,so it does not appear in the Macro dialog box:
Private Sub FilterDates()
Dim iStartMonth As Integer
Dim iStartYear As Integer
Dim dteStartDate As Date
Trying to make your VBA code compatible with dates in all language versions of
Excel is very difficult. See Chapter 25 for more details.
151
Chapter 6: Data Lists
C# PDF Convert to Tiff SDK: Convert PDF to tiff images in C#.net
Both single page and multipage tiff image files can be created from PDF. Supports tiff compression selection. Supports for changing image size.
how to save a pdf after rotating pages; pdf rotate pages separately
VB.NET PDF: Basic SDK Concept of XDoc.PDF
insert, delete, re-order, copy, paste, cut, rotate, and save or query data and save the PDF document. The PDFPage class presents a single page in a PDFDocument
pdf rotate pages and save; how to rotate a pdf page in reader
Dim dteEndDate As Date
Dim sStartCriterion As String
Dim sEndCriterion As String
‘Get Date values
iStartMonth = Me.ComboBox1.ListIndex + 1
iStartYear = Me.ComboBox2.Value
‘Calculate date values and format as US Dates
dteStartDate = DateSerial(iStartYear, iStartMonth, 1)
dteEndDate = DateSerial(iStartYear, iStartMonth + 1, 1)
sStartCriterion = “>=” & Format(dteStartDate, “mm/dd/yyyy”)
sEndCriterion = “<” & Format(dteEndDate, “mm/dd/yyyy”)
‘Apply AutoFilter
Me.ListObjects(“Table1”).Range.AutoFilter _
Field:=1, _
Criteria1:=sStartCriterion, _
Operator:=xlAnd, _
Criteria2:=sEndCriterion
End Sub
FilterDatesassigns the values selected in the combo boxes to iStartMonthand iStartYear. The Me
keyword has been used to refer to the sheet containing the code, rather than the object name Sheet1.
This makes the code portable, which means it can be used in other sheet modules without worrying
about the name of the sheet.
iStartMonthuses the ListIndexproperty of ComboBox1to obtain the month as a number. Because 
the ListIndex is zero-based, 1 is added to give the correct month number. The DateSerial function
translates the year and month numbers into a date and assigns the date to dteStartDate. The second
DateSerialfunction calculates a date that is one month ahead of dteStartDateand assigns it to
dteEndDate.
The Format function is used to turn dteStartDate and dteEndDateback into strings in the U.S. date
format of mm/dd/yyyy. The appropriate logical operators are placed in front, and the resulting strings
are assigned to sStartCriterion and sEndCriterion, respectively. FilterDates finally executes the
AutoFiltermethod on the table Table1, using the computed criteria.
Getting the Exact Date
Another tricky problem with AutoFilter occurs with dates in all language versions of Excel. The problem
arises when you want to get an exact date, rather than a date within a range of dates. In this case,
AutoFilter matches your date with the formatted appearance of the dates in the worksheet, not the
underlying date values.
Excel holds dates as numeric values equal to the number of days since Jan 1, 1900. For example, Jan 1,
2007 is held as 39,083. When you ask for dates greater than or equal to Jan 1, 2007, Excel looks for date
serial numbers greater than or equal to 39,083. However, when you ask for dates equal to Jan 1, 2007,
Excel does not look for the numeric value of the date. Excel checks for the string value “Jan 1, 2007” as 
it appears formatted in the worksheet and as it is returned by the Textproperty of the Rangeobject.
152
Chapter 6: Data Lists
VB.NET PDF File & Page Process Library SDK for vb.net, ASP.NET
With VB.NET PDF SDK, PDF document page can be rotated to 90, 180, and 270 in clockwise. Both a single page and whole file pages can be rotated and saved as
save pdf rotate pages; pdf rotate one page
VB.NET PDF File Merge Library: Merge, append PDF files in vb.net
all. This guiding page will help you merge two or more PDF documents into a single one in a Visual Basic .NET imaging application.
pdf rotate page; rotate pdf pages by degrees
The following adaptation of FilterDates will handle an exact date match in your list, because
sExactCriterionis assigned the date value as a string, in the format “mmm dd,yyyy”. It obtains the
format from the worksheet using the NumberFormat property of the first cell in the body of the table,
where the date is formatted as mmmdd,yyyy:
Sub FilterExactDate()
Dim iExactMonth As Integer
Dim iExactYear As Integer
Dim dteExactDate As Date
Dim sExactCriterion As String
Dim sDateFormat As String
Dim loMyData as ListObject
‘Get Date values
iExactMonth = Sheet1.ComboBox1.ListIndex + 1
iExactYear = Sheet1.ComboBox2.Value
‘Get Format from Table
Set loMyData = Sheet1.ListObjects(“Table1”)
sDateFormat = loMyData.DataBodyRange(1).NumberFormat
‘Calculate as a date and format as in worksheet
dteExactDate = DateSerial(iExactYear, iExactMonth, 1)
sExactCriterion = Format(dteExactDate, sDateFormat)
‘Filter Table1
loMyData.Range.AutoFilter _
Field:=1, Criteria1:=sExactCriterion
End Sub
The previous code will give all the entries for the first of the month, because 1 is specified as the third
parameter in the DateSerial function. To select any day of the month, a third combo box could be
added to cell A2 and some code added to the ComboBox1_Click event procedure to list the correct
number of days for the month specified in ComboBox1.
Copying the Visible Rows
If you want to make it easy to create a new worksheet containing a copy of the filtered data, you can
place an ActiveX command button at the top of the worksheet and enter the following Click event pro-
cedure in the worksheet module. This procedure copies the visible cells in Table1:
Private Sub CommandButton1_Click()
Dim wksNew As Worksheet
Dim sWksName As String
Dim sMonth As String
Dim sYear As String
Dim wksDummyWks As Worksheet
‘Get Date values
sMonth = Me.ComboBox1.Value
sYear = Me.ComboBox2.Value
‘Check that month has not been copied
153
Chapter 6: Data Lists
On Error Resume Next
sWksName = Format(DateValue(sYear & “-” & sMonth & “-1”), “mmm yyyy”)
Set wksDummyWks = Worksheets(sWksName)
If Err.Number = 0 Then
MsgBox “This data has already been copied”
Exit Sub
End If
On Error GoTo 0
‘Add new worksheet and copy visible cells from Table1
Set wksNew = Worksheets.Add
Me.ListObjects(1).Range.SpecialCells(xlCellTypeVisible).Copy _
Destination:=wksNew.Range(“A1”)
wksNew.Columns(“A:G”).AutoFit
‘Name worksheet
wksNew.Name = sWksName
End Sub
The Clickevent procedure first calculates a name for the new worksheet in the format mmmyyyy. It then
checks to see if this worksheet already exists by setting a dummy object variable to refer to a worksheet
with the new name. If this does not cause an error, the worksheet already exists and the procedure issues
a message and exits.
If there is no worksheet with the new name, the event procedure adds a new worksheet at the beginning
of the existing worksheets. It copies the visible cells in Table1 to the new sheet and AutoFits the column
widths to accommodate the copied data. The procedure then names the new worksheet.
Finding the Visible Rows
When you use AutoFilter, Excel simply hides the rows that do not match the current filters. If you want
to process just the rows that are visible in your code, you need to look at each row in the list and decide
if it is hidden or not. There is a trick to this. When referring to the Hiddenproperty of a Range object, the
Rangeobject must be an entire row, extending from column Ato column XFD, or an entire column,
extending from row 1 to row 1048576. You can’t use the Hidden property with a single cell or a seven-
column row from the list shown in Figure 6-9.
The following code checks each row that is visible on the screen and shades the background of any row
that has an invalid Revenue calculation:
Private Sub CommandButton1_Click()
Dim rngData As Range
Dim rngRow As Range
Dim dNumberSold As Double
Dim dPrice As Double
Dim dRevenue As Double
‘Locate datarows
Set rngData = Sheet1.ListObjects(“Table1”).DataBodyRange
‘Loop through all data rows
154
Chapter 6: Data Lists
For Each rngRow In rngData.Rows
‘Only process visible rows
If rngRow.EntireRow.Hidden = False Then
‘Check calculation
dNumberSold = rngRow.Cells(5).Value
dPrice = rngRow.Cells(6).Value
dRevenue = rngRow.Cells(7).Value
‘If wrong, display error
If Abs(dNumberSold * dPrice - dRevenue) > 0.000001 Then
rngRow.Select
rngRow.Interior.ColorIndex = 3
MsgBox “Error in selected row”
End If
End If
Next rngRow
End Sub
Figure 6-9
The Clickevent procedure for the command button first defines an object variable rngData referring to
the rows of data in Table1, excluding the Header Row, which is returned by the DataBodyRange prop-
erty of the ListObject object. It then uses a ForEach...Next loop to process all the rows in rngData.
155
Chapter 6: Data Lists
The first If test ensures that only rows that are not hidden are processed. The dNumberSolddPrice,
and dRevenue values for the current row are assigned to variables, and the second Iftests that the
dRevenuefigure is within a reasonable tolerance of the product of dNumberSoldand dPrice.
Because worksheet computations are done with binary representations of numbers to an accuracy of about
15 significant figures, it is not always appropriate to check that two numbers are equal to the last decimal
point, especially if the input figures have come from other worksheet calculations. It is better to see if they
differ by an acceptably small amount. Because the difference can be positive or negative, the Abs function
is used to convert both positive and negative differences to a positive difference before comparison.
If the test shows an unacceptable difference, the row is selected and a message is displayed. The row is
also given a background color of red. 
Advanced Filt er
Apowerful way to filter data from a list is to use Advanced Filter. You can filter the list in place, like
AutoFilter, or you can extract it to a different location. The extract location can be in the same worksheet,
in another worksheet in the same workbook, or in another open workbook. In the following example,
the data for NSW and VIC has been extracted for the first quarter of 2007. The data has been copied from
the workbook containing the data list to a new workbook.
The source data can be in a Table or can be in a normal range. In the following examples, the data is in a
normal range named Database.
When you use Advanced Filter, you specify your criteria in a worksheet range. An example of a Criteria
range is shown in A1:C3 of the screen in Figure 6-10. This worksheet is in a workbook called DataList6
.xlsm. The data list is in DataList5.xlsm, which contains the same data used in the AutoFilter examples.
Figure 6-10
156
Chapter 6: Data Lists
The top row of the Criteria range contains the field names from the list that you want to filter on. 
You can have as many rows under the field names as you need. Criteria on different rows are combined
using the OR operator. Criteria across a row are combined using the AND operator. You can also use com-
puted criteria in the form of logical statements that evaluate to True or False. In the case of computed
criteria, the top row of the Criteria range must be empty or contain a label that is not a field name in
the list, such as Calc in this case.
When you create computed criteria, you can refer to the data list field names in your formulas, as you
can see in the Formula bar above the worksheet. The Formula bar shows the contents of C2, which is as
follows:
=AND(Date>=$D$2,Date>=$E$2)
The formula in C3 is identical to the formula in C2.
The criteria shown can be thought of as applying this filter:
(State=NSW AND Date>=Jan 1, 2007 AND Date<=Mar 31, 2007) OR _
(State=VIC AND Date>=Jan 1, 2007 AND Date<=Mar 31, 2007)
Because the field names are not workbook names, the formulas evaluate to a #NAME? error.
To facilitate the Advanced Filter, the data list in the DataList5.xlsm workbook has been named
Database. In the DataList6.xlsmworkbook, A1:C3 has been named Criteriaand A6:G6 has been
named Extract. If you carry out the Advanced Filter manually, selecting the Data tab of the Ribbon and
clicking the Advanced button in the Sort & Filter group, you see the dialog box in Figure 6-11, where you
can enter the names as shown. The List Range entry, which is obscured, is DataList5.xlsm!Database.
Figure 6-11
To automate this process, the command button with the Extract Data caption runs the following Click
event procedure:
Private Sub CommandButton1_Click()
Dim rngData As Range
Dim rngCriteria As Range
Dim rngExtract As Range
‘Define Database, Criteria & Extract Ranges
157
Chapter 6: Data Lists
Documents you may be interested
Documents you may be interested