hgj1357
asked on
outlook 2013 ms access
I was using the following code within MS Access 2003 (XP) to pipe contact data into Outlook. Worked great with Outlook 2003 and Outlook XP. It does not work with Outlook 2013. Is there an easy fix for this, or is it more involved?
Code:
========================== ========
Set OlkApp = New Outlook.Application
With OlkApp
Set olkCon = .CreateItem(Outlook.OlItem Type.olCon tactItem)
With olkCon
.BusinessTelephoneNumber = strBusinessTelephonenumber
.HomeTelephonenumber = strHomeTelephonenumber
.MobileTelephoneNumber = strMobileTelephonenumber
.BusinessFaxNumber = strBusinessFaxNumber
.Email1Address = strEmail1Address
.JobTitle = strJobTitle
.CompanyName = strCompanyName
.FirstName = strFirstname
.LastName = strLastname
.BusinessAddressStreet = strBusinessAddressStreet
.BusinessAddressCity = strBusinessAddressCity
.BusinessAddressState = strBusinessAddressState
.BusinessAddressPostalCode = strBusinessAddressPostalCo de
Forms![Main F]![MainSub].Form![Command 178].SetFo cus
Forms![Main F]![MainSub].Form![Contact s_Corr_Pic k].Visible = False
DoCmd.Requery
olkCon.Save
End With
End With
' Clean up.
Set OlkApp = Nothing
Set olkCon = Nothing
========================== ========== =========
Fails here: " Set OlkApp = New Outlook.Application"
Code:
==========================
Set OlkApp = New Outlook.Application
With OlkApp
Set olkCon = .CreateItem(Outlook.OlItem
With olkCon
.BusinessTelephoneNumber = strBusinessTelephonenumber
.HomeTelephonenumber = strHomeTelephonenumber
.MobileTelephoneNumber = strMobileTelephonenumber
.BusinessFaxNumber = strBusinessFaxNumber
.Email1Address = strEmail1Address
.JobTitle = strJobTitle
.CompanyName = strCompanyName
.FirstName = strFirstname
.LastName = strLastname
.BusinessAddressStreet = strBusinessAddressStreet
.BusinessAddressCity = strBusinessAddressCity
.BusinessAddressState = strBusinessAddressState
.BusinessAddressPostalCode
Forms![Main F]![MainSub].Form![Command
Forms![Main F]![MainSub].Form![Contact
DoCmd.Requery
olkCon.Save
End With
End With
' Clean up.
Set OlkApp = Nothing
Set olkCon = Nothing
==========================
Fails here: " Set OlkApp = New Outlook.Application"
Are you sure Outlook is installed on the machine? If I'm not mistaken, I believe Outlook 2013/O365 can be entirely hosted "in the cloud", which would mean nothing is installed on the local machine.
A little more detail on what doesn't work would be helpful.
But the short answer is no, it should be workable.
Jim.
But the short answer is no, it should be workable.
Jim.
ASKER
Think so. i have an Outlook.exe in the "C:\Program Files\Microsoft Office 15\root\office15" folder and I have OST files in the \..\Local Settings\application data\microsoft\Outlook folder
ASKER
BTW. I'm still using Access 2003 NOT 2013
ASKER
Your using early binding and specifying Outlook XP. You need to update the reference or switch to late binding.
Jim.
Jim.
ASKER
I don't know what late binding is. How would I update the reference?
Late binding looks like this:
Dim objOL as Object
Set objOL = CreateObject("Outlook.Appl ication")
Rather than:
Set objOL = New Outlook.Application
You use the generic "object" designation when defining everything. What it is then is not determined until runtime rather than design time. In doing so, you don't tie yourself to a specific lib (version) of Outlook. However, there are a few downsides:
1. About a 15% performance penalty
2. You don't get intellisense when developing.
3. You can't use pre-defined constants, such as olFolderContacts.
To get around some of that, many developers will do early binding during development, then switch to late binding for deployment. You need to be careful when doing that however by always using the old version you plan to target for during development.
For example, you would not want to set a reference to Outlook 2013, and possibly use a new feature from that, then deploy to someone who would have Outlook 2002. Your code might break. Your generally OK though going the other direction.
Jim.
Dim objOL as Object
Set objOL = CreateObject("Outlook.Appl
Rather than:
Set objOL = New Outlook.Application
You use the generic "object" designation when defining everything. What it is then is not determined until runtime rather than design time. In doing so, you don't tie yourself to a specific lib (version) of Outlook. However, there are a few downsides:
1. About a 15% performance penalty
2. You don't get intellisense when developing.
3. You can't use pre-defined constants, such as olFolderContacts.
To get around some of that, many developers will do early binding during development, then switch to late binding for deployment. You need to be careful when doing that however by always using the old version you plan to target for during development.
For example, you would not want to set a reference to Outlook 2013, and possibly use a new feature from that, then deploy to someone who would have Outlook 2002. Your code might break. Your generally OK though going the other direction.
Jim.
ASKER
"Set objOL = CreateObject("Outlook.Appl ication")"
I get the same error. Can't create object.
I get the same error. Can't create object.
ASKER
Do I have the correct references? I attached a few posts ago.
Then as Scott indicated in his first post, Outlook must not be installed locally at all.
When you late bind, a reference is not required. It relies upon the registry to start up the last registered version of an application. Since your getting an error when you go to do that, then Outlook is not installed.
Jim.
When you late bind, a reference is not required. It relies upon the registry to start up the last registered version of an application. Since your getting an error when you go to do that, then Outlook is not installed.
Jim.
ASKER
This is what I launch to start outlook "C:\Program Files\Microsoft Office 15\root\office15\OUTLOOK.E XE" it IS installed locally.
ASKER
Do I have this entered correctly?
Dim OlkApp As Object
Dim olkCon As Object
Set OlkApp = CreateObject("Outlook.Appl ication")
With OlkApp
Set olkCon = .CreateItem(Outlook.OlItem Type.olCon tactItem)
With olkCon
.BusinessTelephoneNumber = strBusinessTelephonenumber
etc etc
.BusinessAddressPostalCode = strBusinessAddressPostalCo de
olkCon.Save
End With
End With
' Clean up.
Set OlkApp = Nothing
Set olkCon = Nothing
Dim OlkApp As Object
Dim olkCon As Object
Set OlkApp = CreateObject("Outlook.Appl
With OlkApp
Set olkCon = .CreateItem(Outlook.OlItem
With olkCon
.BusinessTelephoneNumber = strBusinessTelephonenumber
etc etc
.BusinessAddressPostalCode
olkCon.Save
End With
End With
' Clean up.
Set OlkApp = Nothing
Set olkCon = Nothing
It is correct except for:
Set olkCon = .CreateItem(Outlook.OlItem Type.olCon tactItem)
You can't use any constants in the obj lib at design time because with late binding, references are not known/checked until run-time. All the constant values can be found here:
http://msdn.microsoft.com/en-us/library/office/aa219371%28v=office.11%29.aspx
olContactItem has a value of 2, so:
Set olkCon = .CreateItem(2)
Right now, you'll get a compile error.
Make sure you've unchecked that outlook reference, do a compile, and make sure you have no errors. If you still get a can't create active-x object, then something on the machine is messed up.
Jim.
Set olkCon = .CreateItem(Outlook.OlItem
You can't use any constants in the obj lib at design time because with late binding, references are not known/checked until run-time. All the constant values can be found here:
http://msdn.microsoft.com/en-us/library/office/aa219371%28v=office.11%29.aspx
olContactItem has a value of 2, so:
Set olkCon = .CreateItem(2)
Right now, you'll get a compile error.
Make sure you've unchecked that outlook reference, do a compile, and make sure you have no errors. If you still get a can't create active-x object, then something on the machine is messed up.
Jim.
ASKER
OK.
The original code posted in the OP works 100%.
The problem was that I had:
MS Outlook 11.0 Object Library when I actually needed:
MS Outlook 15.0 Object Library
Simple fix and it works like a charm.
Thanks
The original code posted in the OP works 100%.
The problem was that I had:
MS Outlook 11.0 Object Library when I actually needed:
MS Outlook 15.0 Object Library
Simple fix and it works like a charm.
Thanks
ASKER
I've requested that this question be closed as follows:
Accepted answer: 0 points for hgj1357's comment #a40435008
for the following reason:
The problem was not he code but the reference.
Accepted answer: 0 points for hgj1357's comment #a40435008
for the following reason:
The problem was not he code but the reference.
That's exactly what I told you here:
https://www.experts-exchange.com/questions/28554522/outlook-2013-ms-access.html?anchorAnswerId=40433645#a40433645
Jim.
https://www.experts-exchange.com/questions/28554522/outlook-2013-ms-access.html?anchorAnswerId=40433645#a40433645
Jim.
Also note that by doing that, your code will now only work when Outlook 2013 is installed and no where else.
Your better off with late binding.
Jim.
Your better off with late binding.
Jim.
ASKER
I posted 5-6 references that I was using. You did state how to update my reference or what to update to. At least I didn't understand that's what you were getting at. I had no idea that "MS Outlook 11.0 Object Library" meant Outlook XP or that "MS Outlook 15.0 Object Library" exist.
The problem may be that I am too ignorant to understand some of what is posted here, that appears perfectly obvious to others.
The problem may be that I am too ignorant to understand some of what is posted here, that appears perfectly obvious to others.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
That's ok. I have an office of around 20. When we drop Outlook 2013 to go for something else, I will update everyone at the same time. The code runs slick as snot.
<<...slick as snot. >>
and here I thought I was the only one that used that saying (I've gotten some odd looks)<g>.
Jim.
and here I thought I was the only one that used that saying (I've gotten some odd looks)<g>.
Jim.