Microsoft KB Archive/230115

= OL98: Incorrect Count Property Using Recurring Appointments =

Article ID: 230115

Article Last Modified on 11/23/2006

-

APPLIES TO


 * Microsoft Outlook 98 Standard Edition

-



This article was previously published under Q230115





SYMPTOMS
You use the Count property to determine the number of appointments in a collection, but the number returned is 2147843647.



CAUSE
You used the IncludeRecurrences method in the Outlook object model to retrieve recurring appointments. If any of the recurring appointments do not have a specific end date, they will recur indefinitely. Therefore, the collection of appointments is infinitely large. 2,147,843,647 is the largest number of items a collection can contain. If you then use the Restrict method to limit the number of appointments to those within a certain date range, the Count property is not updated to reflect the number of items in the smaller collection.



RESOLUTION
The collection actually contains the correct number of appointments. Therefore, if you are looping through all of the appointments, do not use the For I = 1 to Items.Count approach. Instead, use the For..Each construct to loop through the items.

The following Automation subroutine illustrates both the problem and the approach to correct the problem. Be sure to set a reference to the Microsoft Outlook 98 Object Model before running this code.

Microsoft provides programming examples for illustration only, without warranty either expressed or implied, including, but not limited to, the implied warranties of merchantability and/or fitness for a particular purpose. This article assumes that you are familiar with the programming language being demonstrated and the tools used to create and debug procedures. Microsoft support professionals can help explain the functionality of a particular procedure, but they will not modify these examples to provide added functionality or construct procedures to meet your specific needs. If you have limited programming experience, you may want to contact a Microsoft Certified Partner or the Microsoft fee-based consulting line at (800) 936-5200. For more information about Microsoft Certified Partners, please visit the following Microsoft Web site:

https://partner.microsoft.com/global/30000104

For more information about the support options that are available and about how to contact Microsoft, visit the following Microsoft Web site:

http://support.microsoft.com/default.aspx?scid=fh;EN-US;CNTACTMS

Sub NumberOf1999Appts Dim oOutApp As Outlook.Application Dim oNS As Outlook.NameSpace Dim CalFolder As Outlook.MAPIFolder Dim CalItems As Outlook.Items Dim ResItems As Outlook.Items Dim sFilter As String Dim iNumRestricted As Integer Dim itm As Object

Set oOutApp = New Outlook.Application Set oNS = oOutApp.GetNamespace("MAPI")

' Use the default calendar folder Set CalFolder = oNS.GetDefaultFolder(olFolderCalendar)

' Get all of the appointments in the folder Set CalItems = CalFolder.Items

' Sort all of the appointments based on the start time CalItems.Sort "[Start]"

' Make sure to include all of the recurrences CalItems.IncludeRecurrences = True

'create the Restrict filter to return all 1999 appointments sFilter = "[Start] >= '" & Format("1/1/1999 12:00am", _     "ddddd h:nn AMPM") & "'" & " And [End] < '" & _ Format("1/1/2000 12:00am", "ddddd h:nn AMPM") & "'"

' Apply the filter to the collection Set ResItems = CalItems.Restrict(sFilter)

' This will return 2147843647 if any recurring appointment does not have an end date MsgBox ResItems.Count

iNumRestricted = 0

'Loop through the items in the collection. This will not loop infinitely. For Each itm In ResItems iNumRestricted = iNumRestricted + 1 Next

' Display the actual number of appointments in 1999. MsgBox iNumRestricted

Set itm = Nothing Set ResItems = Nothing Set CalItems = Nothing Set CalFolder = Nothing Set oNS = Nothing Set oOutApp = Nothing

End Sub

