テーマ:未分類(甘党)

日々、思いついたことを記録します。

RunEditor v0.03

2007年04月18日 05時06分34秒 | Outlook Tips
やめりゃあ、いいのに、こんなことに時間を使ってしまった、、、。

どうしても、複数のメール編集中の状態で、RunEditorを呼び出して、戻ってきたときの挙動が怪しいのが、解決できません。

ボチボチ、治すことにして、今日は、このくらいにしておこう、、、。
-------------
'#####################################################
' Outlook2003のメール作成ウィンドウからエディタを起動
' copyright 2007 by 甘党のプログラマ
'#####################################################
' 【機能】
' Outlook2003のメール作成ウィンドウからエディタを起動して、そのエディタ上で編集をして、エディタの編集結果を取り込みます。

' 【参考】
'millefeuille氏の「マイクロソフト・インサイド・アウト」
'「Outlook Tips | HTML メールのソース編集をするマクロ」
'http://ameblo.jp/millefeuille/theme12-10000018720.html
'
'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行目を、メールのタイトルに設定。
'
' 【TODO】
' 重複起動は、後の方が、参照だけで、戻ってきたときのオートリロードができない状態にしようとしたが、どうも、最初のオートリロードの機能が間違ったところにロードしてしまう不具合があったため、重複起動機能をつぶしている。
' 本当は、同時に複数のメールをエディタで編集できるようにしたい。
Public WithEvents myOlInspector As Inspector
Public myOlMailItem As MailItem
Public strFileName As String
Public strRunEditorTitle As String

Sub RunEditor()
strRunEditorTitle = "RunEditor v0.03"
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
' メールを一旦保存する
.Save

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

If myOlInspector Is Nothing Then
If MsgBox("エディタを呼び出しますか?" & Chr(13) & Chr(10) & "戻ってきたときに、オートリロード可能です。" & Chr(13) & Chr(10) & "(1行目は、メールのタイトルです。)", vbYesNo, "RunEditor v0.03") = vbNo Then GoTo Finish
Set myOlInspector = ActiveInspector
strFileName = strTempFileName
Else
'[todo]
' If MsgBox("未リロードのメール編集画面が立ち上がっているため、これで起動するエディタから戻ってきてもオートリロードできませんが、エディタを呼び出しますか?", vbYesNo, "RunEditor") = vbNo Then GoTo Finish
MsgBox ("未リロードのメール編集画面が立ち上がっているときには、RunEditorを起動しないでください。以前、起動したエディタから復帰もできなくなりました。")
Set myOlInspector = Nothing
strFileName = ""
GoTo Finish
End If


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

' 秀丸エディタの起動
objShell.Run "C:Progra~1HidemaruHidemaru.exe " & 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 = 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
If MsgBox("エディタで編集したテキストを取り込みますか?", vbYesNo, "RunEditor v0.03") = vbYes Then
' 編集済みの一時ファイルからの読み出し
Set stmFile = objFso.OpenTextFile(strFileName, 1)
.Subject = Mid(stmFile.ReadLine, Len("[タイトル] : ") + 1, 1024)
.Body = stmFile.ReadAll
stmFile.Close

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

End If
Set myOlInspector = Nothing
strFileName = ""
End With
End If
End Sub




最新の画像もっと見る

コメントを投稿