OLE Automation

A Windows application that supports OLE Automation provides a set of product classes, each with a set of properties and methods. You can create and manipulate objects in such an application much as you do in the HCL software application from which you are running LotusScript®.

For example, Microsoft Visio is a Windows drawing package that supports OLE automation. The following example builds an array of strings. Each string contains the name and job title of a manager on a Visio organizational chart.

In the module declarations, declare a dynamic one-dimensional array of strings:

Dim manager() As String

The GetManagers sub uses the CreateObject function to create an instance of the Visio Application class, which runs a new instance of the Visio program (VISIO.EXE). To get an instance that is already running, use the GetObject function.

A Visio Application object contains a collection of documents. Each document contains a collection of pages, and each page contains a collection of objects. Visio provides a class for each of these: Application, Documents, Document, Pages, Page, Shapes, and Shape.

GetManagers uses the Documents class Open method to open a drawing file, a Document object. The sub then cycles through the pages in the document and the objects on each page. For each object with "Manager" in its Name property, the sub places the Text property value in a new element of the array. The Text property for a Manager object contains a manager's name and job title.

Sub GetManagers
   ' Use Variant variables for objects
   Dim appVisioV As Variant, docObjV As Variant
   Dim shapesObjV As Variant, shapeObjV As Variant
   Dim orgchart As String
   Dim iPage As Integer, iShape As Integer, _
      iManager As Integer
   Set appVisioV = CreateObject("visio.application")
   orgchart$ = "c:\visio\drawings\orgchart.vsd"
   Set docObjV = appVisioV.Documents.Open(orgchart$)
   For iPage% = 1 To docObjV.Pages.Count
      Set shapesObjV = docObjV.Pages.Item(iPage%).Shapes
      For iShape% = 1 To shapesObjV.Count
         Set shapeObjV = shapesObjV.Item(iShape%)
         If Instr(shapeObjV.Name, "Manager") > 0 Then
            iManager% = iManager% + 1
            ReDim Preserve manager$(1 To iManager%)
            manager$(iManager%) = shapeObjV.Text
         End If
      Next iShape%
   Next iPage%
   appVisioV.Quit
End Sub

To display the contents of the array, use:

For i% = 1 To Ubound(manager$)
      Print manager$(i%)
Next

For information about Visio classes, including their properties and methods, see the Visio documentation.