D
Duncan McNiven
I am using Delphi (2009) to write my first add-in for Outlook (2007). I want to add a custom method to my add-in's class and call it from an Outlook macro, but I can't get it working.
My method in my Delphi class is public. It looks like this:
procedure MyMethod(const Index : integer); safecall;
I tried to call it from Outlook like this:
Sub Test_02()
Application.COMAddIns.Item("<My Add In>").Object.MyMethod (3)
End Sub
I get:
Run-time error '91':
Object variable or With block variable not set
I then tried:
Sub Test_01()
Dim MyAddIn As Office.COMAddIn
Set MyAddIn = Application.COMAddIns.Item("<My Add In>")
If Not (MyAddIn Is Nothing) Then
If MyAddIn.Connect = True Then
Dim MyObject As Object
Set MyObject = MyAddIn.Object
If Not (MyObject Is Nothing) Then
MyObject.MyMethod (3)
End If
End If
End If
End Sub
This fails because MyObject is Nothing, so the call to MyObject.MyMethod doesn't happen.
My next attempt was:
Sub Test_03()
Dim MyObject As Object
Set MyObject = CreateObject("<My Add In>")
If Not (MyObject Is Nothing) Then
MyObject.DoNewMail (Null)
End If
End Sub
The DoNewMail method is the handler for Outlooks OnNewMail event, and is called correctly when new mail is received. I guess CreateObject would create a new object rather than use the one already instantiated in my Add-In, which is not what I want, but I was trying everything at this stage. Anyway, this attempt failed with:
Run-time error '438':
Object doesn't support this property or method
So where am I going wrong?
My method in my Delphi class is public. It looks like this:
procedure MyMethod(const Index : integer); safecall;
I tried to call it from Outlook like this:
Sub Test_02()
Application.COMAddIns.Item("<My Add In>").Object.MyMethod (3)
End Sub
I get:
Run-time error '91':
Object variable or With block variable not set
I then tried:
Sub Test_01()
Dim MyAddIn As Office.COMAddIn
Set MyAddIn = Application.COMAddIns.Item("<My Add In>")
If Not (MyAddIn Is Nothing) Then
If MyAddIn.Connect = True Then
Dim MyObject As Object
Set MyObject = MyAddIn.Object
If Not (MyObject Is Nothing) Then
MyObject.MyMethod (3)
End If
End If
End If
End Sub
This fails because MyObject is Nothing, so the call to MyObject.MyMethod doesn't happen.
My next attempt was:
Sub Test_03()
Dim MyObject As Object
Set MyObject = CreateObject("<My Add In>")
If Not (MyObject Is Nothing) Then
MyObject.DoNewMail (Null)
End If
End Sub
The DoNewMail method is the handler for Outlooks OnNewMail event, and is called correctly when new mail is received. I guess CreateObject would create a new object rather than use the one already instantiated in my Add-In, which is not what I want, but I was trying everything at this stage. Anyway, this attempt failed with:
Run-time error '438':
Object doesn't support this property or method
So where am I going wrong?