Here are some key points to keep in mind:
- First, you are going to create an object that is a handle to Microsoft Word. Microsoft Windows will actually open Word as though you clicked on it from the start menu.
- Next, you'll need to know what you can call using this object, because you won't receive any auto-complete hints. An easy way to find out what to call is to open Microsoft Word and create a macro. You can then look at the macro to see what it did. To do so, open a Microsoft Word document and click Tools -> Macros -> Record new macro. In practice, there's more to it than that because Visual Basic for Applications (VBA) macros often use named parameters, instead of positional parameters.
- Recorded VBA macros include all possible parameters for most calls, even when specifying default values. This is helpful since it allows you to use less-complicated calls from LotusScript.
Here is an example of a Microsoft Word interoperability agent. My first step was to write some LotusScript code to open Microsoft Word, and then make it visible:
Dim wApp As Variant Set wApp = CreateObject("Word.application") wApp.Visible = True
Note: If the Microsoft Word application isn't visible when the code terminates -- either as requested or through an error -- an instance of Word will remain in memory. To close it, you must go to the processes list in task manager. If I didn't know which type of object to request, I could have looked on the "References" tab next to the agent's code window. This allows you to browse through all the COM objects registered on your system.
I went into Microsoft Word and recorded a macro while I created a blank document containing a table. The macro included the following code:
Documents.Add Template:="Normal", NewTemplate:=False, DocumentType:=0 ActiveDocument.Tables.Add Range:= Selection.Range, NumRows:=2, NumColumns:= _ 5, DefaultTableBehavior:=w dWord9TableBehavior, AutoFitBehavior:= _ wdAutoFitFixed
Next, I migrated the code to LotusScript. The first line opens the blank document with the default template. This template could have been omitted. I didn't include the other parameters:
The next line is trickier. Because I'm unfamiliar with Microsoft Word's object model, I had to guess. I'm not concerned with the specifics, so I assumed that there would be an override -- taking only the number of rows and columns. This didn't work, so I included the range parameter again. This also was unsuccessful; therefore, I searched the Web for Word COM tables.add.
My search generated a Microsoft page that described the tables.add method. This confirmed that the range parameter is required. After following the link to the range method page, I found that it takes two parameters. I used the following code, which worked, but created the 3 x 5 tables without any cell borders:
Call xlApp.ActiveDocument.Tables. Add(xlapp.documents(1).range(0,0),3, 5)
I didn't have a Microsoft Word example handy, so I used Excel instead. This should give you a general idea on the method.
Do you have comments on this Ask the Expert Q&A? Let us know.
Related information from SearchDomino.com:
Dig Deeper on LotusScript
Related Q&A from Cregg Hardwick
A user wants to know if it's possible for LotusScript to read an attachment in a Notes document without first detaching it. Find out our expert's ... Continue Reading
Learn about different options using LotusScript code and Formula language to customize the principal field of outgoing Lotus Notes email messages. Continue Reading
Discover some LotusScript code that can be implemented to forward Lotus Notes email messages at specific times. Continue Reading