Revision 13 for your coding pleasure. This incorporates several bug fixes, particularly if you use dpModes 2 ,3, 4. dpModes 0, 1 are affected most when supplying default dates.

Code Access:

1. Transitioning to a userform + code module structure. Calling code now in 'YourCodeHere'. This code currently covers all possibilties, and is longer than would be necessary for most applications. For example, the simplest call would now be myDate = getUserDate() which would use dpMode 0 and all of the standard presets. This will allow users to keep the junk out of their own code, and also allows DatePick to directly reference the calling module ('CalendarModule') to help resolve any potential conflicts.

Re-Enabled Features:

1. dpMode = 3 now has MultiSelect re-enabled in the events ListBox. (This was previously disabled when the code was updated to use eventList comments.) This required code attached to ListBox1.Change() to detect, interpret, and record a history of selection changes in ListBox1 so that the comments could always be displayed for the most recent addition to the ListBox1 selection.

Bug Fixes:

1. Inability to scroll ListBox1 with dpMode = 3 and displayComments = False
2. Subscript out of Range errors when using dpMode >1 and defaultDate not from current year.
3. defaultDate is now set to zero if it is initialized with a year outside of the values of ComboBox2. This fixes several outstanding issues.
4. Several formatting bugs that would appear if defaultDate differed from the current year.
5. A few other minor issues with eventList and eventMatrix.

Foundation changes:

1. Recoding to allow future control over the allowable year range.
2. Combining returnDate() and returnCodes()
3. Recoding to allow future access to secondary features such as calendar size, 'Find Today' behavior, etc.

Enjoy, BC.

Edit: Code removed. Go to post #39.