[[20230920185205]] 『EXCEL VBA OUTLOOKメール ハイパーリンク設定』(k) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『EXCEL VBA OUTLOOKメール ハイパーリンク設定』(k)

当方初心者につきお手柔らかにお願いします。
セルB14にCフォルダのハイパーリンクを入力しておりますが、メール作成の際にうまくセットされずリンク表示となりません。
対応をご教示いただけますでしょうか。

'outlookを起動する

    Dim toaddress, ccaddress, bccaddress As String  '変数設定:To宛先、cc宛先、bcc宛先
    Dim subject, mailBody, Display, credit As String '変数設定:件名、メール本文、クレジット、添付
    Dim outlookObj As Outlook.Application    'Outlookで使用するオブジェクト生成
    Dim mailItemObj As Outlook.MailItem      'Outlookで使用するオブジェクト生成

 '差出人、本文、署名を取得する---
    toaddress = Range("B10").Value   'To宛先
    ccaddress = Range("B11").Value   'Cc宛先
    subject = Format(Date, "yyyy/m/d")   '件名
    mailBody = Range("B13").Value '本文
    Display = Range("B14").Value '本文
    credit = Range("B15").Value      'クレジット

'メールを作成して、差出人、本文、署名を入れ込む---

    Set outlookObj = CreateObject("Outlook.Application")
    Set mailItemObj = outlookObj.CreateItem(olMailItem)
    '添付ファイル

    mailItemObj.BodyFormat = 2      'htmlテキストに変更
    mailItemObj.To = toaddress      'to宛先をセット
    mailItemObj.CC = ccaddress      'ccをセット
    mailItemObj.subject = subject   '件名をセット
    mailItemObj.Body = mailBody & vbCrLf & Display & vbCrLf & vbCrLf & credit   'メール本文 改行 改行 クレジット

< 使用 Excel:Excel2021、使用 OS:Windows11 >


 状況が不明なので確認です。
 > セルB14にCフォルダのハイパーリンクを入力しておりますが
 そのリンク先はCフォルダのファイルなんですか?
 そのメールを受け取った側が、メール発信者のCフォルダにアクセスでもできるんですか?
 リンクじゃなく、素直にファイルを添付したらまずいんですか?
(xyz) 2023/09/20(水) 20:08:29

どうもありがとうございます。
ハイパーリンクの設定で指定フォルダ内のファイルを選択させたいです。ファイルの直接の添付は考えておりません。
(k) 2023/09/20(水) 20:21:36

また、該当のcフォルダにアクセスできる権限は全員ついております。
(k) 2023/09/20(水) 20:32:12

 ああ、そうですか了解。
 それならanchorタグ、つまり<a> ですね。これを使ったHTMLにしたらいかがですか?
(xyz) 2023/09/20(水) 20:52:41

ありがとうございます。
具体的にコードの入力方法をしりたいのですが、
file://c:/folderpath/filename
とすればどのように記載すれば良いのでしょうか?
(k) 2023/09/20(水) 21:08:48

補足:上記のurlはセルB14内に入力するものです。
(k) 2023/09/20(水) 21:20:43

 <a href="file://c:/folderpath/filename">ここをクリック</a>
 というタグにして試して下さい。
 私はここまでです。
(xyz) 2023/09/20(水) 22:08:51

質問と関係ない話もありますが何点か。

■1
既に回答がありますが、HTMLタグで修飾するだけでいいのではないでしょうか?

■2
困りはしないでしょうが「subject」や「Display」は紛らわしいので変数名に使うのは避けたほうがいいような気がします。(好みの問題かもですが)
また、全体が提示されていないので、提示された部分だけ見ると一旦変数に受ける必要性は薄い気がします。

■3
提示されたものは、アーリーバインディングとレイトバインディングがまぜこぜになっているように思います。(細かい話ですがちょっとだけ気になりました。)

