Class
OLEObject
Description
Used to automate COM servers. Use the WordApplication, ExcelApplication, and PowerPointApplication classes to automate Microsoft Office applications. OLE is supported on the Windows platform only.
Methods
Name |
Parameters |
Returns |
Shared |
---|---|---|---|
disp As COM.IDispatch |
|||
objToCopy As OLEObject |
|||
programID As String |
|||
name As String |
|||
name As String |
|||
PropertyName As String |
|||
Events
Name |
Parameters |
Returns |
---|---|---|
Property descriptions
OLEObject.Handle
Handle As Ptr
Returns a pointer to the IDispatch interface that is being used.
Method descriptions
OLEObject.Constructor
Constructor(disp As COM.IDispatch)
Note
Constructors are special methods called when you create an object with the New keyword and pass in the parameters above.
Creates an OLEObject based upon the COM.IDispatch interface passed.
Constructor(objToCopy as OLEObject)
Note
Constructors are special methods called when you create an object with the New keyword and pass in the parameters above.
Creates a copy of the OLEObject.
Constructor(programID as String)
Note
Constructors are special methods called when you create an object with the New keyword and pass in the parameters above.
Creates a new OLEObject using the passed programID is the COM server's program ID as stored in the registry. It can also be the Class ID (in curly braces). This constructor will try to find a previous instance of the COM server if it is running. Otherwise, it will create a new instance.
Constructor(programID as String, newInstance as Boolean)
Note
Constructors are special methods called when you create an object with the New keyword and pass in the parameters above.
Creates a new OLEObject using the passed ProgramID is the COM server's program ID as stored in the registry. The NewInstance parameter specifies whether to create a new instance of the COM server (True) or try to use an existing one if it is running (False).
The following example automates Internet Explorer.
Try
Var obj As OLEObject
Var v As Variant
Var params(1) As Variant
obj = New OLEObject("InternetExplorer.Application", True)
obj.Value("Visible") = True
params(1) = "https://www.xojo.com"
v = obj.Invoke("Navigate", params)
Catch err As OLEException
MessageBox(err.Message)
End Try
OLEObject.Invoke
Invoke(name As String)
Invokes the method name of the COM server.
Invoke(name As String) As Variant
Invokes the method name of the COM server. The value returned is the value returned by the function invoked.
Invoke(nameOfFunction As String, parameters() As Variant)
Invokes the method nameOfFunction of the COM server, and passes the array of parameters to the method.
Invoke(nameOfFunction As String, parameters() As Variant) As Variant
Invokes the method nameOfFunction of the COM server, and passes the array of parameters to the method. The value returned is the value returned by the function invoked.
Make sure to correctly dimension the array, as this will determine the number of parameters that get passed to the method. The first parameter begins at 1.
OLEObject.TypeName
TypeName As String
Returns a String that provides Variant subtype information about the object.
OLEObject.Value
Value(PropertyName As String) As Variant
Used to get or set a value of the object.
The parameter PropertyName is the name of the property to assign a new value to or to get the value. The value property can optionally take a list of properties when assigning a value, i.e.,
OLEObject.Value(NameOfProperty As String, params() As Variant) = value
If the optional parameter ByValue is True, property assignment is by value.
OLEObject.ValueArray
ValueArray(name As String, parameters() As Variant) As Variant()
Used to get or set a value of the object.
The Name parameter is the name of the property to assign a new value to or to get the value. ValueArray can accept a list of parameters to pass to the automation object. The parameters array is assumed to be 1-based.
OLEObject.ValueArray2D
ValueArray2D(name As String, parameters() As Variant) As Variant()
Used to get or set a value of the object for two-dimensional arrays.
The Name parameter is the name of the property to assign a new value to or to get the value. ValueArray2D can accept a list of parameters to pass to the automation object. The Parameters array is assumed to be 1-based.
Event descriptions
OLEObject.EventTriggered
EventTriggered(eventName As String, parameters() As Variant) As Variant
Occurs when the OLEObject receives an event from the automation server. The event name is passed as the first parameter and the parameters for the event are passed as an array of variants.
Notes
By default, OLEObject will make the property assignment by value. If it encounters an error it will try by reference if the property is an object. If the optional ByValue parameter is True, the property assignment is by value (i.e., a copy); otherwise the assignment is by reference (i.e., a pointer copy). In Visual Basic, an assignment by reference is done using the Set command, but since Xojo doesn't provide that feature, you will need to use the ByValue parameter when you know the assignment should be by reference.
Currency types are treated as String to preserve precision.
Since OLEObject uses Operator Lookup, you can also use dot notation to access OLEProperties.
Sample code
The following code automates Internet Explorer.
Try
Var obj As OLEObject
Var v As Variant
Var params(1) As Variant
obj = New OLEObject("InternetExplorer.Application", True)
obj.Value("Visible") = True
params(1) = "http://www.wikipedia.org/"
v = obj.invoke("Navigate", params)
Catch err As OLEException
MessageBox(err.Message)
End Try
The OLEObject class supports setting indexed properties. For example the Word.Document.Compatibility property is an indexed property. Here is an example.
Var word As New OLEObject("Word.Application")
Var doc As OLEObject
word.Visible = True
doc = word.Documents.Add
Var params(1) As Variant
params(1) = Office.wdNoTabHangIndent
doc.Value("Compatibility", params) = True
' or
' doc.Compatibility(Office.wdNoTabHangIndent)=True
The following code creates a copy of the passed OLEObject using the copy constructor and opens a new Word document.
Var word As New OLEObject("word.Application")
Var wordCopy As OLEObject
wordCopy = New OLEObject(word)
wordCopy.Visible = True
wordCopy.Documents.Add
This code automates Microsoft Word.
Try
Var obj As OLEObject
Var docs As OLEObject
Var doc As OLEObject
Var range As OLEObject
Var v As Variant
obj = New OLEObject("Word.Application", True)
' make it visible
obj.Value("Visible") = True
v = obj.Value("Documents")
If v.ObjectValue IsA OLEObject Then
docs = OLEObject(v.ObjectValue)
v = docs.Invoke("Add")
If v.ObjectValue IsA OLEObject Then
doc = OLEObject(v.ObjectValue)
v = doc.Invoke("Range")
If v.ObjectValue IsA OLEObject Then
range = OLEObject(v.ObjectValue)
range.Value("Text") = "This is a sentence."
End If
End If
End If
Catch err As OLEException
MessageBox(err.Message)
End try
This code shows how to get the MoviePlayer CurrentPosition using both dot notation and function calls:
Var o As OLEObject = MoviePlayer1.MovieController
Var v As Variant = o.Value("Controls")
If v IsA OLEObject Then
Var pos As Double = OLEObject(v).Value("CurrentPosition")
End If
And with dot notation:
Try
Var pos As Double = MoviePlayer1.MovieController.Controls.CurrentPosition
Catch e As OLEException
MessageBox("OLE access error.")
End Try
Compatibility
Desktop projects on the Windows operating system.
See also
Object parent class; ExcelApplication, Office, DesktopXAMLContainer, OLEParameter, PowerPointApplication, WordApplication classes; OLEException error.