Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 63 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
63
Dung lượng
1,12 MB
Nội dung
356 Part II ✦ Collaborating and Integrating with Office 2003 For this chapter, you will need to make sure that several reference libraries are active. You may not initially have the following four references available (checked): Microsoft DAO 3.6 Object Library Microsoft ActiveX Data Objects Recordset 2.7 Library Microsoft Word 11.0 Object Library Microsoft Office 11.0 Object Library If these libraries aren’t active (or, visible at the top of the list), find them in the selection list box by scrolling to them, and then check them on. After you reference an application for Automation, you can explicitly dimension any object variable in that reference library. The New object coding help feature displays the available objects as you type, as shown in Figure 15-3. In addition, after you have selected the primary object and have entered a period (.), the help feature of Access enables you to select from the available class objects (see Figure 15-4). Late binding an object If you don’t explicitly reference an object library by using the References dialog box, you can set an object’s reference in code by first declaring a variable as an object and then using the Set command to create the object reference. This process is known as late binding. To create an object to reference Microsoft Word, for example, you can use the following code: Dim WordObj As Object Set WordObj = New Word.Application The Set command is discussed in the next section. If you create an object for an application that is not referenced, no drop-down help box, such as the ones shown in Figures 15-3 and 15-4, will display. Caution Tip 357Chapter 15 ✦ Exchanging Access Data with Office Applications Figure 15-3: When an Automation Server is referenced, its objects are immediately known by Visual Basic. Figure 15-4: The new drop-down syntax help of Visual Basic makes using referenced Automation Servers easy. Figure 15-3 shows the automatic drop-down box that appears immediately after you type the word new in the Dim statement. At this point, you can select one of the application object name types displayed (such as word) or enter a new application object name type that you define. Figure 15-4 shows the new drop-down box that appears when you type a period (.) after the object type word. This box helps you by displaying all known object types that can be associated with the particular primary object name. In this case, clicking the Application object type adds this to the word. portion of the object, thus word.application. 358 Part II ✦ Collaborating and Integrating with Office 2003 Creating an instance of an Automation object To perform an Automation operation, the operating system needs to start the application—if it isn’t already started—and obtain a reference, or handle, to it. This reference will be used to access the application. Most applications that support Automation, called Automation Servers, expose an Application object. The Application object exists at the top of the object application’s hierarchy and often contains many objects, as well. Using the New keyword to create a new instance The simplest (and most efficient) method to create any Automation object is to early bind the specific Automation Server reference library to the module by activating it, using the Tools_References menu. After you bind it, you can then create a new instance of the object by using the New keyword in Visual Basic. In the examples shown in Figure 15-3 and Figure 15-4, the variable MyWordObj is set to a new instance of Word’s Application object. If you have not bound the Microsoft Word 11.0 Object Library, you will need to do so or you will receive an error. If you don’t create a reference to the Automation Server by using the References dialog box, Visual Basic doesn’t recognize the object type and generates an error on compile. Every time you create an instance of an Automation Server by using the New keyword, a new instance of the application is started. If you don’t want to start a new instance of the application, use the GetObject function, which is discussed later in this chapter. Not all Automation Servers support the New keyword. Consult the specific Automation Server’s documentation to determine whether it supports the New keyword. If the New keyword is not supported, you need to use the CreateObject function, which is discussed in the following section, to create an instance of the Automation Server. Using the CreateObject function to create a new instance In addition to creating an instance of an object library by using the New keyword, you can create an instance of an object library by using the CreateObject function. You use the CreateObject function to create instances of object libraries that do not support the New keyword. To use the CreateObject function, first declare a variable of the type equal to the type of object that you want to create. Then use the Set statement in conjunction with the CreateObject function to set the variable to a new instance of the object library. For example, Microsoft Binder doesn’t support the New keyword, but it does provide an object library, so you can reference it by using the References dialog box. To early bind the object library of Binder, use the CreateObject function, as shown in the following code: Dim BinderObj As OfficeBinder.Binder Set BinderObj = CreateObject(“Office.Binder”) Caution 359Chapter 15 ✦ Exchanging Access Data with Office Applications In the preceding example, the object library name for Binder is OfficeBinder.Binde r, and the class instance is “Office.Binder.” You can view the names of object libraries and their available classes by using the Object Browser. You can create an object instance with the CreateObject function, which is late bound, by not declaring the object variable as a specific type. For example, the following code creates an instance of the Binder object by using late binding: Dim BinderObj As Object Set BinderObj = CreateObject(“Office.Binder”) If you have different versions of the same Automation Server on your computer, you can specify the version to use by adding it to the end of the class information. For example, the following code uses Office as the Automation Server: Dim BinderObj As Object Set BinderObj = CreateObject(“Word.Application.11”) Word 97 was the first true Automation Server, and like its predecessor, Word 2003 doesn’t require you to specify a version when creating instances of Word object libraries; Word is al- ways used, regardless of the other versions of Word on the computer. In fact, you get an error if you try to specify a version number. Therefore, you can use the following syntax instead: Set BinderObj = CreateObject(“Word.Application.11”) Getting an existing object instance As stated previously in this chapter, using the New keyword or the CreateObject function creates a new instance of the Automation Server. If you don’t want a new instance of the server created each time you create an object, use the GetObject function. The format of the GetObject function is as follows: Set objectvariable = GetObject([pathname][, class]) The pathname parameter is optional. To use this parameter, you specify a full path and file name to an existing file for use with the Automation Server. The specified document is then opened in the server application. Even if you omit the param- eter, you must still include the comma ( , ). The class parameter is the same parameter that’s used with the CreateObject function. See Table 15-1 for a list of some class arguments used in Microsoft Office. Note Note Tip Note 360 Part II ✦ Collaborating and Integrating with Office 2003 Table 15-1 Class Arguments for Common Office Components Component Class Argument Object Returned Access Access.Application Microsoft Access Application object Excel Excel.Application Microsoft Excel Application object Excel.Sheet Microsoft Excel Workbook object Excel.Chart Microsoft Excel Chart object Word Word.Application Microsoft Word Application object Word.Document Microsoft Word Document object For example, to work with an existing instance of Microsoft Word, but not a specific Word document, you can use the following code: Dim WordObj as Word.Application Set WordObj = GetObject(, “Word.Application”) To get an instance of an existing Word document called MyDoc.Doc, on your C: drive, you can use the following code: Dim WordObj as Word.Application Set WordObj = GetObject(“c:\MyDoc.Doc”, “Word.Application”) Of course, this code is always placed in a new function or sub that you declare in your module. Working with Automation objects After you have a valid instance of an Automation Server, you manipulate the object as though you were writing code within the application itself, using the exposed objects and their properties and methods. For example, when developing directly in Word, you can use the following code to change the directory that Word uses when opening an existing file: ChangeFileOpenDirectory “C:\My Documents\” Consult the development help for the Automation Server for specific information on the objects, properties, and methods available. Note 361Chapter 15 ✦ Exchanging Access Data with Office Applications Just as in Access, Word is implicitly using its Application object; the command ChangeFileOpenDirectory is really a method of the Application object. Using the following code, you create an instance of Word’s Application object and call the method of the object: Dim WordObj As New Word.Application WordObj.ChangeFileOpenDirectory “C:\My Documents\” When using Automation, you should avoid setting properties or calling methods that cause the Automation Server to ask for input from the user via a dialog box. When a dialog box is dis- played, the Automation code stops executing until the dialog box is closed. If the server applica- tion is minimized or behind other windows, the user may not even be aware that he or she needs to provide input, and therefore may assume that the application is locked up. Closing an instance of an Automation object Automation objects are closed when the Automation object variable goes out of scope. Such a closing, however, doesn’t necessarily free up all resources that are used by the object, so you should explicitly close the instance of the Automation object. You can close an Automation object by doing either of the following: • Using the Close or Quit method of the object (consult the specific Automation Server’s documentation for information on which method it supports) • Setting the object variable to nothing, as follows: Set WordObj = Nothing The best way to close an instance of an Automation object is to combine the two techniques, like this: WordObj.Quit Set WordObj = Nothing An Automation Example Using Word Perhaps the most common Office application that is used for Automation from a database application like Access is Word. Using Automation with Word, you can create letters that are tailored with information from databases. The following section demonstrates an example of merging information from an Access database to a letter in Word by using Automation and Word’s Bookmarks. Ordinarily, you create a merge document in Word and bring field contents in from the records of an Access database. This method relies on using Word’s MergeField, which is replaced by the contents of the Database field. It normally requires that you perform this action in Word—thus limiting the scope and capability of the function. For example, you will merge all records from the table that is being used rather than a single record. Tip 362 Part II ✦ Collaborating and Integrating with Office 2003 The following example uses the Orders form, which calls a module named WordIntegration. The WordIntegration module contains a function named MergetoWord() that uses the Word Thanks.dot template file. When you attempt to run this example, you must make sure that the path for the template in the Visual Basic code is the actual path in which the Thanks.dot template file resides. This path may vary from computer to computer. The items that are discussed in this Word Automation example include the following: ✦ Creating an instance of a Word object ✦ Making the instance of Word visible ✦ Creating a new document based on an existing template ✦ Using bookmarks to insert data ✦ Activating the instance of Word ✦ Moving the cursor in Word ✦ Closing the instance of the Word object without closing Word This example prints a thank-you letter for an order based on bookmarks in the thank you letter template (Thanks.dot). Figure 15-5 shows the data for customers; Figure 15-6 shows the data entry form for orders; Figure 15-7 shows the Thanks.dot template; and Figure 15-8 shows a completed merge letter. The bookmarks in Figure 15-7 are shown as grayed large I-beams (text insert). The bookmarks are normally not visible, but you can make them visible by selecting Tools_Options, selecting the View tab and going to the top section titled Show and then turning on the Bookmarks option by checking the option (third choice in the first column). The names won’t be visible—only the bookmark holders (locations) will be visible, as shown in Figure 15-7. The names and arrows in Figure 15-7 were placed using text boxes to show where the bookmark names are assigned. Note Figure 15-5: Customer data used in the following Automation example is entered on the Customers form. 363Chapter 15 ✦ Exchanging Access Data with Office Applications Figure 15-6: Each customer can have an unlimited number of orders. Thank-you letters are printed from the Orders form. Figure 15-7: The Thanks.dot template contains bookmarks where the merged data is to be inserted. Figure 15-8: After a successful merge, all the bookmarks have been replaced with their respective data. 364 Part II ✦ Collaborating and Integrating with Office 2003 If you click the Print Thank You Letter button in Access while Word is open with an existing document—which lacks the bookmark names specified in the code—the fields will simply be added to the text inside Word at the point where the cursor is currently sitting. When the user clicks the Print Thank You Letter button on the Orders form, Word generates a thank-you letter with all the pertinent information. The following code shows the MergetoWord function in its entirety so you can see in-depth how it works. Public Function MergetoWord() ‘ This method creates a new document in MS Word ‘ using Automation. On Error Resume Next Dim rsCust As Recordset, iTemp As Integer Dim WordObj As Word.Application Set rsCust = DBEngine(0).Databases(0).OpenRecordset(“Customers”, _ dbOpenTable) rsCust.Index = “PrimaryKey” rsCust.Seek “=”, Forms!Orders![CustomerNumber] If rsCust.NoMatch Then MsgBox “Invalid customer”, vbOKOnly Exit Function End If DoCmd.Hourglass True Set WordObj = GetObject(, “Word.Application”) If Err.Number <> 0 Then Set WordObj = CreateObject(“Word.Application”) End If WordObj.Visible = True WordObj.Documents.Add ‘ WARNING: ‘ Specify the correct drive and path to the ‘ file named thanks.dot in the line below. Template:=”G:\Access 11 Book\thanks.dot”, ‘ The above path and drive must be fixed NewTemplate:=False WordObj.Selection.Goto what:=wdGoToBookmark, Name:=”FullName” WordObj.Selection.TypeText rsCust![ContactName] WordObj.Selection.Goto what:=wdGoToBookmark, Name:=”CompanyName” WordObj.Selection.TypeText rsCust![CompanyName] WordObj.Selection.Goto what:=wdGoToBookmark, Name:=”Address1" WordObj.Selection.TypeText rsCust![Address1] WordObj.Selection.Goto what:=wdGoToBookmark, Name:=”Address2" Caution 365Chapter 15 ✦ Exchanging Access Data with Office Applications If IsNull(rsCust![Address2]) Then WordObj.Selection.TypeText “” Else WordObj.Selection.TypeText rsCust![Address2] End If WordObj.Selection.Goto what:=wdGoToBookmark, Name:=”City” WordObj.Selection.TypeText rsCust![City] WordObj.Selection.Goto what:=wdGoToBookmark, Name:=”State” WordObj.Selection.TypeText rsCust![State] WordObj.Selection.Goto what:=wdGoToBookmark, Name:=”Zipcode” WordObj.Selection.TypeText rsCust![Zipcode] WordObj.Selection.Goto what:=wdGoToBookmark, Name:=”PhoneNumber” WordObj.Selection.TypeText rsCust![PhoneNumber] WordObj.Selection.Goto what:=wdGoToBookmark, Name:=”NumOrdered” WordObj.Selection.TypeText Forms!Orders![Quantity] WordObj.Selection.Goto what:=wdGoToBookmark, Name:=”ProductOrdered” If Forms!Orders![Quantity] > 1 Then WordObj.Selection.TypeText Forms!Orders![Item] & “s” Else WordObj.Selection.TypeText Forms!Orders![Item] End If WordObj.Selection.Goto what:=wdGoToBookmark, Name:=”FName” iTemp = InStr(rsCust![ContactName], “ “) If iTemp > 0 Then WordObj.Selection.TypeText Left$(rsCust![ContactName], iTemp _ - 1) End If WordObj.Selection.Goto what:=wdGoToBookmark, Name:=”LetterName” WordObj.Selection.TypeText rsCust![ContactName] DoEvents WordObj.Activate WordObj.Selection.MoveUp wdLine, 6 ‘ Set the Word Object to nothing to free resources Set WordObj = Nothing DoCmd.Hourglass False Exit Function TemplateError: Set WordObj = Nothing Exit Function End Function Creating an instance of a Word object The first step in using Automation is to create an instance of an object. The sample creates an object instance with the following code: [...]... from moving, hiding, unhiding, resizing, or closing workbook windows • Password allows you to enter a password that users must have before they can unprotect the workbook 377 378 Part II ✦ Collaborating and Integrating with Office 2003 Figure 16-5: Protect elements of your workbook here 5 Protect and Share Workbook brings up a dialog box with only one box you can check, to prevent those sharing the... be decrypted in Step 2 Distributing Office Documents Group collaboration on documents requires the capability to save Office documents somewhere where they are available to everyone in the group Office provides plenty of help to that end; the latest development in this process is SharePoint Team Services (STS) 390 Part II ✦ Collaborating and Integrating with Office 2003 Even if your organization isn’t... 16-1 In This Chapter Resource sharing and security Collaborating in Word Sharing Excel workbooks Collaborating in PowerPoint Sharing Access databases Distributing Office documents 374 Part II ✦ Collaborating and Integrating with Office 2003 Figure 16-1: The Security dialog box in Word lets you restrict access to any file Three levels of file-sharing security are provided here: ✦ Password to open... Collaborating and Integrating with Office 2003 Sharing Access Databases The information in the typical Access database is valuable not only to people working in Access but also to people working in all other Office applications Typically, the Access database changes constantly as changes are made to the data in it; by drawing on it, network users can ensure that their own Office projects always contain... box, and then select the group you want to add him or her to; click the New button 7 Enter the name of the user and the personal ID — a string of four to 20 characters of your choice that Access combines with the user’s name to identify that user in the group 3 87 388 Part II ✦ Collaborating and Integrating with Office 2003 8 Click OK to create the new account 9 To create a new group, click the Groups... Security Options dialog box from the previous section) This opens the Document Protection task pane shown in Figure 16-2 Figure 16-2: Protect Word documents using this task pane 375 376 Part II ✦ Collaborating and Integrating with Office 2003 2 Under Formatting restrictions, check the checkbox if you want to limit formatting to a selection of styles, and then click Settings to open the Formatting Restrictions... permission to (they can read, edit, and save changes to the document but can’t print it) Click the Read and/or Change buttons to access e-mail addresses in your Address book 379 380 Part II ✦ Collaborating and Integrating with Office 2003 To fine-tune permission, click More Options This opens the dialog box shown in Figure 16-8 Figure 16-8: Fine-tune the permissions you grant with these controls At the... II ✦ Collaborating and Integrating with Office 2003 Collaborating in PowerPoint You can send your PowerPoint presentation to others for comment and revision, and then combine all the reviewed presentations into one for easy review Note The easiest way to send a presentation for review is to choose File_Mail Recipient (for Review) This feature, common to most Office applications, is discussed later... 15-11 You can stop recording events by clicking the Stop button (the button with a square on it) To pause recording events, click the other button, which is the Pause button 370 Part II ✦ Collaborating and Integrating with Office 2003 Figure 15-11: The Macro Recorder records all events until you click the Stop button After you have finished recording a macro, you can view the Visual Basic code created... an instance of an Automation object, you should always close the instance In this example, the following code is used to close the object instance: Set WordObj = Nothing 3 67 368 Part II ✦ Collaborating and Integrating with Office 2003 This code closes the object instance, but not the instance of Word as a running application In this example, the user needs access to the new document, so closing Word . available (checked): Microsoft DAO 3.6 Object Library Microsoft ActiveX Data Objects Recordset 2 .7 Library Microsoft Word 11.0 Object Library Microsoft Office 11.0 Object Library If these libraries aren’t. some class arguments used in Microsoft Office. Note Note Tip Note 360 Part II ✦ Collaborating and Integrating with Office 2003 Table 15-1 Class Arguments for Common Office Components Component. Returned Access Access.Application Microsoft Access Application object Excel Excel.Application Microsoft Excel Application object Excel.Sheet Microsoft Excel Workbook object Excel.Chart Microsoft Excel Chart