E-Mail(EyeCatch)

Outlook(2007)とマクロとエディタ

仕事で、Outlook2007を使用してます。
ExchangeServerなので、仕方ないのかなと思ってます。
環境さえそろっていれば、意外と使いやすいかなとも思っているので、あきらめもサクッとできてます。

ある時、プライベートでThunderBirdを使ってみたところ、プラグインもあってなんだか、便利なんですよ。
メール作成に、好きなテキストエディタを指定できたり、メール本文をみて添付ファイルの有無を送信前に確認してくれたり。。。

そんな訳で、Outlookにいろいろ気にいらない部分がありますが、マクロがあるのでスキルがあれば、ある程度満足出来るのではとも考えているのですが、問題は自分にスキルがないと言う事。

結局、Google先生に相談しつつ、いろいろな方のマクロを見て勉強しつつTry&Errorを繰り返す事に。

と、いうことでメール作成に好きなテキストエディタを使用できるマクロや、メール送信時に件名や添付ファイルを確認してくれる、マクロです。

とりあえず、好きなテキストエディタでメールを作成できるマクロです。
テキストメールと、HTMLメールで動作をかえてます。。。
ソースを見ながらメールを書くのはメンドーな自分なので、仕方ないです。

下記は、メール作成ウィンドウ(Inspector)から実行できます

Sub RunEditor()

Dim objShell As Object
Dim objFso As Object
Dim strSubject As String
Dim strFileName As String
Dim strFileBody As String
Dim stmFile As Object
Set objShell = CreateObject("WScript.Shell")
Set objFso = CreateObject("Scripting.FileSystemObject")

' 日時から一時ファイル名を生成
    strFileName = objShell.ExpandEnvironmentStrings("%temp%") & Year(Date) & Month(Date) & Day(Date) & Hour(Time) & Minute(Time) & Second(Time) & ".txt"

If ActiveInspector.CurrentItem.BodyFormat = 1 Then
'TXTメールの場合の処理

' 一時ファイルの作成とメッセージの本文の書き出し
    Set stmFile = objFso.CreateTextFile(strFileName, True)
    stmFile.WriteLine ActiveInspector.CurrentItem.Body
    stmFile.Close

    ' テキストエディタの起動
    objShell.Run "[テキストエディタのパス] " & strFileName, , True

    ' 編集済みの一時ファイルからの読み出し
    Set stmFile = objFso.OpenTextFile(strFileName, 1, 1)
    ActiveInspector.CurrentItem.Body = stmFile.ReadAll
    stmFile.Close
Else
'TXTメール以外の場合の処理
    MsgBox "Content does not display in HTML email"

' 一時ファイルの作成のみ
    Set stmFile = objFso.CreateTextFile(strFileName, True)
    stmFile.Close

    ' テキストエディタの起動
    objShell.Run "[テキストエディタのパス] " & strFileName, , True

    ' 編集済みの一時ファイルを1行目へ書き出し
    Set stmFile = objFso.OpenTextFile(strFileName, 1, 1)
    With ActiveInspector.WordEditor.Windows(1).Selection
        .HomeKey Unit:=6
        .TypeText stmFile.ReadAll
    End With
    stmFile.Close
End If

objFso.DeleteFile strFileName
ActiveInspector.Activate
End Sub

自分は、サクラエディタを使用しています。
メール作成後、[保存して閉じる]を実行すると、メール作成ウィンドウに内容が反映されます

ただし、最後に[ActiveInspector.Activate]を実行しているのに、メール作成ウィンドウでキーボード操作は受け付けてくれませんでした。。。
この辺は、サクラエディタの仕様かもしれません。。。

次は、メール一覧から実行できるマクロです。
いづれも、上のRunEditorへジャンプさせてます。

新規作成用

Sub NewMail()
CreateItem(0).Display
RunEditor
End Sub

返信用

Sub Reply()
ActiveExplorer.Selection.Item(1).Reply.Display
RunEditor
End Sub

すべてへ返信用

Sub AllReply()
ActiveExplorer.Selection.Item(1).ReplyAll.Display
RunEditor
End Sub

後は、Outlook側でこれらマクロをツールバーにでも登録してやり、ショートカットキーを設定すると、良い感じに、キーボードでマクロを実行できると思います。

ついでに、エディタ側のマクロを使用すると、メール作成も楽になるかもしれませんね。

下記は、件名が空だった場合にメッセージを出すマクロと、メール本文に「添付」と言う文字があり、添付ファイルがない場合にメッセージを出すマクロです。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
Dim strSubject As String
Dim strBody As String
strSubject = Item.Subject
strBody = Item.Body

If Len(Trim(strSubject)) = 0 Then
    Prompt$ = "Subject is Empty. Are you sure you want to send the Mail?"
    If MsgBox(Prompt$, vbYesNo + vbQuestion + _
        vbMsgBoxSetForeground, "Check for Subject") = vbNo Then
        Cancel = True
    End If
End If

If InStr(strSubject & strBody, "添付") > 0 And Item.Attachments.Count = 0 Then
    Prompt$ = "Attachment file is Empty. Are you sure you want to send the Mail?"
    If MsgBox(Prompt$, vbYesNo + vbQuestion + _
        vbMsgBoxSetForeground, "Check for Attachment file") = vbNo Then
        Cancel = True
    End If
End If
End Sub

参考サイト

上記以外にも、たくさんのサイト様を参考にさせていただいたました。ありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です