Отмена собрания Outlook с помощью VBA

Бывают случаи, когда мы забываем отменить запланированную встречу, может быть, из-за отсутствия кого-то важного, а может, из-за нехватки времени. Но во многих случаях мы забываем отменить встречу из Outlook. Итак, я ищу код VBA, который спросит у организатора встречи, подходит ли она для проведения встречи или ее следует отменить, и отправит письмо об отмене, если ее нужно отменить. Пожалуйста, помогите мне с этим. Заранее спасибо! :)


person raslams    schedule 18.03.2013    source источник
comment
Что вы уже пробовали?   -  person Luca Geretti    schedule 18.03.2013
comment
Добро пожаловать в StackOverflow. Лука указывает на то, что на SO мы ценим людей, которые сначала пытаются изо всех сил понять что-то самостоятельно, а затем задают вопрос о конкретной вещи, на которой они застряли.   -  person Joshua Honig    schedule 18.03.2013
comment
Я совершенно новичок в VBA. Я искал коды VBA, которые помогут мне сделать то же самое, но безрезультатно. Самое близкое, к чему я пришел, это код, который будет отправлять напоминания о встречах.   -  person raslams    schedule 19.03.2013


Ответы (2)


После использования кода от @alina, а также некоторых других макросов из Интернета, я придумал решение для того же, которым я делюсь здесь.

Public WithEvents objReminders As Outlook.Reminders

Sub Initialize_handler()

   Set objReminders = Application.Reminders
End Sub

Private Sub objReminders_ReminderFire(ByVal ReminderObject As reminder)

 Dim oApp As Outlook.Application
 Dim oNameSpace As Outlook.NameSpace
 Dim oApptItem As Outlook.AppointmentItem
 Dim oFolder As Outlook.MAPIFolder
 Dim oMeetingoApptItem As Outlook.MeetingItem
 Dim oObject As Object
 Dim iUserReply As VbMsgBoxResult
 Dim sErrorMessage As String
 MsgBox (VBA.Time)
On Error Resume Next
 ' check if Outlook is running
 Set oApp = GetObject("Outlook.Application")
 If Err <> 0 Then
   'if not running, start it
   Set oApp = CreateObject("Outlook.Application")
 End If

 On Error GoTo Err_Handler
 Set oNameSpace = oApp.GetNamespace("MAPI")
 Set oFolder = oNameSpace.GetDefaultFolder(olFolderCalendar)

 For Each oObject In oFolder.Items
   If oObject.Class = olAppointment Then
     Set oApptItem = oObject
        If ReminderObject.Caption = oApptItem.Subject Then
        If oApptItem.Organizer = Outlook.Session.CurrentUser Then
        iUserReply = MsgBox("Meeting found:-" & vbCrLf & vbCrLf _
            & Space(4) & "Date/time (duration): " & Format(oApptItem.Start, "dd/mm/yyyy hh:nn") _
            & " (" & oApptItem.Duration & "mins)" & Space(10) & vbCrLf _
            & Space(4) & "Subject: " & oApptItem.Subject & Space(10) & vbCrLf _
            & Space(4) & "Location: " & oApptItem.Location & Space(10) & vbCrLf & vbCrLf _
            & "Do you want to continue with the meeting?", vbYesNo + vbQuestion + vbDefaultButton1, "Meeting confirmation")
       If iUserReply = vbNo Then
            oApptItem.MeetingStatus = olMeetingCanceled
            oApptItem.Save
            oApptItem.Send
            oApptItem.Delete
            End If
          End If
     End If
   End If

 Next oObject

 Set oApp = Nothing
 Set oNameSpace = Nothing
 Set oApptItem = Nothing
 Set oFolder = Nothing
 Set oObject = Nothing

 Exit Sub

Err_Handler:
 sErrorMessage = Err.Number & " " & Err.Description

End Sub
person raslams    schedule 22.03.2013

Я нашел это здесь

Public Function DeleteAppointments(ByVal subjectStr As String)

    Dim oOL As New Outlook.Application
    Dim oNS As Outlook.NameSpace
    Dim oAppointments As Object
    Dim oAppointmentItem As Outlook.AppointmentItem
    Dim iReply As VbMsgBoxResult

    Set oNS = oOL.GetNamespace("MAPI")
    Set oAppointments = oNS.GetDefaultFolder(olFolderCalendar)
    Count = oAppointments.Items.Count 'for test purposes

    For Each oAppointmentItem In oAppointments.Items
        If InStr(oAppointmentItem.Subject, subjectStr) > 0 Then
        iReply = msgbox("Appointment found:" & vbCrLf & vbCrLf _
            & Space(4) & "Date/time: " & Format(oAppointmentItem.Start, "dd/mm/yyyy hh:nn") & vbCrLf _
            & Space(4) & "Subject: " & oAppointmentItem.Subject & Space(10) & vbCrLf & vbCrLf _
            & "Delete this appointment?", vbYesNo + vbQuestion + vbDefaultButton2, "Delete Appointment?")
        If iReply = vbYes Then oAppointmentItem.Delete
            oAppointmentItem.Delete
        End If
    Next

    Set oAppointmentItem = Nothing
    Set oAppointments = Nothing
    Set oNS = Nothing
    Set oOL = Nothing

End Function 
person Alina B.    schedule 18.03.2013
comment
Спасибо за код. Но у меня есть еще одно сомнение по этому поводу. Пожалуйста, потерпите меня, так как я совершенно новичок в VBA. Итак, сомнение в том, как вы называете весь этот макрос? Кроме того, где вы дадите значение для переменной subjectStr, которая, я думаю, является проверочной переменной в этом случае. Еще раз спасибо за код! :) - person raslams; 19.03.2013