VBA How To: Подскажите, когда ActiveInspector.CurrentItem является нулевым в Outlook?

Если это было опубликовано, пожалуйста, дайте мне знать, так как я не смог его найти:)

Я сделал запрос в Outlook, который выбирает текущий элемент почты и удаляет его перед открытием приложения:

Dim objApp As Outlook.Application
    Set objApp = Application
On Error Resume Next
Select Case TypeName(objApp.ActiveWindow)
    Case "Explorer"
        Set CurrentItem = objApp.ActiveExplorer.Selection.item(1)
    Case "Inspector"
        Set CurrentItem = objApp.ActiveInspector.CurrentItem
End Select

Dim mailItem As Outlook.mailItem
Set mailItem = CurrentItem

Dim deleteItem As Boolean
    deleteItem = objApp.mailItem.Delete

If MsgBox("Would you like to move this message to deleted items?", vbYesNo + vbQuestion, "File Indexing") _
        = vbYes Then
            mailItem = deleteItem
            deleteItem = True
        Else
            deleteItem = False
End If

Все это прекрасно работает, но я бы хотел, чтобы появилось модальное окно, если не выбран текущий элемент, но я не уверен, как добавить его. Это будет в том же IfThen или в совершенно другом выражении? Я пытался добавить что-то вроде

If CurrentItem = Null Then
MsgBox ("Please select a mail item")
End If

но затем MsgBox никогда не появляется и код выполняется нормально. Спасибо за любую помощь!

РЕДАКТИРОВАТЬ: Спасибо за ответы. К сожалению, я обнаружил пару ошибок, не связанных с этим, поэтому мне нужно их устранить, прежде чем я добавлю дополнительный код в кнопку Outlook.

3 ответа

Решение

Спасибо за помощь, но мой босс смог придумать этот маленький кусочек, который, кажется, работает правильно:

Select Case TypeName(objApp.ActiveWindow)
    Case "Explorer"
        If objApp.ActiveExplorer.Selection.Count > 0 Then
            Set currentItem = objApp.ActiveExplorer.Selection.Item(1)
        Else
            MsgBox ("No Messages Selected.")
            Exit Sub
        End If
    Case "Inspector"
        Set currentItem = objApp.ActiveInspector.currentItem
    Case Else
        MsgBox ("Please select a mail item.")
        Exit Sub

Попробуй это

Option Explicit

Private Sub test()

Dim currentItem As Object

Dim objApp As Outlook.Application

Set objApp = Application

On Error Resume Next

Select Case TypeName(objApp.ActiveWindow)
    Case "Explorer"
        Set currentItem = objApp.ActiveExplorer.Selection.Item(1)
    Case "Inspector"
        Set currentItem = objApp.ActiveInspector.currentItem
End Select

On Error GoTo 0

If currentItem Is Nothing Then

    MsgBox ("Please select a mail item")

End If

End Sub

См. VBA Проверка, если переменная пуста.

Где вы запускаете код, указанный выше? Это обработчик событий NewInspector?

objApp.ActiveExplorer.Selection.item (1)

В любом случае, я бы предложил разорвать цепочку вызовов свойств и методов и объявить их в отдельной строке кода. Итак, вы найдете, какое свойство или метод завершается ошибкой или возвращает ноль.

Попробуйте использовать следующий код:

  If Not CurrentItem Is Nothing Then
    ' obj initialized. '
  Else
    MsgBox ("Please select a mail item")
  End If
Другие вопросы по тегам