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