Sample sheet

48
Sample formulas to complete common worksheet tasks. Worksheet Functions Conditional Formatting Demonstrates how to change the formatting (I.e. font, cell color) applied to a cell depending on the current value of the cell. Data Validation Shows how to set up restrictions for the values that can be entered into a cell. Chart Labeling A macro to automate the labeling of an XY-Scatter chart. Repeating Tasks Sample looping macro code and an explanation of how to modify recorded code to repeat tasks on a range of cells or a selected range. Microsoft Excel 200 Table of Cont Microsoft provides examples of Visual Basic for Applications proced expressed or implied, including, but not limited to the implied w particular purpose. The Visual Basic procedures in this workbook are they can be used in all situations. While Microsoft Technical Suppo particular macro, they will not modify these examples to provide ad macros to meet your specific needs. If you have limited programming ex Solution Provider

description

Sample sheet

Transcript of Sample sheet

Table Of ContentsWorksheet FunctionsArraysSample formulas to complete common worksheet tasks.Macro code to demonstrate how to transfer array contents to a worksheet.Conditional FormattingAPI (Application Programming Interface) ExamplesDemonstrates how to change the formatting (I.e. font, cell color) applied to a cell depending on the current value of the cell.How to implement the use of API calls from within Microsoft Excel's programming environment.Data ValidationEventsShows how to set up restrictions for the values that can be entered into a cell.Examples to demonstrate how some events can trigger macro code to run.Chart LabelingAutomationA macro to automate the labeling of an XY-Scatter chart.Sample macro code to demonstrate how Microsoft Excel can automate other Microsoft Office applications.Repeating TasksADO - ActiveX Data ObjectsSample looping macro code and an explanation of how to modify recorded code to repeat tasks on a range of cells or a selected range.Examples that illustrate common database tasks via code

Microsoft Excel 2000 Samples FileTable of ContentsMicrosoft provides examples of Visual Basic for Applications procedures for illustration only, without warranty either expressed or implied, including, but not limited to the implied warranties of merchantability and/or fitness for a particular purpose. The Visual Basic procedures in this workbook are provided 'as is' and Microsoft does not guarantee that they can be used in all situations. While Microsoft Technical Support Engineers can help explain the functionality of a particular macro, they will not modify these examples to provide added functionality, nor will they help you construct macros to meet your specific needs. If you have limited programming experience, you may want to consult one of the Microsoft Solution Providers.Worksheet FunctionsRepeating TasksArraysAPI (Application Programming Interface) ExamplesData ValidationConditional FormattingChart LabelingEventsAutomationADO - ActiveX Data Objects

