メール本文中の”\\”や”file:”や”http”から始まる文字列へハイパーリンクを一括挿入したいときはないでしょうか。
そんな時に悩むのが、
ですよね。
今回は、
をご紹介します。
もくじ
マクロを設置する下準備をする。
マクロを設置するための下準備をしましょう。
以下を参考にVBAコードを配置する場所を表示させます。
テキスト形式を選択している方はハイパーリンクは表示されませんので、HTML形式かリッチテキスト形式に変更をお願いします。
この設定が終えたら一度Outlookを再起動します。
マクロを登録する
次にマクロを登録します。
「開発」タブ>「Visual Basic」を押します。
「Visual Basic Editor」にて、[Project1] > [Microsoft Outlook Objects] > [ThisOutlookSession] を開きます。
右のコードエリアへ、以下のコードを貼り付けて保存します。
Public Sub パス文字列にハイパーリンク追加()
'ハイパーリンクの条件を定義します。
'「http」を指定。「http」や「https」に該当。
Const myHyperlink1 = "http"
Const myHyperlink2 = "\\"
Const myHyperlink3 = "file:"
Dim HyperLinkList As Variant
Dim objWord As Object
Dim objSearchWord As Object
'本文のオブジェクトを取得
Set objWord = ActiveInspector.WordEditor
Set objSearchWord = objWord.Range
HyperLinkList = Split(objSearchWord, vbCr)
'myHyperlinkのワードを探し一致していればハイパーリンクを挿入
For i = 0 To UBound(HyperLinkList)
If InStr(HyperLinkList(i), myHyperlink1) Or InStr(HyperLinkList(i), myHyperlink2) Or InStr(HyperLinkList(i), myHyperlink3) Then
While objSearchWord.Find.Execute(FindText:=HyperLinkList(i), MatchWholeWord:=False, Forward:=True) = True
objWord.Hyperlinks.Add Anchor:=objSearchWord, Address:=HyperLinkList(i)
objSearchWord.Collapse Direction:=wdCollapseEnd
Wend
End If
Next
'オブジェクトの開放
Set objWord = Nothing
Set objSearchWord = Nothing
End Sub
メールを新規作成しhttpから始まる文字列を入れテストする
メールを新規作成し”http”以外にも”\\”やOffice系ドキュメントのパス”file:”から始まる文字列を入れ確認してしてみましょう。
次にoutlook本体に戻り「開発」タブの「マクロ」>「パス文字列にハイパーリンク追加」を押下します。
はい!きれいにハイパーリンクが挿入されましたね。日本語交じりのURLもOKです!
会議通知に対しても同じくハイパーリンクを挿入することが可能です!
さいごに
いかがでしょうか。
今回は、
についてまとめました。
業務の中でハイパーリンクを付与する作業は意外と多いものですので、このVBAで楽にできればと思っています。
ご返信ありがとうございます。
BodyFormatのみ変更しますと、ActiveInspector.WordEditor.Rangeオブジェクトに含む本文の改行コードが垂直タブになる、等の不都合が起こるため、前回記載の通りの変更を試みました。
そうしますと、ご提示の改行コードを置換する形で良いかと思います。
メール本文の改行について以下の記事にもまとめていますので、よろしければご参照ください。
https://extan.jp/?p=8318
あと確認するとしたら、Outlook設定の規定のフォントやスタイルなど意図したものになっているかでしょうか。
お早いご返信ありがとうございます。
確認しましたところ、仰る通りメール送信時に、他アドインによってテキスト形式に変換されておりました。
アドインをOFFにしたところ、正常に動作しました。
お手数おかけしました。
念のため、以下ご回答いたします。
>①送信後のメールの形式はHTMLもしくはリッチテキストになっているか
テキストになっておりました。
>②ハイパーリンクを付与したメールを下書き保存をした段階(送信前)ではハイパーリンクは有効か
HTMLであり、有効でした。
>③手動でハイパーリンクを設定し、送信した場合、マクロ版と同様の結果になるか
同様の結果となりました。(これまで気づかなかったのは、テキスト形式ではありながらOutlookの機能でリンクが有効化されていたためでした。)
以降は別件となりますが、もしご存知でしたらご教授くださいませ。
上記の拡張として、表示しておるメールがテキスト形式であった場合は、HTML形式に変更した上でハイパーリンク化マクロを実行したいと考えました。
(上記の理由により、私の環境ではほぼ全てのメールが「テキスト」に変換され返ってくるため、HTMLに変更する手間も減らしたいと考えました。)
以下を行いました。
Application.ActiveInspector.CurrentItem を取得し、BodyFormat を確認し、olFormatPlain(1:テキスト)の場合は、olFormatHTML(2:HTML)に変更する。
テキスト形式の場合、Bodyの改行コードがASCII(11)(VT)のため、Chr(11)をvbCrにReplaceする。
その後、ハイパーリンク化マクロ実施。
期待する動作は、「書式設定」の形式を「テキスト」から「HTML」に変更したときのように、メール本文及びフォーマットは変わらず、形式のみHTMLになること。でしたが、
上記では、メール本文のフォーマットが崩れました。(行間やフォントなどが変更されました。)
“「書式設定」の形式を「テキスト」から「HTML」に変更”をOUTLOOK VBAで再現するには、どういった処理がスマートなのでしょうか。
Excelのように、”マクロの記録”があればわかりやすいのですが…。
本題とずれた内容でありますため、不適切とご判断されましたらご放念くださいませ。
解決したようでよかったです。
別件の書式設定の件ですが、BodyFormatの変更だけすればよいかと存じますので、
ご確認いただけますでしょうか。
いつも見させていただいております。
ご質問させてください。
こちらのマクロを使用したところ、メール作成画面では正常にハイパーリンクが付与されますが、メール送信後、送信フォルダまたは受信フォルダ(宛先に自分を含めた場合)で確認したところ、ハイパーリンクが表示されませんでした。
マクロで設定したハイパーリンクを表示するには、outlook側の設定が必要になるのでしょうか。
なお「オプション」→「メール」→「メッセージの作成」はHTMLにしております。
「編集オプション」→「文章校正」→「オートコレクトのオプション」→「入力オートフォーマット」、「オートフォーマット」の『インターネットとネットワークのアドレスをハイパーリンクに変更する』はチェックを外しています。
何かご存知でしたら、ご教授いただきたく、宜しくお願い致します。
いつもご利用ありがとうございます。
ハイパーリンクが送信後のメールに付与されていない件につきまして、
まず、マクロで設定したものと手動で設定したものと同じ設定内容になりますので、特にOutlook側でマクロ用に設定いただく必要はありません。
また、メール作成画面で正常にハイパーリンクが付与されているということから、送信処理で外れている可能性が高いですので、
以下ご確認いただけますでしょうか。
①送信後のメールの形式はHTMLもしくはリッチテキストになっているか
②ハイパーリンクを付与したメールを下書き保存をした段階(送信前)ではハイパーリンクは有効か
③手動でハイパーリンクを設定し、送信した場合、マクロ版と同様の結果になるか
よろしくお願いいたします。
返信いただきありがとうございます!
無事表示を変えることができたのですが、一部元の表示列が残ってしまいます(以下の通り)。
また、表示を変えなくても、マクロを実行した際、もともと文字列全部が青字になりませんでした。
ハイパーリンクは無事機能しているのですが、表示がハイパーリンク化されているように見えません。原因がもし、わかりましたら教えていただけますと幸いです。
(例)
¥¥りんごフォルダ¥あいうえおかきくけこさしすせそ
にマクロ実行
↑
¥¥りんごフォルダ¥までしか青字になりません。リンクは正常に飛びます。
(例2)
上記のハイパーリンクの表示を”リンク”に変更した場合。
リンクあいうえおかきくけこさしすせそ
↑文字列全部の表記が変わるわけでなく、あいうえお以降がのこります。なお、リンクまでが青字です。リンクは正常に飛びます。
追記させて頂きます。
パス文字列をメール本文へコピペで貼り付けた場合、デフォルトでハイパーリンクが付与されますが、その状態で実行するとご指定の状況となります。
この場合にはデフォルトで付与されたハイパーリンクを削除した上でマクロを実行頂きたくお願いいたします。
文字列の一部が残ってしまう件につきまして、
書式設定が混在していると検索やハイパーリンクがかかりにくい場合がありますので
お手数ですがメモ帳などで書式が無い状態で本文へコピペして試して頂きたく
お願い致します。
有益な情報を公開いただき、大変勉強になります。
1つだけ質問があるのですが、ハイパーリンクの表示文字を変えたいのですが、どうすれば良いでしょうか?
TextToDisplyを使っても変わらなかったため、質問させていただきました。
教えていただけますと幸いです。
いつもご利用ありがとうございます。
ハイパーリンクの表示文字を変える方法につきましては、以下のように
TextToDisplayに表示させたい名前を指定すれば可能となります。
■変更前
…, Address:=HyperLinkList(i)
■変更後
…, Address:=HyperLinkList(i), TextToDisplay:=”エク短リンク”
ただし、公開コードではハイパーリンク変更の対象を”\\”、”file:”、”http”からはじまる文字列としているため、
それ以外のパターンの文字列は対象外になりますことご了承のほどお願いいたします。