Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
Discussion GroupsFormsForms ProgrammingQueriesModules / DAO / VBAReports / PrintingMacrosDatabase DesignSecurityConversionImporting / LinkingSQL Server / ADPMultiuser / NetworkingReplicationSetup / ConfigurationDeveloper ToolkitsActiveX ControlsNew UsersGeneral 1General 2
Access DirectoryToolsTutorialsUser Groups
Related Topics
SQL ServerOther DB ProductsMS OfficeMore Topics ...

MS Access Forum / Modules / DAO / VBA / November 2006

Tip: Looking for answers? Try searching our database.

Can Access2003 read outlook calendar?

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
StuJol - 25 Nov 2006 01:16 GMT
i want my access2003 database to be able to read outlook items in the outlook
calendar. For example, when i open a form, a label will display all items
within the current week.

If this is possible as i suspect it is because i know you can read
reminders, can some pleasepoint me in the right direction.

Many thanks
Tom Wickerath - 25 Nov 2006 09:16 GMT
Hi StuJol,

See if this article is helpful:

    Sample Procedure to Link a Microsoft Outlook Folder
    http://support.microsoft.com/kb/209946

Tom Wickerath
Microsoft Access MVP

http://www.access.qbuilt.com/html/expert_contributors.html
http://www.access.qbuilt.com/html/search.html
__________________________________________

> i want my access2003 database to be able to read outlook items in the outlook
> calendar. For example, when i open a form, a label will display all items
[quoted text clipped - 4 lines]
>
> Many thanks
StuJol - 25 Nov 2006 13:22 GMT
Thanks for the response tom, however im having trouble with the example code.
Are you able to offer any more assistance?

> Hi StuJol,
>
[quoted text clipped - 18 lines]
> >
> > Many thanks
Tom Wickerath - 25 Nov 2006 21:15 GMT
Hi StuJol,

What kind of trouble are you having?


Tom Wickerath
Microsoft Access MVP

http://www.access.qbuilt.com/html/expert_contributors.html
http://www.access.qbuilt.com/html/search.html
__________________________________________

> Thanks for the response tom, however im having trouble with the example code.
> Are you able to offer any more assistance?
StuJol - 25 Nov 2006 13:24 GMT
Tom,

Im playing around with the following code, which copys all my outlook
contacts into a access table. can you see a way to modify this code to add
all appointments to a table?

Private Sub Command323_Click()
   
  ' This code is based in Microsoft Access.

  ' Set up DAO objects (uses existing "tblContacts" table)
  Dim rst As DAO.Recordset
  Set rst = CurrentDb.OpenRecordset("tblContacts")

  ' Set up Outlook objects.
  Dim oOL As Outlook.Application
  Dim oNS As Outlook.NameSpace
  Dim oFolder As Outlook.MAPIFolder
  Dim c As Outlook.AppointmentItem
  Dim objItems As Outlook.Items
  Dim Prop As Outlook.UserProperty

  Set oNS = Outlook.Application.GetNamespace("MAPI")
  Set oFolder = oNS.GetDefaultFolder(olFolderCalendar)
  Set objItems = oFolder.Items
 
  iNumContacts = objItems.Count
  Debug.Print iNumContacts
  If iNumContacts <> 0 Then
     For I = 1 To iNumContacts
        If TypeName(objItems(I)) = "ContactItem" Then
           Set c = objItems(I)
           rst.AddNew
           rst!FirstName = c.FirstName
           rst!LastName = c.LastName
           rst!Address = c.BusinessAddressStreet
           rst!City = c.BusinessAddressCity
           rst!State = c.BusinessAddressState
           rst!Zip_Code = c.BusinessAddressPostalCode
           ' Custom Outlook properties would look like this:
           ' rst!AccessFieldName = c.UserProperties("OutlookPropertyName")
           rst.Update
        End If
     Next I
     rst.Close
     MsgBox "Finished."
  Else
     MsgBox "No contacts to export."
  End If
               
End Sub

> Hi StuJol,
>
[quoted text clipped - 18 lines]
> >
> > Many thanks
Tom Wickerath - 26 Nov 2006 07:45 GMT
Hi StuJol,

An easier way to get both contact and appointment information is to simply
create linked tables, using:

   File > Get External Data > Link Tables...

Pick Outlook() using the Files of Type dropdown list. No code required!  
However, on my PC, I had to initiate a Detect and Repair operation from the
Help menu, before the wizard would work without throwing an error. At this
time, I'm not too inclined to want to spend the time modifying the code to
get appointment information, since all of the information is available using
linked tables.