■4
ということを踏まえて↓のようにしてみてはどうでしょうか?

    Sub 名もなきマクロ()
        Dim mailItemObj As Object
        Set mailItemObj = CreateObject("Outlook.Application").CreateItem(0)

        With ActiveSheet
            mailItemObj.BodyFormat = 2      'html形式に変更
            mailItemObj.To = .Range("B10").Value   'To宛先
            mailItemObj.CC = .Range("B11").Value   'Cc宛先
            mailItemObj.Subject = Format(Date, "yyyy/m/d")    '件名

            mailItemObj.HTMLBody = _
                "<p>" & .Range("B13").Value & "<br>" & _
                "<a href=""" & .Range("B14").Value & """>" & .Range("B14").Value & "</a>" & "<br><br>" & _
                .Range("B15").Value & "</p>"
        End With

        mailItemObj.Display
    End Sub

(もこな2) 2023/09/21(木) 00:15:53


xyz様、どうもありがとうございます。
もこな2様、全体までお直しいただいて大変助かりました。早速こちらのVBAにて実行したところ、うまく反映されました。ただ一つ問題があり、このメールの受信者がリンク先を開くことができません。厳密にいえば、誰かが開いていないときは開けるようですが、誰かが開いているとき開けない感じです。開こうとしたら、ファイル形式またはファイル拡張子が正しくありません。ファイルが破損しておらず、ファイル拡張子とファイル形式が一致していることを確認してください。 と表示されます。
(k) 2023/09/21(木) 17:21:09

話がよく理解できません。
【手作業】で【同じように】メールを送ったら、問題にはならないのですか?
改行なども含めて、B14セルの値に間違いはないのですか?
 ※トピ主が【Cフォルダ】と表現されているものの正体が
   こちらにはわかりませんので、その辺は自己解決するしかないとおもいます。

(もこな2 ) 2023/09/21(木) 19:00:21


はい、B14セルの内容に間違いはなく、メール送信前のドラフトの時点や、私宛に送ってみてもリンクは開くことができますが、他人に送るとそのリンクが開かず、上記のエラー表示となるようです。なお、リンク先のfileはxlsm形式のthisworkbookとなります。事前に指定のフォルダ内に上書き保存し、その後上記マクロを実行しメール送信、メール本文にはそのマクロが保存されているworkbookがリンク先となります。
(k) 2023/09/21(木) 19:28:39

再掲になりますが、手作業で同じように(作成して)【メールを送ったら】、(相手の方が開こうとしても)問題にはならないということですか?

例えば、↓のような【フォルダ(及びファイル)】へのアクセス権を全員がもっているとしても、別の端末から"C:\hoge\〜"でアクセスできないのはわかりますよね?

 C:\hoge\Cフォルダ\共有.xlsx

【xlsm形式のthisworkbook】とのことですが、ネットワーク越しにアクセスできるかは関係ありません。
もっと言うと"thisworkbook"といわれても意味が分かりません。(おそらくワークブックの書き間違いでしょうが)

重要なのは、【Cフォルダ】と表現されているものへ、【あなた(が使っている端末以外)】から【送ったリンク】でアクセスできるかどうかです。ですから"自端末"でいくらテストしてもあまり意味がないです。

 ※【\\123.456.789\Cフォルダ\共有.xlsm】というリンクを送っているなら、まだわかりますが・・・・

したがって、まずは【手作業】で【メールを作成してから送信し】相手の方に【Cフォルダのファイルが】開けるかどうか試してもらってはいかがでしょうか?

(もこな2 ) 2023/09/21(木) 20:08:35


失礼。括弧の位置が間違っていて誤解を与えかねない表現になってました。
 誤  重要なのは〜【あなた(が使っている端末以外)】から【送ったリンク】でアクセスできるかどうかです。
 正  重要なのは〜【あなた(が使っている端末)以外】からアクセスしようとしたときに【送ったリンク】で到達できるかどうかです。

要は、【Cフォルダ】の実体が共有フォルダでもファイルサーバー上のフォルダでも、はたまたクラウド上のものでも構いませんが、そのリンク(パス)で他の端末からアクセスできるのかどうか確認したほうがよいとおもいます。

(もこな2 ) 2023/09/21(木) 20:32:52


ありがとうございます。はい、リンクパスで手入力で送信し他人のpcからみてもらいましたが、やはりみれません。ただお伝えしているように、それはthisworkbook(本マクロを保存しているワークブックという意味で使用してます)を私が開いている時にのみ発生し、閉じた状態だと問題なく開くことができるようです。私が開いた状態だと読み取り専用となるためなのか、リンク(thisworkbook)を開くことができないのです。おそらく読み取り専用がうまく機能せず開く状態にならないのがポイントかと思いますのでもしお分かりのようでしたらとお伺いさせていただきました。
(k) 2023/09/21(木) 21:45:15

>リンクパスで手入力で送信し他人のpcからみてもらいましたが、やはりみれません。
ならば、まずは【(メール作成)マクロの問題ではない】ことは確定ですね。

>thisworkbook(本マクロを保存しているワークブックという意味で使用してます)
既にコメントしたとおりです。

>おそらく読み取り専用がうまく機能せず開く状態にならないのがポイントかと思います
こちらもコメント済みですが、こちらで再現できませんから、ご自身でトライ&エラーして検証頂くしかないでしょう。

最後まで、【Cフォルダ】の実体が明かされることはなかったですが、共有フォルダ、ファイルサーバー上のフォルダに格納しているのであれば、使用中かどうか判定できるでしょうから、目的のブックを開くためだけのマクロブックを作成し、そちらを共有されてはどうでしょうか?(スクリプトでもたぶんok)

(もこな2 ) 2023/09/21(木) 22:13:23


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.