Right you are using Outlook and that's the problem - a missing reference.
This is a common occurence when you try and develop over multiple versions.
Later/earlier versions might have different libraries versions.
Theoretically you could go round checking references but there is another, perhaps better method - late binding.
This is a technique used when you don't want to refer specifically to a library.
For example for the click event of CommandButton2 on UserForm4 you have this section of code.
Code:
Dim olApp As Outlook.Application
Dim olApt As AppointmentItem
Set olApp = New Outlook.Application
Set olApt = olApp.CreateItem(olAppointmentItem)
With olApt
.Start = varDate + TimeValue("09:30:00")
.End = .Start + TimeValue("02:00:00")
.Subject = UserForm4.Label23.Caption & " " & UserForm4.Label24.Caption & " " & UserForm4.Label38.Caption
.Location = "My desk"
.Body = "key date for: " & ComboBox4.Text
.BusyStatus = olBusy
.ReminderMinutesBeforeStart = 60
.ReminderSet = True
'.Display
.Save
End With
Set olApt = Nothing
Set olApp = Nothing
Now this requires you to have a reference to the Outlook library.
I've only glanced at the code and don't have time to go in to details on how it would look using late-binding.
But one of the first things would be to dim olApp, olApt as just 'Object'.
And you'll have to change this to use Create(or Get)Object.
Code:
Set olApp = New Outlook.Application
I can't remember the exact syntax but it would be something like Set olApp = CreateOject(...).
Also in this section of code you are using constants from the Outlook library like olAppointmentItem.
If you are using late-binding you need to replace it with it's actual value or create a constant with that name/value yourself.