Regarding the code that you presented below, I have several comments:

1.) I recommend always documenting the source of your code. In this case,
adding a comment such as this to the procedure will be helpful at a later
date, if you need to revisit this code:

    How to Programmatically Export Items to Microsoft Access
    http://support.microsoft.com/kb/253794/

2.) I do not like the fourth bullet shown, which reads as follows:

    "The code below assumes that the Access fields are set to
      Allow Zero-Length Values."

See Access MVP Allen Browne's page on this topic:

     Problem properties
     http://allenbrowne.com/bug-09.html

One modification that works is to use the following. Note: I substituted a
With rst...End With construct, to avoid having to repeat "rst" several times:

With rst
   .AddNew
       If Len(c.FirstName) > 0 Then !FirstName = c.FirstName
       If Len(c.LastName) > 0 Then !LastName = c.LastName
       If Len(c.HomeAddress) > 0 Then !Address = c.BusinessAddressStreet
       If Len(c.HomeAddressCity) > 0 Then !City = c.BusinessAddressCity
       If Len(c.HomeAddressState) > 0 Then !State = c.BusinessAddressState
       If Len(c.HomeAddressPostalCode) > 0 Then _
             !Zip_Code = c.BusinessAddressPostalCode
   .Update
End With

3.) You should configure the VBE (Visual Basic Editor) on your PC so that
you will always get those two very important words as the second line of
every code module:

    Always Use Option Explicit
    http://www.access.qbuilt.com/html/gem_tips.html#VBEOptions

The author of the KB article obviously did not have his/her PC properly
configured. Otherwise, surely they would have discovered that they had not
declared two variables, "i" and "iNumContacts".

4.) The author of the KB article included "rst.Close" to close the
recordset, but failed to destroy this object variable by setting it to
nothing. One should provide a proper error handler where such objects are
destroyed, even in the event of an error. The code, as written, could error
out and still leave the rst variable in memory (ie. a memory leak). Also,
failing to properly close and destroy recordsets can cause database bloat.
Here is my suggested revision to the code shown in the KB article. Note: I
removed some indenting to prevent line wrap:

Private Sub cmdGetContacts_Click()
On Error GoTo ProcError

  ' Set up DAO objects (uses existing "tblContacts" table)
  Dim rst As DAO.Recordset
  Set rst = CurrentDb.OpenRecordset("tblContacts")

  ' Set up Outlook objects.
  Dim oOL As Outlook.Application
  Dim oNS As Outlook.NameSpace
  Dim oFolder As Outlook.MAPIFolder
  Dim c As Outlook.ContactItem
  Dim objItems As Outlook.Items
  Dim Prop As Outlook.UserProperty
  Dim i As Integer
  Dim iNumContacts As Integer

  Set oNS = Outlook.Application.GetNamespace("MAPI")
  Set oFolder = oNS.GetDefaultFolder(olFolderContacts)
  Set objItems = oFolder.Items
 
  iNumContacts = objItems.count
  Debug.Print iNumContacts
  If iNumContacts <> 0 Then
     For i = 1 To iNumContacts
        Debug.Print i, TypeName(objItems(i)), objItems(i)
       
        If TypeName(objItems(i)) = "ContactItem" Then
           Set c = objItems(i)
               With rst
                   .AddNew
       If Len(c.FirstName) > 0 Then !FirstName = c.FirstName
       If Len(c.LastName) > 0 Then !LastName = c.LastName
       If Len(c.HomeAddress) > 0 Then !Address = c.BusinessAddressStreet
       If Len(c.HomeAddressCity) > 0 Then !City = c.BusinessAddressCity
       If Len(c.HomeAddressState) > 0 Then !State = c.BusinessAddressState
       If Len(c.HomeAddressPostalCode) > 0 Then _
             !Zip_Code = c.BusinessAddressPostalCode

                   .Update
               End With

        End If
       
     Next i
     MsgBox "Finished."
  Else
     MsgBox "No contacts to export."
  End If

ExitProc:
   'Cleanup
   On Error Resume Next
   rst.Close: Set rst = Nothing
   Exit Sub
ProcError:
   MsgBox "Error " & Err.Number & ": " & Err.Description, _
         vbCritical, "Error in procedure cmdGetContacts_Click..."
   Resume ExitProc
   Resume
End Sub

Tom Wickerath
Microsoft Access MVP

http://www.access.qbuilt.com/html/expert_contributors.html
http://www.access.qbuilt.com/html/search.html
__________________________________________

> Tom,
>
[quoted text clipped - 47 lines]
>                
> End Sub
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.