2

特定の件名の特定のアドレスから電子メールを受信した場合に、次のスクリプトを実行しています。目標は、電子メールの受信者が元のメッセージの本文に含めるのに役立つハイパーリンクを電子メールにタグ付けすることです。

Option Explicit
Sub Megatron(MyMail As MailItem)
Dim objOL As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim strID As String
Dim strLink As String
Dim strNewText As String
Dim strLinkText As String

'On Error Resume Next
Set objOL = Application
strID = MyMail.EntryID
Set MyMail = Application.Session.GetItemFromID(strID)
If Not MyMail Is Nothing Then
    Set objNS = objOL.Session
    MyMail.BodyFormat = olFormatHTML
    If MyMail.BodyFormat = olFormatHTML Then
    MsgBox ("set to html")
    End If

    strLink = "http://www.example.com"
strLinkText = "Click on this Example!"
strNewText = "<p><a href=" & Chr(34) & strLink & _
         Chr(34) & ">" & strLinkText & "</a></p>"
MyMail.HTMLBody = Replace(MyMail.HTMLBody, "</body>", _
                      strNewText, 1, 1, vbTextCompare)
    MyMail.Save     
    MsgBox ("Hyperlink appended!")
Else
MsgBox ("Failure!")
End If
End Sub

適切なイベントが発生したことを示すメッセージ ボックスが表示されますが、実際には変更が行われていない (または適切に保存されていない) ように見えます。

これは、あらゆる種類のプログラミングで行った最初の作業です。特にVBのチュートリアルをいくつか見てきましたが、これは初めてです。どんな助け/指導も大歓迎です!

4

1 に答える 1

3

これは、Option Explicit明示的な変数宣言を要求するために使用する必要がある典型的なケースです。VBAを学んでいるので、これを使用してください。On Error Resume Nextまた、これはすべてのエラー処理を無視するため、使用する習慣を避けてください。

これに気付いていないかもしれませんが、次の方法でメール アイテムを参照しています。

  • 私のメール
  • objItem
  • objMsg
  • objメール

次の 2 つのコマンドに注意してください。

objMsg.HTMLBody

objMail.Save

存在しないオブジェクトに対して実行されます。

上記の 3 つの余分な参照を削除します。

Sub Megatron(MyMail As MailItem)
Dim objOL As Outlook.Application
Dim objNS As Outlook.NameSpace
Dim objItem As Object
Dim strID As String
Dim strLink As String
Dim strNewText As String
Dim strLinkText As String
strLink = "http://www.example.com"
strLinkText = "Click on this Example!"
strNewText = "<p><a href=" & Chr(34) & strLink & _
         Chr(34) & ">" & strLinkText & "</a></p>"
MyMail.HTMLBody = Replace(MyMail.HTMLBody, "</body>", _
                      strNewText, 1, 1, vbTextCompare)
MyMail.Save
end Sub

また、クリーンアップも必要ありません。

于 2013-09-04T19:22:17.720 に答える