У меня есть функция Outlook VBA, которая принимает выбор и обрабатывает его элементы.Я хочу, чтобы он снова выбрал, какой бы выбор не существовал ранее.
Я догадался, что должен сохранить первоначальный выбор.После обработки первого элемента выбор становится пустым, поэтому я бы использовал AddToSelection
для добавления одного элемента за раз.Но я не мог не получить error 438
при его использовании.
Из официальной документации , единственный возможный источник ошибок, который я вижу, это любой из перечисленных в разделе «При следующих условиях Outlook возвращаетошибка при вызове метода AddToSelection: «Но я думаю, что в моем случае ни один из них не применим.
Каковы возможные источники ошибок и как я могу систематически оценивать, какой мой случай?
Как я могу закончить Selection
тех же самых оригинальных предметов?
Моя функция (здесь применяется к Selection
с одним элементом):
Sub MoveAppt()
' Move selected appointment a given number of days within the Calendar
Dim sel As Outlook.Selection, xpl As Explorer
Dim oOlAppt As Outlook.AppointmentItem
Set xpl = Application.ActiveExplorer
Set sel = xpl.Selection
Set oOlAppt = sel.Item(1)
Dim newStart As Date
Dim ndays As Integer
ndays = 7
newStart = MoveAppointment(oOlAppt, ndays)
Debug.Print "Count = " & xpl.Selection.Count ' THIS GIVES 0, CONFIRMING AN EMPTY Selection
If (xpl.IsItemSelectableInView(oOlAppt)) Then ' <----- THIS RETURNS True ...
xpl.AddToSelection oOlAppt ' <----- ... BUT THIS GIVES ERROR -2147467259 (80004005)
Else
Debug.Print "Object is not selectable"
End If
End Sub
Function MoveAppointment(ByRef oOlAppt As Outlook.AppointmentItem, ByVal ndays As Integer) As Date
' Move an Outlook.AppointmentItem a given number of days within the Calendar
With oOlAppt
Dim currStart As Date, newStart As Date
currStart = .Start
newStart = DateAdd("d", ndays, currStart)
.Start = newStart
.Save
End With
MoveAppointment2 = newStart
End Function
EDIT : удаление скобок с аргументом AddToSelection
изменило ошибку на указанную в коде.Поэтому я попытался: 1) установить точку останова на этой линии, 2) когда достигнута точка останова, перейти в представлении календаря к неделе newStart
, где сейчас находится перемещенный элемент, 3) продолжить.Это работает нормально, так что, кажется, отвечает на вопрос.
Что касается того, как повторно выбрать исходные элементы, я думаю, что я должен: 1) определить минимальную и максимальную даты среди всех оригинальных элементов, 2) установить CalendarView
, чтобы охватить эти даты, 3) циклчерез все предметы в исходном выборе и AddToSelection
им.Я не знаю, есть ли что-нибудь попроще.