Figure 9-3
Summary
In this chapter, you have seen some useful examples of how to utilize event procedures to respond to
user actions.
You have been introduced to worksheet, chart, and workbook events, delving a little deeper into the fol-
lowing events:
Worksheet_Calculate
Chart_BeforeDoubleClick
Workbook_BeforeClose
Workbook_BeforePrint
VBA is essentially an event-driven language, so a good knowledge of the events at your disposal can
open up a whole new world of functionality you never knew existed.
To find out more, have a play with the Object Browser, and consult the object model in Appendix A.
208
Chapter 9: Event Procedures
Pdf rotate pages separately - 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#
how to permanently rotate pdf pages; rotate pdf page few degrees
Pdf rotate pages separately - 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 save rotated pages; rotate pdf page by page
Add ing  Con tr ols
As discussed in Chapter 1, you can add two different types of controls to Excel worksheets:
ActiveX controls or Form controls. The Form controls originated in Excel 5 and Excel 95 and 
provide controls for the dialog sheets used in those versions, as well as controls embedded in a
worksheet or chart. Dialog sheets have been superseded by UserForms since the release of Excel
97, and UserForms utilize the ActiveX controls.
You can create controls by activating the Developer tab of the Ribbon and clicking the Insert but-
ton in the Controls group. This displays the dialog box shown in Figure 10-1.
Figure 10-1
Form and ActiveX Controls
The Form controls and dialog sheets are still supported in Excel. Form controls even have some
advantages over the ActiveX controls. They are less complex than the ActiveX controls. However,
each Form control can only respond to a single event. In most cases, that event is the Click event—
the edit box is an exception, responding to the Changeevent.
If you want to create controls and define their event procedures in your VBA code, as opposed
to creating them manually, the Form controls are easier to work with. Abig advantage over an
ActiveX control is that the event procedure for a Form control can be placed in a standard module,
can have any valid VBA procedure name, and can be created when you write the code for the
application, before the control is created.
VB Imaging - VB Code 128 Generation Guide
the created Code 128 barcode graphics separately or together 96 'set rotation barcode.Rotate = Rotate.Rotate0 barcode Create Code 128 on PDF, Multi-Page TIFF
pdf rotate just one page; how to rotate a pdf page in reader
XDoc.HTML5 Viewer for .NET, All Mature Features Introductions
View, Zoom & Rotate. NET developers to search text-based documents, like PDF, Microsoft Office One is to save annotations separately from original document as
how to rotate one page in a pdf file; rotate a pdf page
You can create the control programmatically, when it is needed, and assign the procedure name to
theOnActionproperty of the control. You can even assign the same procedure to more than one control.
On the other hand, ActiveX event procedures must be placed in the class module behind the worksheet
or user form in which they are embedded, and must have a procedure name that corresponds with the
name of the control and the name of the event. For example, the click event procedure for a control
named OptionButton1must be as follows:
Sub OptionButton1_Click()
If you try to create an event procedure for an ActiveX control before the control exists, and you try to ref-
erence that control in your code, you will get compiler errors, so you have to create the event procedure
programmatically. This is not an easy task, as you will see in later sections.
In addition, see Chapter 26 for an example of adding an event procedure programmatically to a
UserForm control.
On the other hand, a procedure that is executed by a Form control does not need to have a special name
and can use the Caller property of the Applicationobject to obtain a reference to the control that exe-
cutes it. The control name does not need to be included in the name of the procedure or in references to
the control, as you will see later in this chapter.
ActiveX Controls
Figure 10-2 shows four types of ActiveX controls embedded in the worksheet. The scrollbar in cells
C3:F3 allows you to set the value in cell B3. The spin button in cell C4 increments the growth percentage
in cell B4. The checkbox in cell B5 increases the tax rate in cell B16 from 30% to 33%, if it is checked.
Theoption buttons in column I change the cost factor in cell B15, and also change the maximum and
minimum values for the scrollbar.
Figure 10-2
210
Chapter 10: Adding Controls
C# Imaging - UPC-A Barcode Generator
A barcode can be processed separately on target Resolution = 96;// set resolution barcode.Rotate = Rotate.Rotate0;// set to document files, like PDF, TIFF, MS
rotate pdf pages in reader; rotate pdf page and save
C#: How to Draw and Customize Annotation in HTML5 Document Viewer
PDF pages extract, copy, paste, C#.NET rotate PDF pages, C#.NET VB.NET How-to, VB.NET PDF, VB.NET One is to save annotations separately from original document
pdf rotate one page; how to rotate a single page in a pdf document
An ActiveX control can be linked to a worksheet cell, using its LinkedCell property, so that the cell
always displays the Value property of the control. None of the ActiveX controls shown in Figure 10-2
use a link cell, although the scrollbar could have been linked because its value is displayed in B3. Each
control uses an event procedure to make its updates. This gives you far more flexibility than a simple
cell link and removes the need to dedicate a worksheet cell to the task.
Scrollbar Control
The scrollbar uses the Change event and the Scroll event to assign the Value property of the scrollbar
to cell B3. The maximum and minimum values of the scrollbar are set by the option buttons (this is dis-
cussed later):
Private Sub ScrollBar1_Change()
‘Assign scrollbar value to B3
Range(“B3”).Value = ScrollBar1.Value
End Sub
The Change event procedure is triggered when the scrollbar value is changed by clicking the scroll
arrows, by clicking above or below the scroll box (or to the left or right if it is aligned horizontally), 
or by dragging the scroll box. However, a small glitch occurs immediately after you change the option
buttons. Dragging the scroll box does not trigger the Change event on the first attempt. Utilizing the
Scrollevent procedure solves this problem.
The Scroll event causes continuous updating as you drag the scrollbar, so you can see what figure you
are producing as you drag, rather than after you have released the scrollbar. It might not be practical to
use the Scroll event procedure in a very large worksheet in auto-recalculation mode because of the
large number of recalculations it causes.
Spin Button Control
The spin button control uses the SpinDown and SpinUp events to decrease and increase the value in cell B4:
‘Spin down event procedure for spin button
Private Sub SpinButton1_SpinDown()
With Range(“B4”)
‘Decrease value in B4 by .05%. Stop at 0%
.Value = WorksheetFunction.Max(0, .Value - 0.0005)
End With
End Sub
‘Spin up event procedure for spin button
211
Chapter 10: Adding Controls
C# Excel: Create and Draw Linear and 2D Barcodes on Excel Page
123456789"; linearBarcode.Resolution = 96; linearBarcode.Rotate = Rotate.Rotate0; // load Excel document and you can also load document like PDF, TIFF, Word
how to rotate just one page in pdf; pdf reverse page order online
Generate Image in .NET Winforms Imaging Viewer| Online Tutorials
Page: Insert PDF pages; VB.NET Page: Delete PDF pages; PDF Generator. PDF Reader. Twain Scanning. DICOM Reading. Adjust barcode quite margin size; Rotate barcode
reverse page order pdf online; pdf rotate pages and save
Private Sub SpinButton1_SpinUp()
With Range(“B4”)
‘Increase value in B4 by .05%. Stop at 1%
.Value = WorksheetFunction.Min(0.01, .Value + 0.0005)
End With
End Sub
The Valueproperty of the spin button is ignored. It is not suitable to be used directly as a percentage
figure because it can only be a long integer value. The events are used as triggers to run the code that
operates directly on the value in B4. The growth figure is kept in the range of zero to 1 percent.
Clicking the down side of the spin button runs the SpinDown event procedure, which decreases the
value in cell B4 by 0.05%. The worksheet Max function is used to ensure that the calculated figure does
not become less than zero. The SpinUp event procedure increases the value in cell B4 by 0.05%. It uses
the Minfunction to ensure that the calculated value does not exceed 1%.
CheckBox Control
The CheckBox control returns a Truevalue when checked, or a False value if it is unchecked. The Click
event procedure that follows uses an If structure to set the value in cell B16:
Private Sub CheckBox1_Click()
If CheckBox1.Value Then
‘If check box ticked, tax rate is 33%
Range(“B16”).Value = 0.33
Else
‘If check box not ticked, tax rate is 30%
Range(“B16”).Value = 0.3
End If
End Sub
Option Button Controls
Each option button has code similar to the following:
Private Sub OptionButton1_Click()
Call Options
End Sub
The processing for all the buttons is carried out in the following procedure, which is in the class module
behind the Profit worksheet that holds the previous event procedures:
212
Chapter 10: Adding Controls
DICOM to PDF Converter | Convert DICOM to PDF, Convert PDF to
Start DICOM - PDF image conversion through drag &drop Apply resize, rotate, flip, mirror, contrast, brightness and Convert all pages or certain pages chosen by
save pdf after rotating pages; rotate individual pdf pages reader
BMP to Word Converter | Convert Bitmap to Word, Convert Word to
Apply resize, rotate, flip, mirror, contrast, brightness and Convert all pages or certain pages chosen by users; Save original and converted images separately;
pdf reverse page order preview; how to save a pdf after rotating pages
Private Sub Options()
Dim dCostFactor As Double
Dim lScrollBarMax As Long
Dim lScrollBarMin As Long
‘Determine which option button is True
Select Case True
‘Mangoes
Case OptionButton1.Value
dCostFactor = 0.63
lScrollBarMin = 50000
lScrollBarMax = 150000
‘Lychees
Case OptionButton2.Value
dCostFactor = 0.74
lScrollBarMin = 25000
lScrollBarMax = 75000
‘Bananas
Case OptionButton3.Value
dCostFactor = 0.57
lScrollBarMin = 10000
lScrollBarMax = 30000
‘Rambutan
Case OptionButton4.Value
dCostFactor = 0.65
lScrollBarMin = 15000
lScrollBarMax = 30000
End Select
‘Apply factors
Range(“B15”).Value = dCostFactor
ScrollBar1.Min = lScrollBarMin
ScrollBar1.Max = lScrollBarMax
ScrollBar1.Value = lScrollBarMax
End Sub
The SelectCasestructure is used here in an unusual way. Normally you use a variable reference in the
first line of a SelectCase and use comparison values in the Case statements. Here, you used the value
Truein the Select Caseand referenced the option button Valueproperty in the Casestatements. This
provides a nice structure for processing a set of option buttons where you know that only one can have a
Truevalue. 
Only one option button can be selected and have a value of True in the preceding worksheet, because
they all belong to the same group. As you add option buttons to a worksheet, the GroupName property
of the button is set to the name of the worksheet—Profit, in this case. If you want two sets of unre-
lated option buttons, you need to assign a different GroupName to the second set.
213
Chapter 10: Adding Controls
Optionsuses the Select Casestructure to carry out any processing that is different for each option
button. The code following the EndSelect carries out any processing that is common to all the option
buttons. This approach also works very well when the coding is more complex, and also when the code
is triggered by another control, such as a command button, rather than the option button events.
Forms Controls
Figure 10-3 shows a Form control that is being used to select a product name to be entered in column D.
The control appears over any cell in column D that you double-click. When you select the product, the
product name is entered in the cell “behind” the control, the price of the product is entered in column F
on the same row, and the control disappears.
Figure 10-3
If you hover your cursor over the Form button that creates the control shown in Figure 10-3, the
ScreenTip that pops up describes this control as a ComboBox. However, in the Excel object model, it is
called a DropDown object, and it belongs to the DropDowns collection.
The DropDown object is a hidden member of the Excel object model in Excel 97 and
later versions. You will not find any help screens for this object, and it will not nor-
mally appear in the Object Browser. You can make it visible in the Object Browser if
you right-click in the Object Browser window and select Show Hidden Members
from the shortcut menu. You can learn a lot about the Forms toolbar controls by
using the macro recorder and the Object Browser, but you will need to have access to
Excel 5 or Excel 95 to get full documentation on them.
214
Chapter 10: Adding Controls
The DropDown control is created by a procedure called from the following BeforeDoubleClick event
procedure in the SalesData sheet, which has the programmatic name Sheet2:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)    
If Not Intersect(Target, Columns(“D”)) Is Nothing Then
Call AddDropDown(Target)
Cancel = True
End If
End Sub
The event procedure checks that Target (the cell that was double-clicked) is in column D. If so, it then runs
the AddDropDown procedure, passing Target as an input argument, and cancels the double-click event.
The following two procedures are in a standard module:
Sub AddDropDown(Target As Range)
Dim ddBox As DropDown
Dim vProducts As Variant
Dim i As Integer
‘Create array of products
vProducts = Array(“Bananas”, “Lychees”, “Mangoes”, “Rambutan”)
‘Add the drop down control in Target cell
With Target
Set ddBox = Sheet2.DropDowns.Add(.Left, .Top, .Width, .Height)
End With
‘Define macro to run and populate list
With ddBox
.OnAction = “EnterProdInfo”
For i = LBound(vProducts) To UBound(vProducts)
.AddItem vProducts(i)
Next i
End With
End Sub
Private Sub EnterProdInfo()
Dim vPrices As Variant
‘Create array of prices
vPrices = Array(15, 12.5, 20, 18)
‘Enter selected item into cell beneath drop down
With Sheet2.DropDowns(Application.Caller)
.TopLeftCell.Value = .List(.ListIndex)
.TopLeftCell.Offset(0, 2).Value = vPrices(.ListIndex + LBound(vPrices) - 1)
‘Delete drop down
.Delete
End With
End Sub
215
Chapter 10: Adding Controls
The AddDropDown procedure is not declared Private, because it would not then be possible to call it
from the Sheet2code module. This would normally be a problem if you wanted to prevent users from
seeing the procedure in the Macro dialog box. However, because it has an input argument, it will not be
shown in the dialog box anyway. Also, it does not matter whether AddDropDown is placed in the Sheet2
module or a standard module. It will operate in either location.
AddDropDownuses the Addmethod of the DropDownscollection to create a new drop-down. It aligns the
new control exactly with Target, giving it the same LeftTopWidth, and Height properties as the
cell. In the With...EndWithconstruction, the procedure defines the OnAction property of the drop-
down to be the EnterProdInfo procedure. This means that EnterProdInfowill be run when an item
is chosen from the drop-down. The For...Next loop uses the AddItem method of the drop-down to
place the list of items in vProducts into the drop-down list.
EnterProdInfohas been declared Privateto prevent its appearance in the Macro dialog box.
Although it is private, the drop-down can access it. EnterProdInfo could have been placed in the
Sheet2code module, but the OnActionproperty of the drop-down would have to be assigned
Sheet2.EnterProdInfo.
EnterProdInfoloads vPriceswith the prices corresponding to the products. It then uses
Application.Callerto return the name of the drop-down control that called the OnActionproce-
dure. It uses this name as an index into the DropDowns collection on Sheet2 to get a reference to the
DropDownobject itself. In the With...EndWithconstruction, EnterProdInfouses the ListIndex
property of the DropDown object to get the index number of the item chosen in the drop-down list.
You cannot directly access the name of the chosen item in a DropDown object, unlike an ActiveX
ComboBoxobject that returns the name in its Valueproperty. The Valueproperty of a drop-down is the
same as the ListIndex, which returns the numeric position of the item in the list. To get the item name
from a drop-down, you use the ListIndex property as a one-based index to the Listproperty of the
drop-down. The List property returns an array of all the items in the list.
The TopLeftCell property of the DropDown object returns a reference to the Range object under the
top-left corner of the DropDown object. EnterProdInfo assigns the item chosen in the list to the Value
property of this Range object. It then assigns the price of the product to the Range object that is offset
two columns to the right of the TopLeftCellRangeobject.
EnterProdInfoalso uses the ListIndexproperty of the drop-down as an index into the Pricesarray.
The problem with this is that the drop-down list is always one-based, whereas the Array function list
depends on the OptionBase statement in the declarations section of the module. LBound(vPrices) – 1
is used to reduce the ListIndex value by 1 if OptionBase0 is in effect or by 0 if OptionBase1 is in
effect.
You can also use the following code to ensure that the resulting array is zero-based under Option-Base-1:
vPrices = VBA.Array(15, 12.5, 20, 18)
Dynamic ActiveX Controls
As previously stated, it is more difficult to program the ActiveX controls than the Form controls. At the
same time, the ActiveX controls are more powerful, so it is a good idea to know how to program them.
216
Chapter 10: Adding Controls
You will see how to construct a combo box that behaves in a similar way to the drop-down in the previ-
ous example. Just to be different, use the BeforeRightClick event to trigger the appearance of a combo
box in the D column of the SalesData worksheet, as follows:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, _
Cancel As Boolean)
Dim ole As OLEObject
Dim ctl As MSForms.ComboBox
Dim lLine As Long
Dim oCodeModule As Object
‘Turn screen updating off
Application.ScreenUpdating = False
‘Determine if the combo box should be built
If Intersect(ActiveCell, Columns(“D”)) Is Nothing Then Exit Sub
On Error Resume Next
Set ole = Me.OLEObjects(“Combo”)
If Not ole Is Nothing Then
Cancel = True
Exit Sub
End If
On Error GoTo 0
‘Add the combo box to the active cell
With ActiveCell
Set ole = Me.OLEObjects.Add(ClassType:=”Forms.ComboBox.1”, _
Link:=False, DisplayAsIcon:=False, Left:=.Left, Top:=.Top, _
Width:=.Width, Height:=.Height)
End With
ole.Name = “Combo”
Set ctl = ole.Object
ctl.Name = “Combo”
With ctl
.AddItem “Bananas”
.AddItem “Lychees”
.AddItem “Mangoes”
.AddItem “Rambutan”
End With
‘Build the event procedure for the combo box click event
Set oCodeModule = ThisWorkbook.VBProject.VBComponents(Me.CodeName).CodeModule
With oCodeModule
lLine = .CreateEventProc(“Click”, “Combo”)
.ReplaceLine lLine + 1, “  ProcessComboClick”
End With
Cancel = True
‘Make sure the Excel window is active
Application.Visible = False
Application.Visible = True
End Sub
217
Chapter 10: Adding Controls
Documents you may be interested
Documents you may be interested