Imports System.Runtime.InteropServices.Automation Public Class OutlookAppointmentHelper Const olAppointmentItem As Integer = 1 Const olMeeting As Integer = 1 Shared Function CreateOutlookAppointment(ByVal toAddress As String, ByVal subject As String, ByVal body As String, ByVal location As String, ByVal startDateTime As Date, ByVal endDateTime As Date) As Boolean Dim result = False Try Dim outlook As Object = Nothing If AutomationFactory.IsAvailable Then Try 'Get the reference to the open Outlook App outlook = AutomationFactory.GetObject("Outlook.Application") Catch ex As Exception 'If Outlook isn't open, then an error will be thrown. ' Try to open the application outlook = AutomationFactory.CreateObject("Outlook.Application") End Try If outlook IsNot Nothing Then 'Create the Appointment ' Outlook object model (OM) reference: ' http://msdn.microsoft.com/en-us/library/ff870566.aspx ' Appointment Item members: ' http://msdn.microsoft.com/en-us/library/ff869026.aspx Dim appt = outlook.CreateItem(olAppointmentItem) With appt .Body = body .Subject = subject .Start = startDateTime .End = endDateTime .Location = location .MeetingStatus = olMeeting .Recipients.Add(toAddress) .Save() '.Display() .Send() result = True End With End If End If Catch ex As Exception Throw New InvalidOperationException("Failed to create Appointment.", ex) End Try Return result End Function End Class Please note that you want to add multiple recipients to the appointment you could pass in an array or List(Of String) and loop through that calling .Add for each one: Shared Function CreateOutlookAppointment(ByVal toAddress As List(Of String), ...rest of code . . . Dim appt = outlook.CreateItem(olAppointmentItem) With appt .Body = body .Subject = subject .Start = startDateTime .End = endDateTime .Location = location .MeetingStatus = olMeeting For Each addr In toAddress .Recipients.Add(addr) Next .Save() '.Display() .Send() End With You can also add required attendees by setting appropriate properties. Take a look at the object model for the Appointment item. Calling Code from a Button on a Screen- You add a command button to a screen. So here is the code: Private Sub CreateOutlookAppt_CanExecute(ByRef result As Boolean) result = System.Runtime.InteropServices.Automation.AutomationFactory.IsAvailable End Sub Private Sub CreateOutlookAppt_Execute() ' Schedule the appointment via Outlook With Me.Appointment If .Customer.Email <> "" Then If OutlookAppointmentHelper.CreateOutlookAppointment(.Customer.Email, .Subject, .Notes, .Location, .StartTime, .EndTime) Then Me.ShowMessageBox("Appointment has been sent.") End If Else Me.ShowMessageBox("This customer does not have an email address", "Missing Email Address", MessageBoxOption.Ok) End If End With End Sub