備忘録がわり

マクロ


--- 以下が修整したOutlook2003のVBA ---

Sub RunEditor()

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

' タイトルの取得
If ActiveInspector.CurrentItem.Subject <> "" Then
strSubject = ActiveInspector.CurrentItem.Subject
Else
strSubject = "(無題)"
End If

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

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

' 秀丸エディタの起動
objShell.Run "C:Progra~1HidemaruHidemaru.exe " & strFileName, , True

' 編集済みの一時ファイルからの読み出し
Set stmFile = objFso.OpenTextFile(strFileName, 1)
ActiveInspector.CurrentItem.Body = stmFile.ReadAll
stmFile.Close

objFso.DeleteFile strFileName
End Sub




'#####################################################
' Outlook2003のメール作成ウィンドウからエディタを起動
' copyright 2007 by 甘党のプログラマ
'#####################################################
' 【機能】
' Outlook2003のメール作成ウィンドウからエディタを起動して、そのエディタ上で編集をして、エディタの編集結果を取り込みます。
' (現状、"C:Progra~1HidemaruHidemaru.exe"で決めうち)

' 【参考】
'millefeuille氏の「マイクロソフト・インサイド・アウト」
'「Outlook Tips | HTML メールのソース編集をするマクロ」
'http://ameblo.jp/millefeuille/theme12-10000018720.html
'
'【準備】
' 1. [ツール]-[マクロ]-[Visual Basic Editor] をクリックします。
' 2. [VbaProject.OTM - ThisOutlookSession (コード)] ウィンドウに下記の VBA コードをコピーします。
' 3. CTRL+S で保存します。
' 4. Visual Basic Editor を終了します。
' 5. [ファイル]-[新規作成]-[メッセージ] をクリックし、新規メッセージの作成画面を表示します。
' 6. メッセージ作成ウィンドウのツールバーを右クリックし、[ユーザー設定] をクリックします。
' 7. [コマンド] タブをクリックし、[分類] のリストの [マクロ] をクリックします。
' 8. [コマンド] のリストの "Project1.ThisOutlookSession.HTMLEdit" をツールバーの適当なところにドラッグアンドドロップします。
' 9. ドラッグアンドドロップしたアイコンを右クリックし、名前やボタン イメージを好きなように変更します。
'
'Tatsu's room on the Web
'2005/01/14(金) Outlookのメール作成をエディタとマクロで強化し損ねる
'http://homepage3.nifty.com/Tatsu_syo/Nikki/200501.html
'
' 【履歴】
' v0.01 2007/4/12 初版 : タイトルと日時から一時ファイル名を生成、秀丸エディタの起動、編集済みの一時ファイルからの読み出しを一気に行う
' v0.02 2007/4/17 v.0.01が、原因不明の調子が悪さがあるために、RunEditorは、タイトルと.CreationTimeから一時ファイル名を生成、秀丸エディタの起動のみ。
' v0.03 2007/4/18 エディタを起動して戻ってきたら、オートリロードする機能を追加。秀丸エディタから戻ってきたら、1行目を、メールのタイトルに設定。
' v0.04 2007/4/19 秀丸エディタを起動したときに、2行目にカーソルを設定。リロードのときのMsgBoxをvbYesNoCancelに変更して、Cancelの場合には、もう一度、Activateしたときに、再ロードできるようにした。
' v0.05 2007/5/4 HMLメールに対応。呼び出し時のメッセージボックスをvbYesNoCancelに変更。参照時には、タイトルの他に、差出人、宛先、送信日時の情報を追加。
'
' 【TODO】
' ・重複起動は、後の方が、参照だけで、戻ってきたときのオートリロードができない状態にしようとしたが、どうも、最初のオートリロードの機能が間違ったところにロードしてしまう不具合があったため、重複起動機能をつぶしている。
' ・本当は、同時に複数のメールをエディタで編集できるようにしたい。
' ・Outlook側にフォーカスがあたったら、一時ファイルの存在の有無とタイムスタンプ更新をチェックして、取り込むようにしたい。
' ・もう少し、ソースコードの綺麗にしたい。(文字列が散らばっていたり、決めウチの文字列が、直接、埋まっていたり、知性がないコードになってしまっている。)
Public WithEvents myOlInspector As Inspector
Public myOlMailItem As MailItem
Public strFileName As String
Public strRunEditorTitle As String

Sub RunEditor()
strRunEditorTitle = "RunEditor v0.05"
Dim objShell As Object
Dim objFso As Object
Dim strTempFileName As String
Dim stmFile As Object

Set objShell = CreateObject("WScript.Shell")
Set objFso = CreateObject("Scripting.FileSystemObject")
Set myOlMailItem = ActiveInspector.CurrentItem
With myOlMailItem

' 一時ファイル名を生成
MakeTempFileNameForEditor strTempFileName, objShell

