Привет, я почти новичок в макросах, и извините, если я что-то неправильно написал. Так что, пожалуйста, потерпите меня.
Я пытаюсь написать макрос, цель которого - отправлять почту, когда я получаю почту на работе. Затем макрос должен отправить письмо в службу смс, которая преобразует почту в смс и отправляет ее на мой телефон. Сообщение будет содержать короткое сообщение, адрес отправителя и время отправки и получения.
Я собрал два макроса. Что я нашел по поиску в интернете
Первый код находится по этой ссылке tachytelic.net
и секрет, который я нашел здесь
1010 * stackoverflow.com *
Вот часть кода, которая не работает.
'variable for select case
Dim EmailFrom As String
Dim OldMessage As Outlook.MailItem
Set OldMessage = Application.ActiveInspector.CurrentItem
'Puts sender mail address in variable both ordinary mail and Exchange emails.
Select Case OldMessage.SenderEmailType
Case "EX"
EmailFrom = OldMessage.Sender.GetExchangeUser.PrimarySmtpAddress
Case Else
EmailFrom = OldMessage.SenderEmailAddress
End Select
'Sends E-mail to sms service.
If TypeName(Item) = "MailItem" Then
With olEmail
.BodyFormat = olFormatPlain
.To = "some@mail.com"
.Subject = "You got a new E-mail!"
.Body = EmailFrom & vbCrLf & "Sendt: " & Item.SentOn & vbCrLf & "Modtaget: " & Item.ReceivedTime
.Send
End With
End If
Когда я запускаю этот код, я получаю ошибку времени выполнения 91 - переменная объекта или переменная блока не установлены.
Я пытался использовать клавишу F8, но это невозможно, я не знаю почему.
Затем я взял оригинальный код и вставил его в модуль. Затем я могу использовать клавишу F8, чтобы пройти код. Ошибка появляется, когда я достигаю этой строки.
Set OldMessage = Application.ActiveInspector.CurrentItem
Может кто-нибудь сказать мне, что я делаю неправильно и что я могу сделать, чтобы это исправить? THX
Вот весь код
Option Explicit
Private WithEvents inboxItems As Outlook.Items
Sub Application_Startup()
Dim outlookApp As Outlook.Application
Dim objectNS As Outlook.NameSpace
Set outlookApp = Outlook.Application
Set objectNS = outlookApp.GetNamespace("MAPI")
Set inboxItems = objectNS.GetDefaultFolder(olFolderInbox).Items
End Sub
Sub inboxItems_ItemAdd(ByVal Item As Object)
On Error GoTo ErrorHandler
'variable for if statments
Dim olApp As Outlook.Application
Dim olEmail As Outlook.MailItem
Set olApp = New Outlook.Application
Set olEmail = olApp.CreateItem(olMailItem)
'variable for select case
Dim EmailFrom As String
Dim OldMessage As Outlook.MailItem
'Deletes sms status mails I recieve when I mail to sms service
If InStr(Item.Subject, "SMS status") > 0 Then
Item.UnRead = False
Item.Save
Item.Delete
End
End If
'Puts sender mail address in variable both ordinary mail and Exchange emails.
Select Case OldMessage.SenderEmailType
Case "EX"
EmailFrom = OldMessage.Sender.GetExchangeUser.PrimarySmtpAddress
Case Else
EmailFrom = OldMessage.SenderEmailAddress
End Select
'Sends E-mail to sms service.
If TypeName(Item) = "MailItem" Then
With olEmail
.BodyFormat = olFormatPlain
.To = "some@mail.com"
.Subject = "You got a new E-mail!"
.Body = EmailFrom & vbCrLf & "Sendt: " & Item.SentOn & vbCrLf & "Modtaget: " & Item.ReceivedTime
.Send
End With
End If
ExitNewItem:
Exit Sub
ErrorHandler:
MsgBox Err.Number & " - " & Err.Description
Resume ExitNewItem
End Sub
Тогда обзор будет проще.
Итак, как мне заставить ActiveInspector просмотреть полученную почту и сохранить ее в OldMessage? Вот что я думаю, я должен сделать. Но поправь меня, если я ошибаюсь.