Worksheet FunctionsWorksheet Functions ExamplesThis worksheet contains sample formulas you can use to complete common spreadsheet tasks.Cells containing formulas are blue. To view a sample formula, hover your mouse cursor overthe cell to display the comment. Or, press CTRL+` to switch between displaying values anddisplaying formulas on the worksheet. For more information about a worksheet function, selectthe cell containing the function, then click the Edit Formula (=) button on the Formula bar.Suppressing the Display of Error ValuesIt is common for worksheet formulas to return an error value (#DIV/0!, #N/A,#VALUE!,#REF!, and #NUM!) if they are based on an unexpected value. An example is asimple division formula. If the source cell contains a zero, and #DIV/0! Error will bereturned.Source ASource BOriginal FormulaNew Formula2500A general way to express this is:=IF(ISERROR(),"",)where is the formula for which you want to suppress the error value. If returns an error, this statement returns "" (a null character), otherwise it returnsthe result of .Another way to suppress the display of error values is to use the Conditional Formattingfeature, new to Excel 97. The Conditional Formatting feature allows you to have a celldisplay different formats depending on the contents of the cell. For error values, you need tofollow these steps:1. Select the cell to be formatted (in this case $E$40)2. Click Conditional Formatting on the Format menu3. In the first dropdown box, select Formula Is4. In the edit box next to it, type: =ISERROR($E$40)5. Click on the format button, and select a format, in this case, a blue backgroundand the same blue font was used.6. Click OKThe result is that for error values, the font color is the same as the background, and nothingwill be displayed.Source ASource BOriginal FormatNew Format25000Indexing, Matching, and Looking Up ValuesOne of the most common List Management tasks is to find the value at the intersection of acolumn and a row in a rectangular range of cells on a worksheet. The Lookup Wizard helpsyou to write formulas to accomplish this task.To use this feature, select a cell within the data range that you would like to use, then selectTools / Wizard / Lookup, and follow the steps in the wizard.If the menu items are not present and for additional information on how to use or install theLookup Wizard, use the Office Assistant and perform a search using the phrase "Lookup Wizard".Conditional Sum FormulasAnother common task in Excel is to calculate the sum of the values meeting the conditionsyou specify. The Conditional Sum Wizard helps you write formulas that accomplish this task.To use this feature, select a cell within the list that you would like to summarize, then selectTools / Wizard / Conditional Sum, and follow the steps in the wizard.If the menu items are not present and for additional information on how to use or install theConditional Sum Wizard, use the Office Assistant and perform a search using the phrase"Conditional Sum Wizard".

=IF(C16=0," ",B16/C16)=B16/C16=B40/C40No conditional formatting applied.=B40/C40Conditional formatting applied. The formatting applies a blue background and the same blue font.

Conditional FormattingConditional FormattingConditional Formatting allows you to change the formatting applied to cell depending on the current value of the cell. This can make auditing large worksheets much faster by automatically highlighting exceptions. Conditional Formatting allows you to apply up to three separate conditions to a cell.

Conditional Formatting allows you to change the font style, borders, and cell patterns.Conditional Formatting Example #1Cells H10:H14 contain three Conditional Formatting rules that will change the formatting of the cells depending on the values entered into the cells.

To see the conditions applied to the cells, select cell H10, and then click Conditional Formatting on the Format menu.47text115Conditional Formatting Example #2 - Hiding Error ValuesThis example illustrates how to use Conditional Formatting to hide error values that are returned by formulas. In this example, cells H21 and H23 would normally display the #DIV/0! error code. The Conditional Formatting that has been applied sets the font color of the cells containing an error value to match the background of the worksheet.

To see the conditions applied to the cells, select cell H19, and then click Conditional Formatting on the Format menu.2.510442050305408050

Data ValidationData ValidationData Validation allows you to set up restrictions for the values that can be entered into a cell. The following examples present several common scenarios for using Data Validation.Data Validation Example #1 - Restricting Entry to Numeric ValuesCells H9:H13 have been formatted with a validation rule that restricts cell entries to numeric values. This example utilizes the Stop style for the Error alert, which prevents you from making an invalid entry into the selected cell.

To see the Validation settings for this example, select cell H9, and then click Validation on the Data menu.Data Validation Example #2 - Restricting the Length of a Text EntryCells H19:H23 have been formatted with a validation rule that restricts the length of text entries to seven characters or less. This example utilizes the Warning style for the Error alert, which gives you the option to cancel the current entry, or enter the invalid value into the selected cell.

To see the Validation settings for this example, select cell H19, and then click Validation on the Data menu.Data Validation Example #3 - Restricting Entry to a Range of Whole NumbersCells H30:H34 have been formatted with a validation rule that will alert you if you do not enter a whole number between 1 and 10. This example utilizes the Information style for the Error alert, which informs you of an invalid entry, but allows you to keep the current value.

To see the Validation settings for this example, select cell H30, and then click Validation on the Data menu.Data Validation Example #4 - Restricting Cell Entry to a List of ValuesCells H41:H45 have been formatted with a validation rule that restricts the entries to a list of values. The list of valid entries is contained in cells M41:M49. When you select a cell within the range H41:H45, a dropdown arrow appears on the cell. When you click the arrow, the list of valid entries is displayed. You can simply click the entry that you wish to make. This example utilizes the Stop style for the Error alert, which prevents you from making an invalid entry in the cell.

To see the Validation settings for this example, select cell H41, and then click Validation on the Data menu.BobChrisDavidJohnMikePerryRandalSteveTim

Chart LabelingAttaching Labels to an XY (Scatter) ChartLabelsX ValuesY ValuesDatapoint125Datapoint297Datapoint353Datapoint448

In Microsoft Excel, there is no built-in way to automatically attach text labels to an xy (scatter) chart. You can use a macro to accomplish this.

The attached macro demonstrates how to apply labels to an xy (scatter) chart, and assumes that your data and associated labels are arranged on your worksheet in the same fashion as the shaded cells above.

To apply the data point labels, press the "Place Labels on Chart" Button.

To remove the labels for another demo, press the "Reset Chart" button.

To view the macro code attached to the sheet, press the "View Code" button.Place Labels on ChartReset ChartView Code

Chart Labeling

Y Values

Repeating TasksRepeating TasksOften it is necessary to perform the same task on a group of items. These items may be cells in a range, worksheets in a workbook or workbooks in the application. Although the macro recorder cannot record loops, the recorder can still be used to record the main task to be repeated. Then,with some minor modifications to the recorded code, various types of loops can be created depending on what is needed for an individual project.The samples below focus on a scenario where the programmer has a range of cells in column A containing numbers, and depending on the value of the cell, wishes to change the color of the corresponding cell in column B.First, we can record the single step process of changing the color of the background of a cell:To record: From the Tools menu, click Macro, then click Record New Macro. While recording, from the Format menu, click Cells. Then, click the Patterns tab and select a color.

This sample uses yellow (.ColorIndex=6). Now stop the recorder using the Stop button on the Stop Recording toolbar. The currently selected cell will change color and the following macro will have been recorded:Sub Recorded_Macro()'' Macro recorded 11/18/98'With Selection.Interior .ColorIndex = 6 .Pattern = xlSolidEnd WithEnd SubNote: If, while recording, you selected a cell, your macro may contain something similar to Range("A3").Select. You may want to remove this line, since every time the macro is run,this line will force the cell specified in the Range object to be selected. If you want that cell to be selected first then leave that line in the macro.Now, we can modify the code slightly and add one of the various looping structures to the recorded code.For Each...Next LoopIf we know what range of cells to which we want to apply the recorded action, we can use a ForEachNext loop. In this example, we also want to only affect the cell in column B if the cell in A isgreater than 20. To do this we add an If statement around our recorded With statement. This willensure the color will be changed only if the If statement's condition is true. Lastly, because we arewanting to change the corresponding cell one column to the right of column A (column B), we willreplace the Selection property in the recorded code with the Offset method of the looping cellobject (cell_in_loop). The resulting code might look like thisSub For_Each_Next_Sample()'' Macro recorded 11/18/98'For Each cell_in_loop In Range("A1:A5") If cell_in_loop.Value > 20 Then With cell_in_loop.Offset(0, 1).Interior .ColorIndex = 6 .Pattern = xlSolid End With End IfNextEnd SubForNext LoopIf you know how many times you wish to loop through your code you can use a For...Next loop. Using our example, if you want to only check ten cells down, starting from the selected cell, then your modified recorded code might look like this:Sub For_Next_Sample()

For Counter = 0 To 9 If Selection.Offset(Counter, 0).Value > 20 Then With Selection.Offset(Counter, 1).Interior .ColorIndex = 6 .Pattern = xlSolid End With End IfNextEnd SubHere the Selection object is being used so that the code is not specific to any given range, but will always loop through ten (0 to 9 as a counter) cells below the active cell. The Counter variable increments each time through the loop and can be used within the looping structure. Here it is used as an Offset argument to indicate how many rows to offset from Selection (the current cell). So, if we start this macro and the active cell is A1, the first time through the loop the Counter variable will equal 0, therefore we will Offset 0 rows from A1 as shown in the Selection.Offset(Counter, 0).Value statement.DoLoopTo determine whether or not to stop a loop based on a certain condition, a DoLoop might be appropriate. This looping structure allows you to check properties or variable conditions before the loop is executed. In the sample below, we continue to loop until the referenced cell's rownumber, Selection.Offset(Counter, 0).Row, has exceeded 100. This can be useful if you never want to perform the looping task below row 100.Sub Do_Loop_Sample()

Counter = 0Do Until Selection.Offset(Counter, 0).Row > 100 If Selection.Offset(Counter, 0).Value > 20 Then With Selection.Offset(Counter, 1).Interior .ColorIndex = 6 .Pattern = xlSolid End With End If Counter = Counter + 1LoopEnd SubNote: There are three more types of DoLoops available. The various forms offer more flexibility when needed in various circumstances.To find more information about these, and more detail about the other looping structures, please access Help from within the Visual Basic Environment and use the keyword looping.

Goto Recorded_Macro Sample CodeGoto For_Each_Next Sample CodeGoto For..Next Sample CodeGoto Recorded_Macro Sample CodeGoto For_Each_Next Sample CodeGoto For_Next Sample CodeGoto Do_Loop Sample Code

ArraysWorking with ArraysThe most common way to transfer the contents of an array to a worksheet is through a loop, such as a For...Next loop. A For...Next loop allows you to index into the array and transfer elements of the array to their destination address one at a time. You can accomplish this same result without a loop using the Visual Basic, Applications Edition, FormulaArray property of the Range object.In Visual Basic, Applications Edition, the orientation of a one-dimensional array is horizontal. Therefore, if the range of cells on a worksheet that are to receive the contents of an array are also in the same orientation (that is, one row by several columns), the contents can be transferred with a single FormulaArray statement. For example:Sub ArrayDump1() 'For a one-dimensional horizontal array Dim x(1 To 10) As Double 'Declares an array of size 10 For j = 1 To 10 'Calculates sample values x(j) = j * j Next j 'Transfers array contents to a horizontal area Range(Cells(2, 1), Cells(2, 10)).FormulaArray = xEnd SubThe above example works correctly when the destination worksheet cells involve only one row. However, when the contents of an array need to be transferred to a range of cells with a vertical, as opposed to a horizontal orientation (that is, one column by several rows), the above example is no longer valid.Within a two-dimensional array you must change the orientation of the array. To do this, you can declare the array a two-dimensional array with dimensions of several rows by one column. For example:

Sub arraydump2() 'For a two-dimensional vertical array 'Declares an array ten rows by one column Dim x(1 To 10, 1 To 1) As Double 'Calculates random values For j = 1 To 10 x(j, 1) = j * j Next j 'Transfers array contents to a vertical area Range(Cells(1, 2), Cells(10, 2)).FormulaArray = xEnd Sub

The two-dimensional array shown in this example allows Visual Basic to set the orientation of the array as vertical; therefore, the array can be transferred to a worksheet without a loop.

Goto ArrayDump1 Sample CodeGoto ArrayDump2 Sample Code

API ExamplesAPI ExamplesAn API (Application Programming Interface) is a function contained in DLL file.These functions are normally used by windows and other applications but they can also be used by the end user.Note: Exercise care when experimenting with API calls. Save your work often to avoid any problems.Because they were designed to be called by the system and by applications, most error trapping has not been implemented.This means that you may cause system hangs, crashes or other unintended side effects when experimenting with API calls.The following examples show how to use some of the basic APIs. These have been tested under Windows98 and Excel 2000.There are multiple ways to use these functions and it is up to the programmer to determine which is best for the result they are looking for.Checking all drive lettersThe following example uses the function GetLogicalDriveStrings to loop through all logical drives.Logical drives are removable, fixed, CD drives and mapped network shares.Option ExplicitPrivate Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" _(ByVal nBufferLength As Long, _ByVal lpBuffer As String) As LongSub Get_Logical_Drive_String()Dim DrvString As StringDim TotDrvs As LongDim Counter As Integer'TotDrvs returns the total number of characters in return stringTotDrvs = GetLogicalDriveStrings(0&, DrvString)'DrvString is the buffer created to hold the stringDrvString = String(TotDrvs - 1, " ")'Calling GetLogicalDriveStrings a second time fills the string with valid data'example "a:\ c:\ d:\ e:\ "TotDrvs = GetLogicalDriveStrings(TotDrvs, DrvString)'Parse through the return string displaying each in a msgboxFor Counter = 1 To TotDrvs Step 4MsgBox Mid(DrvString, Counter, 3)Next CounterEnd SubReturning Video ResolutionThe following code example returns the current screen video resolutionand displays the information in a message box.Option ExplicitPrivate Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long'Constants for GetSystemMetricsConst SM_CXSCREEN = 0 ' Width of screenConst SM_CYSCREEN = 1 ' Height of screenSub Get_System_Metrics()Dim XVal As Long, YVal As LongYVal = GetSystemMetrics(SM_CYSCREEN)XVal = GetSystemMetrics(SM_CXSCREEN)MsgBox "Your Screen Resolution is " & XVal & " by " & YValEnd SubRetrieving logged on user nameThe following code will return the currently logged on user name.Option ExplicitPrivate Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _(ByVal lpBuffer As String, _nSize As Long) As LongSub Get_User_Name()Dim lpBuff As String * 25Dim ret As Long, UserName As Stringret = GetUserName(lpBuff, 25)UserName = Left(lpBuff, InStr(lpBuff, Chr(0)) - 1)MsgBox UserNameEnd SubReturn the short path name of a long path and file nameThe following function takes a Long File Name and returns the Short File namedisplaying both in a message box.Private Declare Function GetShortPathName Lib "KERNEL32.DLL" Alias "GetShortPathNameA" _(ByVal lpctstrLongName As String, _ByVal lptstrShortName As String, _ByVal bufLen As Long) As LongSub Get_Short_Name()Dim LongStr As String, ShortStr As StringDim lStrLen As Long, lRet As Long'LongStr is any long file name or variable pointing to a fileLongStr = ThisWorkbook.FullNamelRet = GetShortPathName(LongStr, ShortStr, lStrLen)'This allows us to create a buffer the same length as'the returned string, saving us the trouble of having'to strip the left of the buffer to get the stringShortStr = String(lRet, " ")lRet = GetShortPathName(LongStr, ShortStr, lRet)MsgBox LongStr & " was converted to " & ShortStrEnd SubReturn the Computer NameThe following code example shows how to use the GetComputerName function to return the computer name.Option ExplicitPrivate Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, _nSize As Long) As LongSub Get_Computer_Name()Dim Comp_Name_B As String * 255Dim Comp_Name As StringGetComputerName Comp_Name_B, Len(Comp_Name_B)'but the string is always ended with a null terminated string so we can use the Chr(0) function to find the endComp_Name = Left(Comp_Name_B, InStr(Comp_Name_B, Chr(0)))'and return only the computer nameMsgBox Comp_NameEnd SubFind the free space available on hard driveThe following code example shows how to find the free space available as well as the total hard drive size.Option ExplicitPrivate Declare Function GetDiskFreeSpace Lib "KERNEL32.DLL" Alias "GetDiskFreeSpaceA" (ByVal lpRoot As String, _dwSectors As Long, _dwBytes As Long, _dwFreeClusters As Long, _dwTotalClusters As Long) As LongSub Get_Disk_Free_Space()Dim f As Long, iSectors As LongDim iTotal As Long, rTotal As LongDim iFree As Long, rFree As LongDim iBytes As LongDim sName As String, s As StringsName = "C:\"f = GetDiskFreeSpace(sName, iSectors, iBytes, iFree, iTotal)rFree = iSectors * iBytes * CDbl(iFree)rTotal = iSectors * iBytes * CDbl(iTotal)If f Thens = sNames = s & " has " & Format(rFree, "#,###,###,##0")s = s & " bytes free from " & Format(rTotal, "#,###,##0") & " Total bytes"End IfMsgBox sEnd SubReturning the system folder locationThe following code example show how to retrieve the system folder location.Option ExplicitDeclare Function GetSystemDirectory Lib "kernel32" Alias "GetSystemDirectoryA" (ByVal lpBuffer As String, _ByVal nSize As Long) As LongSub Get_System_Directory()Dim Sys_Dir As String, Res As LongRes = GetSystemDirectory(Sys_Dir, 0&)Sys_Dir = String(Res - 1, " ")Res = GetSystemDirectory(Sys_Dir, Res)MsgBox Sys_DirEnd SubFinding out if the system is capable of playing WAV filesThe following code example polls the system to see if there are any devices capable of playing WAV files.Option ExplicitDeclare Function waveOutGetNumDevs Lib "winmm" () As LongSub Num_Devs()Dim i As Longi = waveOutGetNumDevs()If i > 0 Then ' There is at least one device.MsgBox "You Can Play Wave Data"ElseMsgBox "Cannot Play Wave Data"End IfEnd SubSetting Excel to "Always on Top"The following code example shows how to make Microsoft Excel "Always on Top". This prevents other applicationsfrom being displayed in front of Microsoft Excel.Option ExplicitPrivate Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _ByVal lpWindowName As String) As LongPrivate Declare Function SetWindowPos Lib "user32" (ByVal hWnd As Long, _ByVal hWndInsertAfter As Long, _ByVal x As Long, _ByVal y As Long, _ByVal cx As Long, _ByVal cy As Long, _ByVal wFlags As Long) As LongGlobal Const HWND_TOPMOST = -1Global Const HWND_NOTOPMOST = -2Sub SetOnTop()Dim WinHnd As Long, SUCCESS As LongWinHnd = FindWindow("xlmain", Application.Caption)SUCCESS = SetWindowPos(WinHnd, HWND_TOPMOST, 0, 0, 0, 0, Flags)'The following line is here just to switch Excel back to normal operation'after 20 secondsApplication.OnTime Now + TimeValue("00:00:20"), "NotOnTop"End SubSub NotOnTop()Dim WinHnd As Long, SUCCESS As LongWinHnd = FindWindow("xlmain", Application.Caption)SUCCESS = SetWindowPos(WinHnd, HWND_NOTOPMOST, 0, 0, 0, 0, Flags)End Sub

Goto Get_Logical_Drive_String Sample CodeGoto Get_System_Metrics Sample CodeGoto Get_User_Name Sample CodeGoto Get_Short_Name Sample CodeGoto Get_Computer_Name Sample CodeGoto GetDiskFreeSpace Sample CodeGoto GetSystemDirectory Sample CodeGoto Num_Devs Sample CodeGoto SetOnTop Sample CodeGoto Get_Logical_Drive_String Sample CodeGoto Get_System_Metrics Sample CodeGoto Get_User_Name Sample CodeGoto Get_Short_Name Sample CodeGoto Get_Computer_Name Sample CodeGoto Get_Disk_Free_Space Sample CodeGoto GetSystemDirectory Sample CodeGoto Num_Devs Sample CodeGoto SetOnTop Sample Code

EventsProgramming with EventsOften programmers wish to have a certain event trigger a macro to perform some task. Microsoft Excel 2000 offers this capability. Events are always associated with an object. Examples of these might be a worksheet, or a workbook. In this sample file we will only discuss a few of the events available and use a MsgBox as a filler to demonstrate where regular code could go. To find out more about any of these and other events, click on the assistant while in the VBE and use the object name and the word "events" as your keywords. (e.g. worksheet events).BeforeDoubleClickA very popular type of Event is the BeforeDoubleClick event on a worksheet. A very simple example may look like:Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean) MsgBox "You double clicked on cell " & Target.Address Cancel = TrueEnd SubThis event will fire whenever the user double-clicks a cell in the worksheet. The parameter Target is passed into the macro so the programmer will know what cell has been double clicked. The Cancel argument has a default value of False but can be changed to True within the code. Setting Cancel to True will cancel the default action for the event. In this case, the default action for a double click on a cell is to switch to edit mode on the cell. Since we set Cancel to True, this will not occur. If you want to still have the default action occur, then the Cancel=True line can be removed.ChangeAnother very useful event is the Change event for a worksheet. Any time the user enters a new value in any cell this event fires.Private Sub Worksheet_Change(ByVal Target As Excel.Range) MsgBox "This sheet has changed in cell " & Target.AddressEnd SubNote: This event does not occur if the sheet has just been recalculated. There is an event called Calculate which will fire when the worksheet recalculates.BeforeCloseA useful Workbook related event is BeforeClose. These events can be used to perform "housekeeping" tasks before a file is saved or closed.Sub Workbook_BeforeClose(Cancel As Boolean) a = MsgBox("Do you really want to close the workbook?", vbYesNo) If a = vbNo Then Cancel = TrueEnd SubIn this example, the user is prompted to close the file regardless if the file has been saved or not.Using Events with the Application ObjectBefore you can use events with the Application object, you must create a new class module and declare an object of type Application with the keyword WithEvents. For example, assume that a new class module is created and called EventClassModule. The new class module contains the following code.Public WithEvents App As ApplicationAfter the new object has been declared with events, it appears in the Object drop-down list box in the class module, and you can write event procedures for the new object. (When you select the new object in the Object box, the valid events for that object are listed in the Procedure drop-down list box.)Before the procedures will run, however, you must connect the declared object in the class module with the Application object. You can do this with the following code from any module.Dim X As New EventClassModule

Sub InitializeApp() Set X.App = ApplicationEnd SubAfter you run the InitializeApp procedure, the App object in the class module points to the Microsoft Excel Application object, and the event procedures in the class module will run when the events occur.Note: To find out more information on all events, please consult the VBA Help file for further information.

AutomationAutomationAutomation is a feature of the Component Object Model (COM), a technology that applications use to expose their objects to development tools, macro languages, and other applications that support Automation. For example, a spreadsheet application may expose a worksheet, chart, cell, or range of cells each as a different type of object. A word processor might expose objects such as an application, a document, a paragraph, a sentence, a bookmark, or a selection. The following examples demonstrate automating tasks between Microsoft Excel and other Microsoft applications.For more information on Automation, refer to Understanding Automation in VBA Help.MICROSOFT ACCESSThis example returns the location of the Microsoft Access sample databases.Sub MS_Access()Dim AccDir As StringDim acc As Object 'OLE automation to Access Set acc = CreateObject("access.application") 'Return the path for msaccess.exe AccDir = acc.SysCmd(Action:=acSysCmdAccessDir) 'Display the path MsgBox "MSAccess.exe is located in " & AccDir 'Free up variable storage space Set acc = NothingEnd SubMICROSOFT WORDThis example copies the chart from the Chart Labels sheet into a new Microsoft Word document.Sub MS_Word()Dim wd As Object 'Create a Microsoft Word session Set wd = CreateObject("word.application") 'Copy the chart on the Chart Labels sheet Worksheets("Chart Labeling").ChartObjects(1).Chart.ChartArea.Copy 'Make document visible wd.Visible = True 'Activate MS Word AppActivate wd.Name With wd 'Create a new document in Microsoft Word .Documents.Add 'Insert a paragraph .Selection.TypeParagraph 'Paste the chart .Selection.PasteSpecial link:=True, DisplayAsIcon:=False, Placement:=wdInLine End With Set wd = NothingEnd SubMICROSOFT POWERPOINTThis example copies the chart from the Chart Labels sheet into a new Microsoft PowerPoint presentation.Sub MS_PowerPoint()Dim ppt As Object, pres As Object 'Create a Microsoft PowerPoint session Set ppt = CreateObject("powerpoint.application") 'Copy the chart on the Chart Labels Demo sheet Worksheets("Chart Labeling").ChartObjects(1).Copy 'Create a new document in Microsoft PowerPoint Set pres = ppt.Presentations.Add 'Add a slide pres.Slides.Add 1, ppLayoutBlank 'Make PowerPoint visible ppt.Visible = True 'Activate PowerPoint AppActivate ppt.Name 'Paste the chart ppt.ActiveWindow.View.Paste Set ppt = NothingEnd SubMICROSOFT OUTLOOKThis example creates and adds information to a new Outlook task. Run Outlook and click Tasks on the Outlook bar to see the new task. NOTE: It may take a few minutes for the task to appear.Sub MS_Outlook()Dim ol As Object, myItem As Object 'Create a Microsoft Outlook session Set ol = CreateObject("outlook.application") 'Create a task Set myItem = ol.CreateItem(olTaskItem) 'Add information to the new task With myItem .Subject = "New VBA task" .Body = "This task was created via Automation from Microsoft Excel" .NoAging = True .Close (olSave) End With 'Remove object from memory Set ol = NothingEnd Sub

Goto MS_Access Automation CodeGoto MS_Word Automation CodeGoto MS_Powerpoint Automation CodeGoto MS_Outlook Automation Code

ADO-ActiveX Data ObjectsADO-ActiveX Data ObjectsNameRegionProductSalesPlease Do NotTomEastApples$759ActiveX Data Objects (ADO) allow direct manipulation of a database. Several examples that illustrate common database tasks are included with this workbook.Modify this table.TomEastBananas$707It is necessary forTomEastPears$188examples containedTomEastOranges$121in this workbook.MikeSouthBananas$689MikeSouthOranges$345Retrieve Data via ISAM DriversMikeSouthApples$244This example retrives data from a dBase file, and places the result in a new worksheet. For this example, you must have the Microsoft dBase driver installed. You must also have the Customer.dbf file installed.MikeSouthPears$962LindySouthApples$732LindySouthPears$908LindySouthOranges$755LindySouthBananas$30Sub RetrieveISAMdata()JanEastBananas$979''' NOTE: This subroutine requires that you reference theJanEastApples$123'' latest version of the following library:JanEastPears$21'''JanEastOranges$799'' Microsoft ActiveX Data Objects LibraryHarveySouthOranges$244HarveySouthBananas$516Dim conn As ADODB.ConnectionHarveySouthApples$562Dim rst As ADODB.RecordsetHarveySouthPears$190Dim NewBook As WorkbookGregNorthPears$300Dim PathToDatabase As StringGregNorthOranges$704Dim i As IntegerGregNorthBananas$785GregNorthApples$527' Create the Connection object.AndyNorthPears$513Set conn = New ADODB.ConnectionAndyNorthOranges$800AndyNorthBananas$138' Set Database path stringAndyNorthApples$430PathToDatabase = Application.Path & "\" & _Application.LanguageSettings.LanguageID(msoLanguageIDInstall)With conn'Assign the connection string to the connection object..ConnectionString = "DRIVER={Microsoft dBase Driver (*.dbf)};" & _"DBQ=" & PathToDatabase & ";" & _"DefaultDir=" & PathToDatabase & "\"' Open the connection..Open strConnEnd With' Create a new Recordset Object.Set rst = New ADODB.RecordsetWith rst' Connect this recordset to the previously opened connection..ActiveConnection = conn' Retrieve all records from the Customer table..Open "SELECT * FROM customer"End With' Add a new worksheet to this workbookSet NewBook = Workbooks.Add' Loop through all of the fields, returning the field names to the worksheet.For i = 0 To rst.Fields.Count - 1NewBook.Sheets(1).Range("a1").Offset(0, i).Value = rst.Fields(i).NameNext i' Copy the recordset to the new worksheet.NewBook.Sheets(1).Range("a2").CopyFromRecordset rst' Close the recordset.Set rst = Nothing' Close the Connection.conn.CloseEnd SubRetrieving Data From Microsoft AccessThis example uses ADO to create a query based on two tables in the Northwind.mdb database. This example requires that the Northwind.mdb file is installed on your computer.Sub RetrieveAccessData()''' NOTE: This subroutine requires that you reference the'' latest version of the following library:''''' Microsoft ActiveX Data Objects LibraryDim conn As ADODB.ConnectionDim rst As ADODB.RecordsetDim Nsql As String, Njoin As String, Ncriteria As StringDim NewBook As WorkbookDim i As Integer' Create the Connection object.Set conn = New ADODB.ConnectionWith conn' Set the OleDB provider for the connection..Provider = "Microsoft.JET.OLEDB.4.0"' Open a connection to Northwind.mdb..Open Application.Path & "\samples\northwind.mdb"End WithNsql = "SELECT DISTINCTROW Categories.CategoryName, Products.ProductName, Products.QuantityPerUnit, Products.UnitPrice "Njoin = "FROM Categories INNER JOIN Products ON Categories.CategoryID = Products.CategoryID "Ncriteria = "WHERE ((([Products].Discontinued)=No) AND (([Products].UnitsInStock)>20));"' Create a new Recordset Object.Set rst = New ADODB.RecordsetWith rst' Connect this recordset to the previously opened connection..ActiveConnection = conn' Retrieve all records from the Customer table..Open Nsql & Njoin & Ncriteria, conn, adOpenDynamic, adLockBatchOptimisticEnd With' Add a new worksheet to this workbookSet NewBook = Workbooks.Add' Loop through all of the fields, returning the field names to the worksheet.For i = 0 To rst.Fields.Count - 1NewBook.Sheets(1).Range("a1").Offset(0, i).Value = rst.Fields(i).NameNext i' Copy the recordset to the new worksheet.NewBook.Sheets(1).Range("a2").CopyFromRecordset rst' Close the recordset.Set rst = Nothing' Close the Connection.conn.CloseEnd SubList Tables in a DatabaseThis example lists the tables in the Microsoft Access database Northwind.mdb. This example requires that the Northwind.mdb file is installed on your computer.Sub ListTables()''' NOTE: This subroutine requires that you reference the'' latest version of the following library:''''' Microsoft ActiveX Data Objects LibraryDim conn As ADODB.ConnectionDim rst As ADODB.Recordset' Create the Connection object.Set conn = New ADODB.ConnectionWith conn' Set the OleDB provider for the connection..Provider = "Microsoft.JET.OLEDB.4.0"' Open a connection to Northwind.mdb..Open Application.Path & "\samples\northwind.mdb"End WithSet rst = conn.OpenSchema(adSchemaTables)While Not rst.EOFIf rst.Fields("TABLE_TYPE") "VIEW" ThenMsgBox rst.Fields("TABLE_NAME")End Ifrst.MoveNextWendSet rst = Nothingconn.CloseEnd SubList Fields in a TableThis example lists the fileds in the Customer.dbf dBase file. For this example, you must have the Microsoft dBase driver installed. You must also have the Customer.dbf file installed.Sub ListFields()''' NOTE: This subroutine requires that you reference the'' latest version of the following library:''''' Microsoft ActiveX Data Objects LibraryDim conn As ADODB.ConnectionDim rst As ADODB.RecordsetDim fld As ADODB.Field' Create the Connection object.Set conn = New ADODB.ConnectionWith conn' Set the OleDB provider for the connection..Provider = "Microsoft.JET.OLEDB.4.0"' Open a connection to Northwind.mdb..Open Application.Path & "\samples\northwind.mdb"End WithSet rst = New ADODB.RecordsetWith rst.ActiveConnection = conn.Open "SELECT * FROM customers"End WithFor Each fld In rst.FieldsMsgBox fld.NameNext fldSet rst = Nothingconn.CloseEnd SubAdd Data to a New Table in an Access DatabaseThis example adds a new table to the Northwind.mdb database. The subroutine then populates the table with data located in cells S1:V30 of this worksheet. This example requires that the Northwind.mdb file is installed on your computer.Sub CreateTable()''' NOTE: This subroutine requires that you reference the'' latest version of the following library:''''' Microsoft ActiveX Data Objects Library''' Microsoft ADO Ext. 2.1 for DDL and Security' The first four Dim lines are simultaneously declaring and' creating new objects. You can use this syntax, or you can' use the Set statement to create the objects.Dim cat As New ADOX.CatalogDim tbl As New ADOX.TableDim conn As New ADODB.ConnectionDim rst As New ADODB.RecordsetDim looprange As RangeDim currcell As RangeWith conn' Set the OleDB provider for the connection..Provider = "Microsoft.JET.OLEDB.4.0"' Open a connection to Northwind.mdb..Open Application.Path & "\samples\northwind.mdb"End With' Set the active connection for the Catalog object.cat.ActiveConnection = connWith tbl' Name the new table..Name = "SalesTable"' Name the columns for the new table.With .Columns.Append "Name".Append "Region".Append "Product"' The Sales column must be the Currency data type..Append "Sales", adCurrencyEnd WithEnd With' Add the table to the database.cat.Tables.Append tblWith rst.ActiveConnection = conn' Open the new table. The LockType argument of the' Open method must be set to adLockOptimistic in order' add records to the table..Open "SalesTable", LockType:=adLockOptimisticEnd With' Set the range that contains the records to add to the database.Set looprange = Range("s2", Range("s2").End(xlDown))' Loop through the information on the worksheet.For Each currcell In looprangeWith rst' Add a new record..AddNew' Add information to the correct fields..Fields("Name").Value = currcell.Value.Fields("Region").Value = currcell.Offset(0, 1).Value.Fields("Product").Value = currcell.Offset(0, 2).Value.Fields("Sales").Value = currcell.Offset(0, 3).Value' Write the new record to the database..UpdateEnd WithNext currcellrst.CloseSet tbl = NothingSet cat = Nothingconn.CloseEnd SubTrapping ADO ErrorsThis example illustrates how to trap, then return relevant information about an error that you may receive when running ADO code.Sub Trap_ADO_Errors()''' NOTE: This subroutine requires that you reference the'' latest version of the following library:''''' Microsoft ActiveX Data Objects LibraryDim conn As ADODB.ConnectionDim tbar As String, msg As String' Go to the section labeled "ErrorHandler:" when an' error occurs.On Error GoTo ErrorHandler' Create the Connection object.Set conn = New ADODB.ConnectionWith conn' Set the OleDB provider for the connection..Provider = "Microsoft.JET.OLEDB.4.0"' Open a connection to abc.mdb..Open "C:\abc.mdb"End With' Exit the subroutine if no error are encountered.Exit SubErrorHandler:' Refer to the Errors collection of the Connection' object.With conn.Errors(0)' The title bar will contain the source of the' error.tbar = .Source' The message will contain the error number and' the text of the error message.msg = "Error Number: " & .Number & _WorksheetFunction.Rept(Chr(13), 2) & _.Description' Display the error information.MsgBox prompt:=msg, Title:=tbarEnd WithEnd Sub

Goto MS_Access Automation CodeGoto MS_Word Automation CodeGoto MS_Powerpoint Automation CodeGoto MS_Outlook Automation CodeGoto Retrieve ISAM Data Example Sample CodeGoto Retrieve Access Data Example Sample CodeGoto List Tables Example Sample CodeGoto List Fields Example Sample CodeGoto Create Table Example Sample CodeGoto Trap ADO Errors Example Sample Code

Return To Contents Page