If .Sent = False Then
' 編集中のウィンドウから呼び出された場合
If myOlInspector Is Nothing Then
btn = MsgBox("このウィンドウに戻ってきたときに、呼び出すエディタの編集結果をオートロードしますか?" & Chr(13) & Chr(10) & "(呼び出したエディタ上のテキストの1行目は、メールのタイトルです。)", vbYesNoCancel, "RunEditor v0.05")
If btn = vbYes Then
Set myOlInspector = ActiveInspector
ElseIf btn = vbCancel Then
GoTo finish
End If
' メールを一旦保存する
.Save
strFileName = strTempFileName
Else
'[todo]
' If MsgBox("未リロードのメール編集画面が立ち上がっているため、これで起動するエディタから戻ってきてもオートリロードできませんが、エディタを呼び出しますか?", vbYesNo, "RunEditor") = vbNo Then GoTo Finish
MsgBox ("未リロードのメール編集画面が立ち上がっているときには、RunEditorを起動しないでください。以前、起動したエディタから復帰もできなくなりました。")
Set myOlInspector = Nothing
strFileName = ""
GoTo finish
End If
Else
' 単に参照するだけの場合
If MsgBox("参照のためにエディタを呼び出しますか?", vbOKCancel, "RunEditor v0.05") <> vbOK Then GoTo finish
End If


' 一時ファイルの作成とメッセージの本文の書き出し
Set stmFile = objFso.CreateTextFile(strTempFileName, True)
stmFile.WriteLine "[タイトル] : " & .Subject

If .Sent = True Then
' 単に参照するだけの場合
stmFile.WriteLine "[送信日時] : " & .SentOn
stmFile.WriteLine "[差出人] : " & .SenderName & "(" & .SenderEmailAddress & ")"
stmFile.WriteLine "[宛先] : " & .ReceivedByName & "(" & .To & ")"
End If

' HTML形式の場合の対応
If .BodyFormat = olFormatHTML Then
stmFile.WriteLine .HTMLBody
Else
stmFile.WriteLine .Body
End If
stmFile.Close

' 秀丸エディタの起動
objShell.Run "C:Progra~1HidemaruHidemaru.exe /j2 " & strTempFileName, , False

End With
finish:
End Sub


Private Sub MakeTempFileNameForEditor(ByRef strFileName As String, objShell As Object)
Dim strSubject As String
With ActiveInspector.CurrentItem
' タイトルの取得
If .Subject <> "" Then
strSubject = .Subject
Else
strSubject = "(無題)"
End If

' タイトルと.CreationTimeから一時ファイル名を生成
strFileName = strSubject & "(" & Year(.CreationTime) & "-" & Month(.CreationTime) & "-" & Day(.CreationTime) & "-" & Hour(.CreationTime) & "-" & Minute(.CreationTime) & "-" & Second(.CreationTime) & ")" & ".txt"
strFileName = Replace(strFileName, ":", ":")
strFileName = Replace(strFileName, "<", "<")
strFileName = Replace(strFileName, ">", ">")
strFileName = Replace(strFileName, "?", "?")
strFileName = Replace(strFileName, "/", "/")
strFileName = Replace(strFileName, "", "¥")
strFileName = Replace(strFileName, "*", "*")
strFileName = objShell.ExpandEnvironmentStrings("%temp%") & strFileName
End With
End Sub


Private Sub myOlInspector_Activate()
Dim objFso As Object
Dim stmFile As Object

Set objFso = CreateObject("Scripting.FileSystemObject")

If myOlInspector Is Nothing Then
MsgBox ("RunEditorの2重起動の不具合が直っていません。リロードできません。")
Else
With myOlMailItem
btn = MsgBox("エディタで編集したテキストを取り込みますか?", vbYesNoCancel, "RunEditor v0.05")
If btn = vbYes Then
' 編集済みの一時ファイルからの読み出し
Set stmFile = objFso.OpenTextFile(strFileName, 1)
.Subject = Mid(stmFile.ReadLine, Len("[タイトル] : ") + 1, 1024)
.Body = stmFile.ReadAll
stmFile.Close

' 最悪、このファイルから作成したテキストを復帰できるように、一時ファイルは削除しない。
'objFso.DeleteFile strFileName

Set myOlInspector = Nothing
strFileName = ""
ElseIf btn = vbNo Then
Set myOlInspector = Nothing
strFileName = ""
End If
End With
End If
End Sub

このページへのコメント

2gOfiR I truly appreciate this article.Really thank you! Keep writing.

0
Posted by check it out 2014年01月21日(火) 18:10:50 返信

zoefZG Major thankies for the blog.Really thank you! Fantastic.

0
Posted by check this out 2013年12月21日(土) 14:24:27 返信

ojHlDv <a href="http://qfqnxnzhbrmg.com/">qfqnxnzhbrmg</a>, [url=http://inlhqgmwchob.com/]inlhqgmwchob[/url], [link=http://woinpxzrrbxf.com/]woinpxzrrbxf[/link], http://kkkvmazkwsld.com/

0
Posted by bensesbeu 2013年11月20日(水) 03:05:51 返信

9JJmmM <a href="http://iwimwafiqjvo.com/">iwimwafiqjvo</a>, [url=http://wqplywcbpysc.com/]wqplywcbpysc[/url], [link=http://rdtkyiouxiex.com/]rdtkyiouxiex[/link], http://sipxnzjohvry.com/

0
Posted by rfrrsm 2013年11月15日(金) 04:10:56 返信

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu

メニューサンプル1

管理人/副管理人のみ編集できます