疑問・質問・マクロの要望 (2020)」への194件のフィードバック

  1. 予定表で、
    定例会議をほかユーザーと共有しているのですが、
    ある個別の会議を このアイテムのみ開く で調整した際、

    ほかユーザーの予定は変わりますが、
    私の予定のみ一瞬変わるのですが、
    すぐに私の予定だけ変更前に戻ってしまいます
    おかしな設定を下覚えはないのですが、
    何か設定を変えることで処置できるならすぐに対応したいです

    • 以下のレジストリを設定して回避するか試してみてください。

      キー: HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Outlook\Cached Mode
      名前: Upload
      種類: REG_DWORD
      値: 1

  2. つい先日よりOutlookを使用し始めて、こちらにお邪魔して勉強させて頂いております。
    (環境:WIN10, Office365)
    さて、「名前が適切ではありません」のコンパイルエラーで困っております。
    マクロは例の「豆腐メール」受信後の削除、及びメール受信後の添付エクセルファイルを
    デスクトップへ保存する の2種類のマクロを上下並べて記述させましたところ、
    上述のエラーが出ております。
    具体的には、Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    のところが、2種類のマクロ故に2重になっていることでのエラーだと思いますが、その回避方法を
    ご教示お願いしたいと存じます。いろいろ試しましたが、初心者故に対応が不明です。
    (豆腐メール用マクロは、サブ プロシージャがなく、もう一方はそれがあることで、混乱しているのかも知れません) どうぞよろしくお願い致します。

  3. いつも参考にさせていただいております。

    現在outlook2010を使用しております。

    特定の文字列から始まる件名のタスクを
    実施済みにした際に
    エクセルシートに①件名②タスク所有者の氏名
    が転記されたいと考えております。

    よろしくお願いいたします。

  4. 初めてOutlookVBAに挑戦しており、とても参考にさせて頂いております。
    どうしても実現したいものがあり、お力添えいただけないでしょうか。

    本文にHTMLの表のあるメールが毎日数件届きます。
    1時間ごとにマクロを実行し、表内の項目を既存のエクセルの最下行に追記していくようにしたいです。

    HTML表は列数は2で固定、行数が変動します。

    「HTML 形式のメールの本文中に含まれる表を Excel にコピーするマクロ」を加工して作っているのですが、
    オブジェクトに関するエラーが出てしまい打破できません。
    何卒宜しくお願いします。

    • どのようなマクロのどのようなコードでエラーになっているかがわからないのですが、具体的なマクロやエラーの内容などを教えていただくことは可能でしょうか?

      • ご返信ありがとうございます。
        参考にしているのは、https://outlooklab.wordpress.com/2015/06/06/html-%e5%bd%a2%e5%bc%8f%e3%81%ae%e3%83%a1%e3%83%bc%e3%83%ab%e3%81%ae%e6%9c%ac%e6%96%87%e4%b8%ad%e3%81%ab%e5%90%ab%e3%81%be%e3%82%8c%e3%82%8b%e8%a1%a8%e3%82%92-excel-%e3%81%ab%e3%82%b3%e3%83%94/ そのままです。
        オブジェクトに関するエラーは乗り越えられました。お騒がせしました。
        Excelにペーストする際にテキストのみにしたいのですが、貼付け後にExcel側で書式を変更するしか無いでしょうか。

      • Paste メソッドの代わりに PasteSpecial “テキスト” を使用すれば可能です。
        例えば、

        objBook.WorkSheets(1).Paste

        objBook.WorkSheets(1).Paste “テキスト”

        とします。

  5. OutlookVBA初心者です。

    お力添えを頂きたく初投稿させて頂きます。

    予定表に関して以下イベントのハンドラを実装したいのですが、
    どのようにしてイベントを検知すればよいかわかりません。

    ・予定表に新たにスケジュール登録された場合
    ・予定表に存在するスケジュールの件名や時間等のプロパティが変更された場合

    上記タイミングを検知し、外部システムへ通知を送りたいと思っております。

    コメント等頂けますと幸いです。

    よろしくお願い致します。

  6. OutlookVBA初心者です。
    1クリックで以下の作業を行いたいと考えております。
    (環境:Win10/Outlook2013)

    ・本文の一部だけを抜粋してヘッダーまたはフッターに表示
     もしくは件名の後ろから7文字
    ・抜粋した文字列をバーコード表示(バーコードフォントは入っております)
    ・クイック印刷

    抜粋する条件は指定文字列の後ろの7文字です。
    (バーコードフォントはBC39のため前後に*を結合する必要があります)

    また、実現出来たら他の(遠隔地の営業所)PCにも同様の設定を行いたいのですが、
    直接使用しているPCにコードをコピペする以外に方法はありませんでしょうか?

    お力添えいただけますと幸いです。
    何卒宜しくお願い致します。

  7. Outlook VBA 初心者です。
    Outlook 2016を使用しています。

    Msg BoxとInput Boxの併用について。
    まずMsg Boxで、YES/NOの質問。Noの場合はそのまま送信。
    YESをクリックした場合で、Input Boxを表示させ、任意の文字を入力させる。
    入力させた文字は、メール本文の文末に『Checked (任意の文字)』と追記したい場合のコードをご教示いただきたく。
    メッセージボックスからインプットボックスまでのつなぎ方がいまいちわかりません。
    お力添えいただきますと、幸いです。
    宜しくお願いいたします。

    • objMail が本文を変更するメールアイテムとすると、以下のようなコードになります。

      If MsgBox(“確認メッセージ”,vbYesNo) = vbYes Then
      strText = InputBox(“任意の文字列:”)
      objMail.Body = objMail.Body & “Checked (” & strText & “)”
      End If

      • 返信遅くなって申し訳ありません。

        コード的には以下のようなものを作っているのですが、最後のObjMailでエラーが起こります。
        申し訳なくも初心者の為、原因がよく分らずです。
        お手数ですが再度ご教示いただけると幸いです。

        Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
        Dim objMail As MailItem
        Dim strText As String
        If Item.Attachments.Count > 0 Then
        If MsgBox(“Alert” & vbCrLf & _
        “This mail has attachment.”, vbYesNo + vbExclamation + vbDefaultButton2, “attachment”) = vbYes Then
        strText = InputBox(“Please input appropriate attachment number.”)
        objMail.Body = objMail.Body & “checked ” & strText
        End If
        End If
        End Sub

      • 前回のコメントのコードは objMail に本文を変更するアイテムが格納されている場合のコードです。
        上記のコードでは変更するアイテムは Item という変数に格納されているようですので、objMail ではなく Item とします。
        具体的には以下の通りです。

        Item.Body = Item.Body & “Checked ” & strText

    • またまた返信おそくなって申し訳ありません。
      ご教示頂きましたコードで本文追記までできました。

      少し応用になりますが、MsgBoxのYES/Noの後、ラジオボタン形式にし、選択したボタンを本文に記載する方法はどうのようにしたら良いでしょうか。
      またその際、キャンセルもしくは×をおした場合には、送信キャンセルとしたい場合についてのコードもご教示いただけると幸いです。

      • このような動作をさせるにはマクロでダイアログ フォームを作成する必要がありますが、GUI の作成をブログで説明するのはちょっと困難です。
        例えば、選択肢を以下のように表示し、数字を入力するという方法はどうでしょうか?

        1) テキストA
        2) テキストB
        3) テキストC

  8. アウトルックメールから送れないメールアドレスにメールを送るには、どうしたらいいですか?

    例→ メールアドレスの@の直前にピリオド(.)がある。

    よろしくお願いします。

  9. Outlookマクロについて質問です。
    メール本文から特定文字以降を抽出したいです。
    Outlook2016です。

    ★条件
    ・新規メールを受信後、件名に”パスワード”とあったら実行

    ★やりたいこと
    ・下記を指定Excel(C:\test\PW.xlsx)に書き出し
    ・件名をA2以降に書き出し(空白行の最終行)
    ・本文内の【パスワード】後に改行してあるパスワードをA3以降に書き出し(空白行の最終行)

    ★例
    ******* このようなメールを受信 *******
    〈件名〉
    パスワード送信
    〈メール本文〉
    お疲れ様です。

    【パスワード】
    ABC123

    ******* 指定Excel *******
    (A2)       (A3)
    パスワード送信  ABC123

    以上、お力を貸していただきたいです。
    少し急ぎ目だと助かります。
    よろしくお願いいたします(@_@)

  10. はじめまして。
    こちらのサイトをいつも参考にさせていただいております。
    投稿されていた添付ファイルを保存するマクロを実行しているのですが、
    会議通知が来るたびにエラーが起こり、デバックが必要となります。
    ○エラー箇所
    > Set mail = Application.Session.GetItemFromID(strEntryID)
    会議通知をよけるにはどうすればよいでしょうか。

    ○実行マクロ
    Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim i As Integer
    Dim id As Variant

    If InStr(EntryIDCollection, “,”) = 0 Then
    SaveAttachments EntryIDCollection
    Else
    id = Split(EntryIDCollection, “,”)
    For i = LBound(id) To UBound(id)
    SaveAttachments id(i)
    Next
    End If

    End Sub

    Private Sub SaveAttachments(ByVal strEntryID As String)
    Dim attach As Attachment
    Dim file As String
    Dim bat As Object
    Dim mail As Object

    Set bat = CreateObject(“WScript.Shell”)
    Set mail = Application.Session.GetItemFromID(strEntryID)

    For Each attach In mail.Attachments
    With attach

    ‘保存する添付ファイルをファイル名で指定
    If Not .FileName Like “ファイル名” Then
    GoTo L1
    End If

    ‘保存先のフォルダを指定
    file = “フォルダ” & attach.FileName
    .SaveAsFile file

    ‘実行するbatファイルを指定
    bat.Run “batファイル”, 1, True

    L1:
    End With
    Next

    Set bat = Nothing
    Set mail = Nothing
    End Sub

    • 本来なら mail を Object として定義しているので、GetItemFromID で会議出席依頼のアイテムが取得されてもエラートはならないはずなのですが…
      原因がわからないので On Error Resume Next を Application_NewMailEx の冒頭に挿入してみてください。
      こうすると、エラーが発生しても無視されます。

  11. 始めまして。こちらのサイトで勉強させていただいております。
    VBA初心者で浅学で誠に申し訳ございませんが、お力添え頂けないでしょうか。
    (環境:Win10/Outlook2013)

    <実現したいこと>
    ・特定サブフォルダに見積メールが新規格納されたら、管理簿登録するExcelマクロを実行する。
    ・管理簿登録時の引数は、メール本文に記載の案件名とする。

    <エラー箇所>
    ・Outlookマクロ→Excelマクロの呼び出し方法が分かりません。
    ※「特定サブフォルダに見積メールが新規格納されたら」の部分は過去質問を基に作成予定です。

    ===エラーになったマクロ===
    Sub 呼び出し()
    Dim BookName As String
    BookName = “C:\test.xlsm”
    Application.Run “‘” & BookName & “‘” & “!見積マクロ”
    End Sub
    ================

  12. 貴Windows 転送ツールで転送後に Outlook で連絡先がアドレス帳に表示されない現象について
    の表記で紹介されたvbsをoutlook2019で実行したところ
    行25 文字1 エラー 型が一致しません UBound コード800A000D 実行エラーが出ました。
    お忙しいところ恐縮ですがご教授いただけると幸甚です。
    よろしくお願いいたします。

    • Outlook 2019 で実行してみたのですが、正常に動作しました。
      プロファイルのレジストリ情報がスクリプトで修正できないような不整合となっている可能性があるので、プロファイルを再作成してみてください。

  13. いつも参考にさせてもらっています。
    Outlook365(2016?)で、受信メールの表示画面のフォントをすることはできない
    でしょうか?
    テキスト形式でひな型のフォントを固定長フォント(MS ゴシック)に変更して
    いますが、受信したメールは罫線などの記号が適用されていないため、罫線で
    作成された表がとても見辛いのです。

    ちなみに、メール本文をテキストエディタにコピー&ペーストすると、きちんと
    表が表示されます。
    また、メール作成時も問題なく表として表示されているのですが、自分宛に
    送信してみると、やはり、表が崩れて表示されます。
    もしかすると、文字コードの問題なのかもしれませんが、まずは、受信した
    メールのフォントを変更する方法があれば、ご教示ください。

    以上です。

    • 相手が HTML 形式やリッチテキスト形式で送信してきた場合、テキスト形式のために設定したフォント情報は使用されず、相手が指定したフォントで表示されます。
      受信側でフォントを強制することはできません。
      すべてのメールをテキスト形式で表示するようにすれば受信側で指定したフォントで表示されますが、その場合は本文中の図やテーブルが失われたりしてかえって見づらくなる可能性もあります。
      表の埋め込みをしたいなら、罫線文字で表を作るのではなく、HTML 形式で表を作ったほうが良いのではないかと思います。

  14. はじめまして。いつもこのサイトにて勉強させてもらっています。
    Excelから会議開催通知を送信するマクロを作成したのですが、本文のフォントやサイズ、文字色の変更方法がわかりません。行毎にそれぞれ指定した書式にすることは可能でしょうか?
    また文章内に例えば、ファイル名.xlsxと書いた部分にハイパーリンクを設定する方法を教えて頂けると大変助かります。
    よろしくお願い致します。

  15. すいません。もう1つ教えて頂きたいです。
    Excelからメールの本文を作成する際もフォント、サイズ、文字色を変更する方法も教えて頂けると助かります。行毎や何行目の何文字目から何文字目までのように指定した位置を変える事も可能でしょうか?又、ハイパーリンクの設定方法も教えて頂けると助かります。
    よろしくお願い致します。

    • 残念ながら会議出席依頼の本文でフォントのサイズや色などの書式を設定することはできません。
      会議出席依頼自体は HTML 形式やリッチテキスト形式をサポートしているのですが、Outlook オブジェクト モデルでは会議出席依頼はテキスト形式の本文しか扱えないのです。

  16. Outlook2016を使用しています。先日から受信したメールの画像が四角い枠で表示され
    画像が表示されなくなりました。
    以前は、メールの編集オプションの詳細設定の図をイメージ枠で表示するという項目にチェックが
    入っていると
    同じような現象が起こっていたようですが、システムの更新があってその項目が無くなっています。
    どうすれば表示できるようになるでしょうか?

    • Outlook 2016 でも [図をイメージ枠で表示する] という項目は残っています。
      この設定はメールの新規作成時のウィンドウの [ファイル]-[オプション] で表示されるものなのですが、どこの [オプション] で確認されたのでしょうか?

  17. はじめまして
    Outlook 2016 を使用しています。
    メール自動転送のマクロの相談です。

    受信メールを転送時、送信メールの差出人は「自分」のアドレスとし、
    本文一行目には”転送します”の一文を追加したいです。
    受信メールの条件や転送先は仕訳ルールで自分で設定します。

    経緯:社内にて、非常勤社員から送られたメールを別の非常勤社員へ転送する(お互いのメールアドレスは分からないようにする)という煩わしい作業が日に10件近くもあり解決方法を模索していました。似たような質問はここでいくつか見つかったのですが私ではプログラムが読み解けず質問に至りました。大変初歩的な質問で申し訳ありませんが、上記解決できるマクロをご教授願います。

    • 残念ながら転送先をルールで指定するという場合、マクロで本文を編集することはできません。
      実装するとなると、転送処理自体をマクロで処理し、転送先の指定もマクロ内で行う必要があります。

  18. いつも大変お世話になっております。
    業務効率化のために実現したい機能があり、ご支援いただけないでしょうか?
    Outlook2016を使用しています。

    社内システムにて受注入力すると受注票(PDF)が添付された出荷依頼メールが送信されます。出荷担当はその都度この添付ファイルを印刷するのですが、日々数十件発生するため自動化したいです。
    そこで当サイトの過去事例を参考に以下のようなマクロを作成しました。メール受信イベントをトリガーに、条件に合致するメールだったら、添付ファイルを保存→印刷→フォルダ移動を実行します。

    Private Declare Function ShellExecute Lib “shell32.dll” Alias “ShellExecuteA” _
    (ByVal hWnd As Long, ByVal lpsz0p As String, ByVal lpszFile As String, _
    ByVal lpszParams As String, ByVal lpszDir As String, ByVal FsShowCmd As Long) As Long

    Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim objItem As Object
    Set objItem = Session.GetItemFromID(EntryIDCollection)
    If TypeName(objItem) = “MailItem” Then
    ‘メールを受信したら添付ファイル保存・印刷・フォルダ移動を実行
    Call PrintAttachments(objItem)
    End If
    End Sub

    Public Sub PrintAttachments(ByVal objMail As MailItem)
    On Error Resume Next
    Const ATTACH_PATH = “C:\受注票PDF\” ‘添付ファイルの保存先フォルダ
    Const FromAddress = “aaaa@bbb.cc.dd” ‘Fromメールアドレス
    Const ToAddress = “wwww@xxx.yy.zz” ‘Toメールアドレス
    Dim objAttach As Attachment
    Dim strFileName As String
    Dim fldInbox As Folder
    Dim fldPrinted As Folder
    ‘件名・From/Toアドレスが条件に合致した場合
    If objMail.Subject Like “出荷依頼【NO. *” And _
    objMail.SenderEmailAddress = FromAddress And objMail.To = ToAddress Then
    ‘添付ファイルが存在する場合
    If objMail.Attachments.Count > 0 Then
    For Each objAttach In objMail.Attachments
    ‘添付ファイル名が条件に合致した場合
    If objAttach.FileName Like “SYUKAIRAI_*.pdf” Then
    ‘添付ファイルを指定フォルダに保存
    strFileName = ATTACH_PATH & objAttach.FileName
    objAttach.SaveAsFile (strFileName)
    ‘保存したファイルの印刷
    Call ShellExecute(0, “print”, strFileName, 0, ATTACH_PATH, 0)
    ‘受信トレイ・印刷済フォルダの取得
    Set fldInbox = Session.GetDefaultFolder(olFolderInbox)
    Set fldPrinted = fldInbox.Folders(“印刷済”)
    ‘印刷済フォルダにメールを移動
    objMail.Move fldPrinted
    End If
    Next
    End If
    End If
    End Sub

    このマクロですが、受信するメールが1件ずつなら問題ないのですが、同時に複数件のメールを受信すると1件だけ処理して残りはスルーしてしまいます。最初の受信イベントを検知して後続の添付ファイル保存・印刷・フォルダ移動の処理をしている間に発生した残りのメールの受信イベントは検知できないようです。

    そこで、受信イベントを検知したら、30秒間待機させて、受信トレイ内のすべてのメールに対して添付ファイル保存・印刷・フォルダ移動を実行するようにしたいのですが、どのようにコーディングすればいいのか分かりません。このマクロのコーディングをお願いできないでしょうか?

    よろしくお願い致します。

    • 残念ながら複数のメールを同時に受信した際にマクロが実行されなくなるという問題についての回避策がまだ見つかっていません。
      Outlook のマクロは常にメインのスレッドで行われるので、マクロの中で 30 秒待機するとその間 Outlook が処理できずに固まってしまうだけで、回避策とはなりません。

  19. たいへんお世話になります。
    OutlookのVBAについての質問です。

    やりたいこと:
    Outlookに複数のアカウントがあります。例えば
    アカウント1 のアドレス:address-1
    アカウント-2 のアドレス:address-2 とした時

    新規メール、返信、転送 などのウィンドウを開いた時に、
    BCCに差出人アドレスのaddress-1 またはaddress-2を自動で入力したい。

    質問:
    ・アカウント-1が選択されているとき、address-1 を変数の値として取得したい
    ・アカウント-2が選択されているとき、address-2 を変数の値として取得したい
    VBAのSender PropertyやSenderEmailAddress Property などの具体的な使い方が良く分からない。

    参考マクロ:
    Outlook 2013 でメール送信時に常に BCC を付加する
    https://www.compnet.jp/wordpress/archives/2990

    環境:
    Windows10 Professional 64bit
    Office 2019 またはOffice365

    以上よろしくお願い致します。

  20. こんにちは、よろしくお願いします

    決まった件名のメッセージを受信したら、データを CSV ファイルに保存するマクロ

    を参考にしてパスワードをクリップボードへコピーするようにできました
    ありがとうございます

    それで、この動作を「メール受信時」ではなく「メール選択時」にしたいのですがうまくできません

    Application_ItemLoad に記述すればいいと思ったのですが
    マクロ初心者でオブジェクトの概念が理解不足と感じています

    ■実現したい事
    件名に「[パスワード/Password]」 の文字があるメールをプレビューするか開く時
    本文にある「パスワード : 」より後ろ、改行までの文字をクリップボードにコピーする

    ■使用環境
    Windows10
    outlook2016

    よろしくお願いいたします

  21. はじめまして 。VBA初心者です。
    仕事柄、グラフなどの図を画像形式で共有することが多く、次のようなマクロを探しています。
    snippingツールやスクリーンショットで既にクリップボードにコピーされている画像を、outlookの新規メール本文にペーストするマクロは既に公開されてますでしょうか?宜しくお願い申し上げます。

    • 現在表示している新規メールの本文にクリップボードのデータをペーストするには以下のようなマクロを実行します。
      Public Sub PasteToBody
      ActiveInspector.WordEditor.Application.Selection.Paste
      End Sub

  22. お世話になっております。
    いつも拝見し参考にさせていただいております。
    今回、私のoutlook予定表を複数人と共有したいと考えているのですが、
    私のoutlookからエクスポートしたファイル(csv)を、
    他人のoutlookにインポートするVBAはないでしょうか?
    以前の投稿で、自分でエクスポートしたものを編集し、再インポートするものはございましたが、
    今回はエントリIDなどをキーにせずに、誰でもcsvファイルをインポート実施できるようにしたいです。

    ◆インポート項目
    件名,開始日,開始時刻,終了日,終了時刻,終日イベント,アラーム オン/オフ,アラーム日付,アラーム時刻,会議の開催者,必須出席者,任意出席者,リソース,プライベート,経費情報,公開する時間帯の種類,支払い条件,場所,内容,秘密度,分類,優先度

    ◆バージョン
    outlook office365

    ◆以前の投稿
    https://outlooklab.wordpress.com/2018/04/28/%E4%BA%88%E5%AE%9A%E8%A1%A8%E3%82%92-excel-%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AB%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88%E3%81%97%E3%80%81excel-%E3%83%95%E3%82%A1%E3%82%A4/

    よろしくお願いします。

    • こちら、CSV でなければならないのでしょうか?
      エクスポートしたデータを編集することなく同じ Outlook にインポートするのであれば、PST がベストと思われます。
      CSV とした場合は会議の開催者などの情報は維持できません。

  23. 初めて投稿します。

    セキュリティ対策のため、添付ファイルを送受信する時に暗号化zipをしなければいけないのですが、送信時にlhaplus等に渡すことで自動化はできたのですが、
    受信メールに対して、解凍や、添付ファイルの削除はできました。
    しかし、解凍した添付ファイルを元の受信メールに付けようとする(attachments.add)と、サポートされていないメソッドとしてエラーになります。

    • どのようなマクロでエラーとなるのでしょうか?
      Attachments で Add がサポートされないメソッドになる理由がちょっとわからないですね。

  24. はじめまして。
    Outlook2016を使用しています。
    ToまたはCcに、特定のドメインが含まれている場合、Bccを追加するマクロを探しています。
    「社外のアドレスを宛先に含む場合のみ BCC を追加するマクロ」はありましたが、社外一律ではなく、特定ドメインを含む場合のみ実行されることが希望です。

  25. こんにちは。

    いつもこちらのサイトのsourceを参考にさせていただいております。

    初めて投稿をさせていただきます。

    OutLook2016 / Windows10の環境でExchangeメールボックスサーバーで利用しています。仕分けルール以外の仕訳として、以下を作成してみましたところ、問題なく動く時もあれば、受信時のコード冒頭の「宛先⁼ objMsg.To」のところでエラーが発生し、「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」と出てしまう場合があります。
    また、同じコードをSubプロシージャにコピーすると、振分けの条件に当てはまるにも関わらず、振分けされる場合とされない場合があります。
    上記、2点についてお知恵をお借りすることはできますでしょうか。

    参照設定は、
     Visual Basic For Applications
     Microsoft Outlook 16.0 Object Library
     OLE Automation
     Microsoft Office 16.0 Object Library
    です。
    ———————

    Function Furiwake1(ByVal 項目1 As String, ByVal 振分けWord1 As String, ByVal 振分けFolder As String) As String

    If InStr(項目1, 振分けWord1) 0 Then
    Furiwake1 = 振分けFolder
    Else
    Furiwake1 = “”
    End If

    End Function

    Function Furiwake2(ByVal 項目1 As String, ByVal 振分けWord1 As String, ByVal 項目2 As String, ByVal 振分けWord2 As String, ByVal 振分けFolder As String) As String

    If InStr(項目1, 振分けWord1) 0 And InStr(項目2, 振分けWord2) 0 Then
    Furiwake2 = 振分けFolder
    Else
    Furiwake2 = “”
    End If

    End Function

    Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)

    Dim objMsg

    If InStr(EntryIDCollection, “,”) = 0 Then
    Set objMsg = Session.GetItemFromID(EntryIDCollection)

    差出人 = objMsg.SenderEmailAddress
    宛先 = objMsg.To
    CC = objMsg.CC
    BCC = objMsg.BCC
    件名 = objMsg.Subject
    本文 = objMsg.Body
    作成時間 = objMsg.CreationTime
    送信時間 = objMsg.SentOn
    アプデ人 = objMsg.SentOnBehalfOfName

    結果 = “”

    ‘ 結果 =Furiwake1(項目1 , 振分けWord1 , 振分けFolder)
    ‘ 結果 =Furiwake2(項目1 , 振分けWord1 , 項目2 , 振分けWord2 , 振分けFolder)

    ‘ If 結果 = “” Then
    ‘ Else
    ‘  GoTo Move_Folder
    ‘ End If

    ‘ ————————————————————————————————————————–

    結果 = Furiwake1(件名, “[P”, “SIM”)
    If 結果 = “” Then
    Else
    GoTo Move_Folder
    End If

    結果 = Furiwake1(差出人, “issues+issues@prod.sim.a2p.com”, “SIM”)
    If 結果 = “” Then
    Else
    GoTo Move_Folder
    End If

    ‘ ————————————————————————————————————————–

    次へ:

    Exit Sub

    Move_Folder:
    ‘———————–(フォルダ移動)
    Dim 振り分けfolder As String
    Dim fldCurrent As Folder
    On Error Resume Next
    Dim fldMoveTo As Folder

    振り分けfolder = 結果

    ‘ 表示中のフォルダーを取得
    Set fldCurrent = ActiveExplorer.CurrentFolder
    ‘ 表示中のフォルダーの下の検索文字列と同じ名前のフォルダーを取得
    Set fldMoveTo = fldCurrent.Folders(振り分けfolder)
    If fldMoveTo Is Nothing Then
    ‘ フォルダーがなければ作成
    Set fldMoveTo = fldCurrent.Folders.Add(振り分けfolder)
    End If
    objMsg.Move fldMoveTo

    Set fldMoveTo = Nothing

    GoTo 次へ

    Else
    Dim strIDs
    Dim i
    strIDs = Split(EntryIDCollection, “,”)
    For i = LBound(strIDs) To UBound(strIDs)
    Application_NewMailEx strIDs(i)
    Next
    End If
    End Sub

    ———————

    どうぞよろしくお願いいたします。

    • まず、objMsg.To でエラーになる点については、受信メールが通常のメールではなく会議出席依頼だったような場合に発生します。
      エラーを回避するには、Set objMsg… の後に以下の 1 行を追加してください。
      If Not objMsg.MessageClass = “IPM.Note” Then Exit Sub

      同じコードをSubプロシージャにコピーすると、というのが、どの範囲をコピーするのかがちょっとわかりませんでした。
      Debug.Print によりプログラム実行中の変数などをイミディエイトウィンドウに出力することができますので、振り分け条件の対象がどのような値だったのかなどを適宜出力させてデバッグするとよいと思います。

  26. こんにちは。
    ありがとうございます、いつも当サイトで勉強させてもらっています。

    (環境:Win8.1、Outlook2013)
    業務改善を図るべく、定型的な処理をVBAで何とか楽ができないかいろいろと自動化しているところですが、なかなか解決できない難問にあたってしまいました。

    質問:OutlookのVBAで、特定のプロシージャから他のプロシージャを変数で呼び出すことはできますか?

    以下に示すような同一モジュール内で、プロシージャ「sample」からプロシージャ「sample2」を呼び出す場合、直接指定であれば「Call sample2」のように記述することで可能ですが、変数(例として「aaa」)でプロシージャ「sample2」を呼び出すことは可能でしょうか?
    (ExcelのVBAの「Application.Run」はOutlookにはないようで、記述してもエラーになります)

    よろしくお願いします。


    Sub sample()
     ・・・
     Dim aaa as string
     aaa = “sample2”
     ・・・
     (他のプロシージャを呼び出し)
     ・・・
    End

    Sub sample1()
     ・・・
     ・・・
    End

    Sub sample2()
     ・・・
     ・・・
    End

    • 残念ながら Outlook で変数名を使用してプロシージャを呼び出すことはできません。
      ただ、Outlook のマクロでわざわざ変数名を使用した呼び出しをする意図がちょっとわかりかねます。
      どのような理由で変数名を使いたいのでしょうか?
      単に以下のようにするだけでは問題ありますか?

      Select Case aaa
      Case “sample1”
      sample1
      Case “sample2”
      sample2
      End Select

      • 回答ありがとうございました。
        変数名で別のプロシージャを呼び出すことは、そのほうが便利(編集等をした際に)と思ったため、質問させていただきました。
        現在はOutlookで定型業務がいくつかあるため、最初に定型業務のリストを「Inputbox」で表示して、実行したい定型業務を番号で入力してもらって、その番号を「SelectCase」のキーにして別のプロシージャを呼び出すというマクロを組んでいます。
        定型業務リストについては追加・修正等が必要なこともあるので、Excel表を参照しています(追加等があるたびにプロシージャを変更するのが面倒なため)。
        そこで、プロシージャ名についてもExcel表に記載して、それを変数に入れて、その変数でプロシージャを呼び出せたら楽かなと思った次第です。
        でも、OutlookのVBAでできないというのであれば仕方ないですね。
        ありがとうございました。

        <参考>(このような形を目指していました)
        Excel表
        A   B       C
        1 定型業務名1 プロシージャ名1
        2 定型業務名2 プロシージャ名2
        3 定型業務名3 プロシージャ名3

        ’定型業務リスト
        Dim GyomuList As String
        ‘リスト選択番号
        Dim Answr As Byte
        ‘プロシージャ名
        Dim PName As String
        ・・・
        ‘リスト選択
        Answr = InputBox(“リストから選択(半角数字)して下さい。” & vbCrlf & GyomuList)
        ‘プロシージャ名格納
        PName = (プロシージャ名)上記Excel表のC列を「vlookup」で参照
        ‘プロシージャ呼び出し
        Call Pname

  27. お世話になっております。

    以前作成しておられます、
    「受信したメールを自動的に MSG ファイルとして保存するマクロ」
    の送信版(送信したメールを自動的にMSGファイルとして保存)がほしいです。

    よろしくお願いいたします。

  28. はじめまして。はじめてのVSTOと格闘中です。
    閲覧ウィンドウに表示されたメール本文のハイパーリンクの右クリックメニュー(context menu)から
    当該ハイパーリンク(URL)をクリップボードに保存するアドオンを作りたいです。
    現在リボンUIを拡張して、コールバック関数を呼ぶところまでは実装できているのですが、肝心の当該URLを変数に格納するところがうまくいきません。右クリックした対象を扱うオブジェクトがどれなのか、よくわかっていません。解説いただけると幸いです。
    よろしくお願いいたします。

  29. いつも参考にさせていただいています。
    選択されたメールに対して返信したか確認し、返信済みの場合、その返信メールのオブジェクトMailItem)を取得する方法を参考にさせていただき、送信したメール(送信済みメール)に対して、回答が届いているか、届いていたら受信トレイからメールアイテムを確認して開く方法を模索しています。Outlook2016では、送信メールにEntryIDが付与されないという記事を読み、行き詰っています。なにか良い案があれば教えていただけますでしょうか。
    どうぞよろしくお願いいたします。

  30. はじめまして。
    取引先へのそれぞれ異なる複数の添付ファイルをつけての一斉メール送信を行うにあたり、
    初めてoutlookを使用することとなり、自動化に向けていろいろと情報収集をする中でこちらに
    たどりつきました。
    参考にできそうなアーカイブ[Excelのリストにしたがってファイルを添付して送信するマクロ]も少し内容が異なる様で、お力をお貸しいただければ幸いです。

    OS Windows10
    使用ソフト Excel2016 outlook2003
    やりたいこと・環境
    ◯環境
    社名とメールアドレスの一覧があります。(アドレス.xls)
    ファイル名に社名のついたエクセルファイルとPDF(同一社あて複数の場合は社名のあとに数字)がそれぞれ別に1つのフォルダに入っています。
    メール件名は統一です。
    ※Aフォルダ内にアドレス.xls / エクセルフォルダ / PDFフォルダ というイメージです。

    ◯やりたいこと
    本文は基本的に1種類ですが、宛名のところに社名を差し込みたい。(アドレス.xlsに記載のもの)
    各社宛に、エクセルファイルとPDFを添付して送信したい。
    この時、添付したいエクセルファイルは1つですが、PDFは0〜複数あります。
    アドレス.xlsに記載があっても添付ファイルがエクセル、PDF共に無い場合は送信しない。(いずれかの場合は送信)

    どうぞよろしくお願いいたします。

  31. いつも参考にさせていただいております。
    受信トレイにあるメールを Inspector で取り扱いたいのですが
    ・受信トレイ内のあるメールをダブルクリックしたとき
    ・すでにダブルクリックで開いてあるメールが複数あり、そのなかから1つのメールを選択したとき
    の2種類で他のマクロ呼をび出したいのですが、ご紹介いただけますか?

  32. お世話になっております。
    いつも拝見し参考にさせていただいております。
    AシステムとBシステムが承認されたときに通知・もしくはメールしたいです。
    1つの案件(No:X000000000)に対し、A・Bの2システムで承認されなければ作業ができないようになっています。
    Aシステム、Bシステムからそれぞれ承認メールは届きますが、タイミングもばらばらの為、確認に時間がかかっています。
    メールの件名も違う為、ソートしても並ばないのです

    Aシステムメール件名「【Aシステム】承認連絡(X000000000)」
    Bシステムメール件名「[Bシステム]No-X000000000 が承認されました」

    ——–
    Aシステムが届いたとき、Bシステムメールを確認して、同じX0000000があれば通知、もしくは自分に再度メール送信をするようなマクロは作れないでしょうか(A⇒B、B⇒Aどちらもあり得ます)

    もしくは何かいい方法はないでしょうか?
    メールが届いたら件名を編集してX000000000を先頭にするとかも考えたのですが…できそうでしょうか
    ExcelはVBAをよく使いますが、outlookに関しては正直知識もなく、助けてください。よろしくお願い致します。

  33. OutlookVBA初心者です。
    いつも拝見しながら勉強させていただいております。
    この度お力添えいただきたくコメントさせていただきました。

    毎日ファイル添付の状態で送られてくるメールを、
    添付ファイルをつけたまま別の人に転送する手前の下書き状態まで作成したいと思っております。
    その際に件名を「今日の日付+●●」と直し本文についても、毎回決まった
    文章をお入れしたいのですがどのようなVBAを組めばよろしいでしょうか。

    メールが送られてきたら自動で送信手前の下書き状態までできるようにしたいと思っております。
    お手数をお掛け致しますがお力添え頂けますと幸いに存じます。

  34. MSのこの記事(https://support.microsoft.com/ja-jp/help/290809/how-e-mail-message-formats-affect-internet-e-mail-messages-in-outlook)にある「方法2」、すなわち特定の宛先に対してメールの書式をいつも同じにする(具体的には、ふつうはHTMLでメールを書くが、特定のアドレス宛については必ずプレーンテキストにする)設定をしたいのですが、OUTLOOK 2016ではこの記事にある「インターネット形式」の設定画面が出てきません。この記事の方法は2010限定なのでしょうか。

  35. お世話になっております。

    下記の記事を元に受信後7日が経過しているメールを「Outlook データ ファイル (.pst)」へ
    メールを移動しようとしていますが、移動先の情報を変更しても正しく移動させることが
    できません。
    お手数ですが、移動に必要なマクロについて教えていただけないでしょうか。
    ※ データファイルの受信トレイの下に「7日経過分」フォルダを作成しておりその中へ
    移動したいと考えております。

    ————————-
    タイトル:Outlook 起動時に受信後 14 日が経過しているメールを受信トレイから移動するマクロ
    URL:
    https://outlooklab.wordpress.com/2017/10/21/outlook-%E8%B5%B7%E5%8B%95%E6%99%82%E3%81%AB%E5%8F%97%E4%BF%A1%E5%BE%8C-14-%E6%97%A5%E3%81%8C%E7%B5%8C%E9%81%8E%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%83%A1%E3%83%BC%E3%83%AB%E3%82%92%E5%8F%97/
    ————————-

    お手数をおかけいたしますが、よろしくお願いいたします。

  36. いつも参考にさせていただいております。ありがとうございます。

    1クリックで以下の作業を行いたいと考えております。
    (環境:Win10/Outlook for Microsoft 365)

    ・複数のメールを選択し、同時に印刷する
    ・複数のメールの印刷条件は、ページ指定:1、印刷オプション:アイテムと添付ファイルを印刷する、両面印刷で統一

    複数のメールを選択したうえで、ファイルから印刷コマンドを実行すると、印刷自体はできるのですが、上記のような印刷条件をお指定して印刷することはできません。

    お力添えいただけますと幸いです。
    何卒宜しくお願い致します。

  37. https://outlooklab.wordpress.com/2007/12/15/%e7%89%b9%e5%ae%9a%e3%81%ae%e3%82%ad%e3%83%bc%e3%83%af%e3%83%bc%e3%83%89%e3%81%ae%e3%83%95%e3%83%a9%e3%82%b0%e3%82%92%e3%83%af%e3%83%b3%e3%82%af%e3%83%aa%e3%83%83%e3%82%af%e3%81%a7%e8%bf%bd%e5%8a%a0/#comment-19588

    を参考ににしています。

    カスタムフラグをセットすると、Outlook上では “セキュリティ保護のため、フラグのテキストは非表示になっています” というメッセージに置き換わってしまいます。 手動でメッセージをクリックしてブロック解除すればオリジナルの文字を表示できますが、これでは2度手間になるので使い勝手が悪いです。これは解消可能でしょうか。(Outlook 2016 で確認)

    • カスタムフラグを設定したメールの差出人が迷惑メールの [信頼できる差出人のリスト] に登録されていない場合に、フラグのテキストが非表示になってしまいます。
      そのため、フラグを設定するメールの差出人のアドレスかドメインを [信頼できる差出人のリスト] に追加してください

  38. はじめまして。outlook vba 初心者です。
    下記の取得方法をご教授いただければありがたいです。
    (outlook2013)
    「ファイル」>「アカウント設定」>「アカウント設定(A)」>
    「Mictosoft exchange」を選択して「変更」をクリックで表示される
    「アカウントの変更」画面の「オフライン設定」の「Exchange キャッシュモードを使う」にチェックが入力されているかどうかと「オフラインにしておくメール:」の期間を取得したいのです。
    GetNamespace(“MAPI”)のExchangeConnectionModeでは状態により数値が変化しています。
    恐れ入りますが、ヒントだけでもいただければありがたいです。
    宜しくお願いいたします

  39. いつも参考にさせていただいています。

    早速ですが、ファイルの添付を間違えて誤送信することが多いため、
    送信前に必ずファイルを開いて確認させたいのですが、
    以下のようなことはできないでしょうか。

    メール送信をクリックしたら、フォームを表示する。
    この時点でフォーム上にある送信ボタンのEnabledプロパティはFalse。
    フォームには添付ファイル名を表示する。
    添付ファイル名をクリックするとファイルが開くので、内容確認後閉じる。
    同様に全部の添付ファイルを開いたら送信ボタンのEnabledプロパティはTrueにする。

    ※添付ファイルはWord、Excel、PDFになります。

    使用環境
     Windows 10
     Microsoft Outlook for Office 365

    お力添えいただけないでしょうか。
    よろしくお願いいたします。

  40. はじめまして、初めてアウトルックVBAに挑戦しております。Excelマクロと違ってOutlookマクロに関する本がなくこのサイトで勉強させていただいています。
    私は現在、毎日、各国の新型コロナウイルスの感染者数などをカウントする仕事をしています。
    各国にいる職員からメールで以下のような報告メールを受け取りExcelファイルに入力しています。

    ***************
    ●●様

    本日発表された数字を報告します。

    国名:●●
    新規症例数:●●件
    症例数総数:●●件
    新規死亡数:●●件
    死亡数総数:●●件
    治癒者総数:●●件

    担当 ●●
    ************
    基本的に数字はExcelフォーマットに入力して送付されるのですが、1/4ぐらいはスマホ等を使用しておりExcelが使えないのでメール本文に数字を打ち込んで報告してきます。そのため、メール本文で報告してきた分はExcelファイルに手入力しています。そこで、選択した複数のメールの本文に記載されている各国の数字をExcelに取込むマクロを本サイトを参考にしながら以下の通り作成してみたのですが、どうしてもうまくいきません。特に一通のメールの本文に2,3カ国分の報告が記載されている場合の処理もよくわかりません。
    どう修正したらよいかご指導いただけないでしょうか。
    何卒よろしくお願いします。

    Sub 選択したメール本文から報告を取込()

    Dim objMail As Object
    Dim objBook As Object
    Dim objSheet As Object
    Dim r As Integer ‘Excelの行番号
    Dim i As Integer ‘データを取り込んだ国の数

    Const Excel_File = “D:\Mail取込用.xlsx”

    On Error Resume Next
    Set objBook = GetObject(Excel_File) ‘Excelファイルを開く
    objBook.windows(1).Activate
    Set objSheet = objBook.sheets(1)

    r = 2
    i = 0

    While objSheet.cells(r, 1) “”
    r = r + 1
    Wend

    For Each objMail In ActiveExplorer.Selection

    With objMail
    objSheet.cells(r, 1) = GetText(“国名:”, objMail.Body)
    objSheet.cells(r, 2) = GetText(“新規症例数:”, objMail.Body)
    objSheet.cells(r, 3) = GetText(“症例数総数:”, objMail.Body)
    objSheet.cells(r, 4) = GetText(“新規死亡数:”, objMail.Body)
    objSheet.cells(r, 5) = GetText(“死亡数総数:”, objMail.Body)
    objSheet.cells(r, 6) = GetText(“治癒者総数:”, objMail.Body)
    End With

    r = r + 1
    i = i + 1

    Next

    objBook.Close True

    MsgBox “終了しました。総数:” & i

    End Sub

  41. はじめまして。outlook vba 初心者です。

    不動産業にて一斉送信のマクロを作成いたしましたが
    特定のセルだけ送信しない(不可や×などつけた場合)というマクロがわからず
    大変困っています。

    お力添えいただけないでしょうか。
    よろしくお願いいたします。

    (使用環境)
    Windows 10
    Microsoft Outlook for Office 365

    Sub SendEmail()

    Dim objOutlook As Outlook.Application
    Dim i
    Dim rowMax As Long
    Dim wsList As Worksheet
    Dim wsMail As Worksheet
    Dim objMail As Outlook.MailItem

    Set objOutlook = New Outlook.Application
    Set wsList = ThisWorkbook.Sheets(“送信先”)
    Set wsMail = ThisWorkbook.Sheets(“メール内容”)

    With wsList

    ‘送信先の件数
    rowMax = .Cells(Rows.Count, 1).End(xlUp).Row

    ‘送信先の件数分繰り返す
    For i = 2 To rowMax
    Set objMail = objOutlook.CreateItem(olMailItem)
    With wsMail
    objMail.To = wsList.Cells(i, 4).Value ‘メール宛先
    objMail.Subject = .Range(“B1″).Value ‘メール件名
    objMail.BodyFormat = olFormatHTML ‘メールの形式
    objMail.HTMLBody = wsList.Cells(i, 1).Value & vbCrLf & vbCrLf & _
    wsList.Cells(i, 3).Value & ” 様” & vbCrLf & vbCrLf & _
    .Range(“B2”).Value ‘メール本文

    objMail.Send
    End With
    Next i

    Set objOutlook = Nothing
    wsList.Cells(i, 5).Value = Now
    MsgBox “送信完了”

    End With

    End Sub

  42. Windows10、MS365を使用しています。
    定型フォームのメール受信をトリガに、本文中のキーワードと同名のフォルダ(サーバ上)を開くことができないか調べています。
    メールは定型のため、本文中のキーワードの位置=特定文字の後ろに続くと文字として、指定できます。
    このような処理はできるものでしょうか。見当もつかず困っております。

  43. 日頃より参考にさせていただいております。貴重な情報ありがとうございます。
    Outlook2016を利用しております。
    アカウント追加を手動で行わせると、利用者による入力間違い多発しておりますため、スクリプトで行いたいと思っておりますが、スクリプトでのアカウント設定(IMAP)は可能でしょうか?

  44. Outlookでマクロを初めて作成する者です。

    メールで承認依頼を受け付け、メール本文内の特定の文字列をチェックするという業務があります。
    下記のようなマクロを作りたいのですが、
    マウスで範囲指定した文字列を別の関数に引き渡すようなことはできますでしょうか。

    ※作りたいマクロイメージ※
      チェックする文字列をマウスで範囲指定
     ⇒右クリックして、文字列をチェックするマクロを呼び出す
     ⇒マクロでチェックした結果をメッセージボックスで表示

    ※Outlook2013を使ってます。

  45. はじめまして。
    受信トレイで選択したメールの差出人をすべてのメールボックスで検索するボタンを
    設置したいと考えております。ご教授頂けると幸いです。Outlook365を使用しております。

    • メールを右クリックして [関連アイテムの検索]-[差出人からのメッセージ] をクリックすることで検索できますが、これでは問題ありますでしょうか?

  46. はじめまして。
    OutLook2016 / Windows10の環境でExchangeメールボックスサーバーで利用しています。
    「表示中のメールの添付ファイルを件名のフォルダーに保存するマクロ」に関連して、「表示中のメールの添付ファイル及びmsgファイルを件名のフォルダーに保存するマクロ」はどのようにしたら作成できますでしょうか?たったひと手間だと思うのですが、初心者過ぎてどうしたらよいのか困っています…。アドバイスいただけませんでしょうか。また、複数のメールを選択して同様の作業を行えるようにはできますでしょうか?

    また、「表示中のメールの添付ファイルを件名のフォルダーに保存するマクロ」を利用しようとしてみたのですが、「アイテムを開けませんでした」や「strEntryIDの変数が設定されていません」と出てしまいます。何か私のマクロの登録方法が間違っているのでしょうか。もし可能でしたら、その辺もアドバイスいただけたらと思います。

  47. 有用なサイトの公開・運営、ありがとうございます。
    以下、新しいスクリプト公開の要望をお送りします。

    仕分け または 高度な検索において
    ①所属する組織内(所属する@*****.jp内)でのみやりとりしているメッセージと
    ②①以外のメッセージを
    分類したいです。

    既存の仕分けでは「*****.jp以外のドメインを含まない」というルールを作れない為
    VBAにて実現するしかないかと思いましたがいかがでしょうか。

    Outlook2016です。よろしくお願いします。

  48. はじめまして
    OutlookでVBAを始めようと思っています。

    予定表の保存時に、終日のチェックを入れて保存できないようにしたいです。
    VBAを使って予定表保存時に終日にチェックが入っているかの判断はできますか?
    ご教授頂けると幸いです。Outlook365を使用しております。

    • アイテムの保存時に発生するイベントはアイテム単位のイベントとなるのですが、アイテム単位のイベントを VBA で処理することは難しいため、カスタムフォームやアドインとして実装する必要があります。

  49. いつもお世話になっております。
    以下のような処理をしたいのですがご教授頂けますか?
    ExcelのA1セルに入力された職番情報からOutlookで氏名を取得してB1セルに出力したいです。
    よろしくお願い致します。

    • 職番情報というのは Outlook にどのように格納されているのでしょうか?
      連絡先のどこかのフィールドに保存されていて、それを基に氏名を取得するというのは可能ですが、どこに保存されているかという情報がないとマクロの作りようがありません。

  50. 職場にて一斉メールを出す必要があり、VBAを勉強し始めました。宛先をエクセルシートに入れて送信できるまでになったのですが、送信元のアドレスを職場で作成したOutlookのメーリングリストのアドレスにしようと思います。現在は何も指定していないので自分のアドレスから送信されるようになっています。いろいろネットを探しているうちにこちらのサイトにたどり着きました。ご教授いただけるとありがたいです。

  51. すみません、こちらのサイトがOutlook のVBAに特化していることに気が付きませんでした。 先ほどの2:51のコメントを取り下げます。 ごめんなさい。

  52. はじめまして。
    Windows10でOutlook365をExchangeメールボックスサーバーで利用しています。
    outlook.comのメールアドレスで受け取った受信メールに対する「返信」あるいは「全員に返信」をする際に差出人のアドレスを別のメールアドレスに自動的に変更したいのですが、マクロがうまく作れません。
    ご教示いただけましたら嬉しく思います。
    どうぞよろしくお願い申し上げます。

    • Exchange サーバーをご利用とのことですが、Exchange サーバーでは自分以外のメールアドレスで送信する際にはそのアドレスで送信する権限が必要となります。
      権限を持っていることが前提ということでよいでしょうか?

  53. いつもお世話になっております。

    メール送信時に以下の処理をしたくお助けください。
    「References:」に、「TO:」と「CC:」で含まれるドメインの記述のみ残す。

    送信するメールはすべてBCCで自分あてに送付しており、
    受信時にヘッダーを使った振り分けに影響を及ぼすからです。
    あと、どのドメインから届いた元メールかをわからない状態にして編集し
    転送することもあります。

    例)

     元メール from:001@moto.go.jp to:002@jibun.go.jp

    転送メール from:002@jibun.go.jp to:003@dareka.go.jp cc:004@hokanohito.go.jp
          References:@jibun.go.jp
                @moto.go.jp ←@moto.go.jpはto:cc:に存在しないから削除

    • 『「References:」に、「TO:」と「CC:」で含まれるドメインの記述のみ残す。』という処理をした場合、from:002@jibun.go.jp to:003@dareka.go.jp cc:004@hokanohito.go.jp のメールの References は @dareka.go.jp; @hokanohito.go.jp になると思うのですが、なぜ @jibun.go.jp なのでしょうか?

  54. はじめまして。マクロ以前の問題かもしれませんが、宜しければ ご教授いただきたく、書き込みさせて頂きます。
    Win10、outlook16を使用しておりますが、仕分けルールの変更・登録が出来なくなりました。
    入力までは出来ますが、適応/OKをクリックすると、outlookが勝手に再起動し、再起動後に仕訳ルールを確認してみると、変更・新規追加が反映されていない状況です。
    仕訳ルールをエクスポート後、インポートを試しましたが、インポートにより表示はされるものの、適用/OKをクリックすると同様に再起動し、反映されません。
    officeのクイック修復・オンライン修復も試してみましたが、効果が無い様です。
    アンインストール~再インストールをする以外に方法があれば 教えて頂ければ助かります。

  55. 当サイトは数少ないOutlookのマクロ情報が豊富にあることで、いつも参照させて頂いております。
    個人的な意見ですが、本来のOutlookの機能はカレンダーやタスクなどビジネスあるいは個人管理のツールとしてすばらしいものと感じております。マクロ活用がメールの送受信で終わるのはもったいないと思います。
    その中で、毎日のスケジュールとタスクの確認を含めて、当日の予定表を三つ折りスタイルで印刷できればと思います。
    手動で印刷するには「印刷オプション」で開始日と終了日を当日に合わせなければなりません。間違うと不必要な印刷をおこなってしまう可能性もあります。
    マクロのアドバイスをお願いします。

  56. はじめまして。現在、VBAで社内の全員のメンバーのOutlookの終日イベントを取得して一覧表に出力する事に挑戦しています。ユーザーによって権限設定が、「空き時間のみ」と設定されている場合があり、
    その場合予定が取得できないので、個々のユーザーの権限設定を取得して「空き時間のみ」となっている場合は、予定表にエラー表示をしたいと思っております。
    調べたのですが、権限設定の状態を取得する方法が見つからず困っております。
    情報がございましたらご教授いただけませんでしょうか。

    • Outlook のマクロで権限設定を取得する方法はありません。
      実際にフォルダーにアクセスしてみてエラーが発生したら権限がないと判断するしかないのです。

  57. VBA初心者です。
    特定のサブフォルダにあるメールの添付ファイルを、指定のフォルダに保存したいのですが
    メール本文の埋め込み画像も一緒に保存されてしまって困っています。
    「受信したメールの埋め込み画像を除いた添付ファイルを自動保存するマクロ」を参考にしているのですが
    メール受信時にではなく、既に受信フォルダにあるものに対しての書き替えがうまくいきません。
    本文埋め込み画像以外の添付ファイルを保存するマクロをご教授いただけませんでしょうか。

    やりたいこと
    サブフォルダに入っているメールの、本文の埋め込み画像以外の添付ファイルを指定フォルダへ保存

    よろしくお願いします。

  58. 初めまして。
    こちらのホームページを見て一生懸命やっています。
    やりたいことの一つは出来たのですが…
    完成は出来ず。

    やりたいことは、2つのメール(時間差で受信)を受診した後、
    ファイルをメモ帳で編集して一つにまとめる。
    どちらのファイルもCSV形式で全てを選択してコピーしたら
    キレイに選択できる。

    一つ目のメールを受信して SAVE_PATH(前に記載されていたコードそのまま使いました)に保存することは出来ました

    ですが、2つ目のメールを受信して その添付ファイルの内容をコピーして
    一つ目のメールを保存したファイルに追加することが出来ません。。。

    ご教示頂けると有難いです。どうぞよろしくお願いいたします。

    • 一つ目のメールと二つ目のメールの関連付けはどのようにして行うのでしょうか?
      受信時に自動的にまとめるためには、受信時にそのメールと対になるメールをどのように識別するかを定義する必要があります。
      それをマクロで記述できるような形で定義できなければ自動化は不可能です。

  59. はじめまして。OutlookでのVBAに挑戦しています。
    既に自動仕分けルールで作成された、「差出人のアドレスに***が含まれていたら削除する」というルールに対して、メールが来たらボタン一つで受信したメールアドレスを上記の「***」の一覧に追加したいと思っています。
    差出人を設定するマクロはサイト内の記事で確認できたのですが、「***が含まれていたら」という所のリストに追加する作業がマクロ化できずに悩んでいます。
    ご教授頂きたく宜しくお願い致します。

  60. はじめまして。
    こちらのホームページを参考にして
    会議案内を送信するマクロを作り活用していたのですが、会議がteamsを使った
    web会議へ切り替わってしまいました。案内をoutlookから送信する点は変わらないのですが、会議場所がteamsになるため案内送信前で実行を止め、新しいteams会議ボタンを毎回押して送信しています。teams会議ボタンはマクロで押すことはできないのでしょうか?

    outlook2016
    office2016

    • 残念ながら Teams 会議ボタンは Outlook 固有のものではなく、Teams によってインストールされるアドインのものであるため、マクロで操作することはできません。

  61. はじめまして

    アウトルック2016使用しております。

    受信した全てのメールの件名の左端に、必ず2020/10/29/23:30 のように 年 日付 日時 時間 を追記するようにしたいのですが どのようなマクロをくめばいいかおしえていただけますでしょうか。

    ご確認願います。

    • 追記する日時は以下のどれなのでしょうか?
      ・送信日時
      ・サーバーで受信した日時
      ・クライアントで受信した日時

      また、送信日時などはメッセージの一覧に表示できますが、なぜわざわざ件名に追記する必要があるのでしょうか?
      ディスプレイのサイズによってはほとんど件名が確認できなくなってしまうと思うのですが。

  62. こんにちは、質問をお願いします

    ストア版OfficeのOutlook2016です

    添付のPDFファイルをダブルクリックするとEdge(デスクトップアプリ)で開いてしまいます
    Windowsの関連付けは Adobe Reader DC になっており、保存されたPDFをダブルクリックすると Adobe Reader DC で開けます

    添付PDFを、Adobe Reader DC で開けるようにする方法は無いでしょうか?

    調べると、ストア版には「不具合があってできない」ような話があります
    https://youtm-log.com/setting/windows-setting/soft_from_app/

    でも、会社の他のパソコンではそれがきちんとできているものもあります
    パソコンによって差があるみたいです

    ひょっとして今は使っていない
    古いストアアプリの Edge が関係しているかもしれないと思い
    C:\Windows\SystemApps の下の Edge 用フォルダを(使えないように)リネームした所
    Outlook の添付PDFのアイコンが白紙に変わりました
    (それまでは Edge の PDF用アイコンでした)

    「いい感じかも」と思ったのですが
    ダブルクリックしたら変わらず Edge(デスクトップアプリ)が開きます

    添付PDFを、Adobe Reader DC で開けるようにする方法は無いでしょうか?
    (Windowsの関連付けの通りに開く方法、が希望です)

    よろしくお願いします

    • 試してみましたが再現することができませんでした。
      ストアアプリ版の Office はファイルやレジストリへのアクセスがちょっと特殊なので、それにより現象が発生しているのかもしれません。
      一度 Office ごとアンインストールし、再インストールしてみてください。

      • どうもありがとうございました
        そうですよね、会社でも個体差(?)がありますので。
        アドバイスいただいた通り、自分用のパソコンなら再インストールするのですが、今回は会社のパソコンでしかも他人の物なので、今のまま我慢することにします。

        この間、少し考えたのですが「添付ファイルをダブルクリック」の操作をマクロで横取りすることはできませんか?VBAは初心者ですが、エクセルで「セルをダブルクリック」がイベントになっているのを知っていました。その方向でアプリケーションに添付ファイルを渡すことができないだろうか?と考えたのですが。(コードを書く力はありませんが...)

      • 残念ながら、添付ファイルをダブルクリックする際にだけ発生するようなイベントはありませんでした。

  63. はじめまして質問お願いします。

    毎日メールで
    検索条件にマッチした新着案件が届きます。


    業務名:〇〇〇業務
    機関名:〇〇 / 都道府県名:〇〇
    公示日:2020-10-28 / 締切日:2020-11-04
    URL:〇〇〇

    このような情報を毎日エクセルを表に落とし込みたいのですが、
    このような処理はできるものでしょうか。よろしくお願いいします。

  64. 初めまして VBA初心者です。
    OutLook2016で以下の条件のマクロを作成したいと考えています。

    ・サブフォルダ「未対応」にメールがあるか確認
     ・ない場合→何もしない
     ・ある場合→受信時間が現在時間から30分以上経過しているか確認
      ・30分未満→何もしない
      ・30分以上経過→通知メールを作成して送信

    ご回答よろしくお願いします。

  65. 初めまして、本サイトをいつも参考にさせていただいている者です。
    Outlook2016にて、特定のキーワードが件名にある出席依頼を返信なしで承認するマクロを作成しようと思い、本サイトで紹介されているマクロの一部変更し実装してみましたが、宛先がグループ宛の出席依頼が処理されずに困っています。私宛の出席依頼は処理されるのですが、解決方法をご存知ないでしょうか。
    ご教示いただけると幸いです。よろしくお願いいたします。

    Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Const KEYWORD = “[DL]”
    Dim objItem As Variant
    Set objItem = Session.GetItemFromID(EntryIDCollection)
    If objItem.MessageClass = “IPM.Schedule.Meeting.Request” Then
    If objItem.Subject Like “*” & KEYWORD & “*” Then
    Dim apptItem As AppointmentItem
    Set apptItem = objItem.GetAssociatedAppointment(True)
    ‘apptItem.Delete’
    ‘objItem.Delete’
    End If
    End If
    End Sub

  66. シンクラ環境で、OUTLOOK 起動時に、予定表を表示させるために、VBS に
     wshshell.run “OUTLOOK.EXE /select outlook:calendar をVBS 記載でカレンダーを立ち上げられる環境です。
    この環境で、OUTLOOKメモ帳を立ち上げたいのですが、 /select outlook:■■■ の■■■の部分に何を指定したら良いのが解りません。
    初心者です。
    宜しくお願いいたします。

    • Outlook メモ帳というのは Outlook の「メモ」フォルダーのことでしょうか?
      その場合、/select outlook:notes とすることでメモフォルダーが表示されます。

  67. いつも参考にさせていただき、大変助かっております。
    「受信メールの差出人を連絡先フォルダーのサブフォルダーも含めて検索し、表示名を置き換えるマクロ」
    を便利に使用させて頂いているのですが、代理として送信されたメールに対しては差出人の表記がアドレス帳のものになりません。

    「代理として送信した差出人のアドレスを取得するマクロ」
    を見ても、どのようにプログラムを変更すれば良いかわからず投稿させていただきました。
    お忙しい中、お手数をおかけしますが、よろしくお願いします。

  68. いつも参考にさせていただき、大変助かっております。
    「受信メールの差出人を連絡先フォルダーのサブフォルダーも含めて検索し、表示名を置き換えるマクロ」
    を便利に使用させて頂いているのですが、代理として送信されたメールに対しては差出人の表記がアドレス帳のものになりません。

    「代理として送信した差出人のアドレスを取得するマクロ」
    を見ても、どのようにプログラムを変更すれば良いかわからず投稿させていただきました。
    お忙しい中、お手数をおかけしますが、よろしくお願いします。

  69. マクロ作成でいつも参考にさせていただいております。

    https://outlooklab.wordpress.com/2019/02/09/選択した予定表フォルダーの特定の日に時間固定/

    のマクロで、個人の定期的な予定をワンクリックで入れられるようになって便利なのですが、

    例えば、予定表の左側(ナビゲーションウィンドウ)のカレンダーの日付をCtrl+左クリックで複数の日付を選択した上でマクロを実行して一括で同じ予定追加・・・

    というのが実現できれば非常に便利だなと思い、実現させたいのですが、

    複数選択したひとつひとつの日付をどのように取得するのか?(あるいは選択した日付の範囲内の1日1日をどう取得するのか?)という壁にぶつかっています。

    お忙しいところ恐縮なのですが、よろしくお願い申し上げます。

  70. いつも参考にさせて頂いております。
    バックアップしたpstファイルをoutlookで開いて検索するにはインデックス処理を待たねばなりませんが、テキストファイルのメール一覧を作り、pstファイルと併せて保存しておくことで、最低限の検索ができるようにしたいと考えております。
    「ビューの設定」にて、表示する列に 宛先 や 件名 などとともに メッセージ を含めて メール一覧を表示させて、それをコピーしてExcel等に貼り付けますと、当然ながら、改行を含めたメッセージ全文が入ってしまいます。
    この検索用テキストファイルでは、1メールを1行に対応させたいので、改行は除去したいです。また文字数を先頭から100文字までなどと区切りたいのですが、良い方法がありますでしょうか?
    ユーザー定義フィールドでそのようなものができたらと思っているのですが。
    本当はこのようなことをせずに当該pstファイルのインデックスを保存したいところなのですが。
    なにか良い方法がありましたらお教えください。お願いいたします。

    • 1メールを1行に対応させた場合、インデックスを作成しても、検索結果としてはその検索用テキストファイルだけが検索されるということにならないでしょうか?
      それとも、特定のキーワードを含むメールがその PST に保存されているかどうかだけ確認すればよいということなのでしょうか?

  71. お世話になります。
    IMAPで受信したメールをローカルに作成したPSTファイルに
    自動でフォルダ毎に仕分けるマクロはどのようにすればよいでしょうか?
    メールアドレスに含む文字列で、移動先のフォルダを判別したいです。
    よろしくお願いいたします。

  72. 前述の補足です。
    このたび強制的にPOP3からIMAPに変更になりました。
    IMAPはすぐに容量オーバーとなるため、受信送信の都度別のPSTファイルにバックアップがしたいです。

    1.IMAPでメールを受信
    2.受信したIMAPメールをPSTファイルのフォルダに移動
    3.移動先は、差し出し人アドレスの文字列毎に判別して、指定のフォルダへ
    4.受信したIMAPメールは削除

    送信も同様に宛先に含まれる文字列毎に指定のフォルダに移動したいです。
    よろしくお願いいたします。

  73. 何度もすみません。
    前述の対策の1つとして、受信したメールを全てpstフォルダに移動し、移動後に仕分けルールを実行して、各フォルダに移動するということは可能でした。
    IMAPフォルダからpstフォルダへはマクロで自動移動するとして、移動後の仕分けルールの実行を定期的に実行するマクロはあるでしょうか?

    • メールアドレスに含む文字列をもとに PST に移動するというのはマクロではなくルールで実行できるはずなのですが、ルールでの実行は何が問題になっているのでしょうか?

  74. はじめまして。
    Outlookで出欠確認のマクロを組みたいのですがどのようにすればよいのかわかりません。
    ご教授いただければ幸いです。

    特定のフォルダに降りて行って
    メールの一覧を取得し、ある時間にメールが届いていたなら”〇”を、そうでないなら”×”をダイアログ上に出すようなものを作りたいと思っています。

    【例】

    [氏名] 9:00~10:00 ×
       10:00~11:00 ×
    11:00~12:00〇

    【使用環境】
    Outlook 2016

  75. Outlook2019
    メールに開封確認が来て、”はい”を押しても返信されません。
    返信をさせる方法を、教えて下さい。
    どこかセットする部分があるのでしょうか。
    通常のメールは、問題無くできています。

    • Outlook で開封通知を返信しても、サーバーの設定によっては返信メールが削除されます。
      サーバーの管理者にご相談ください。

  76. Excelで宛先リストを作成して、マクロで自動送信を考えています。
    送信前に一度確認・編集したいので、一旦下書きをフォルダ(エクスプローラーのフォルダです)に保存したいです。(ここまではできています)

    確認・編集した.msgを送りたいのですが、mailitemを開くところで苦戦しています。
    上手く開く方法を教えてください。

  77. Office2019を使用しております。

    Private Sub Application_NewMailEX(ByVal EntryIDCollection As String)
    を書いて、メールを受信した時、添付ファイルの自動保存を行いたく

    https://outlooklab.wordpress.com/2007/03/10/%E5%8F%97%E4%BF%A1%E3%81%97%E3%81%9F%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%AE%E6%B7%BB%E4%BB%98%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92%E8%87%AA%E5%8B%95%E4%BF%9D%E5%AD%98%E3%81%99%E3%82%8B%E3%83%9E/
    を参考にマクロを作成しました。

    通常の受信ではうまくいくのですが、仕分けルールでサブフォルダに入れるようにしたメールに関して
    Set objMsg = Application.Session.GetItemFromID(strEntryID)
    でエラーになってしまいます。

    仕分けルールがあると、正常にに処理出来ないのでしょうか?
    またエラー回避する方法があれば教えて下さい。

    宜しくお願い致します。

    • 本来なら仕分けルールはマクロの実行後に行われるはずなので、ルールでサブフォルダーに移動しても正しく動作するはずです。
      ルールではなくアドインなどでメールが移動されていたりしないでしょうか?

  78. 最近、こちらのサイトで勉強させて頂いて頂きながら目的の物を作っています。
    完成まであと一つ、やりたいことが分りません。
    転送時に、本文内に勝手に付与されるFrom,sENT,To,Cc,Subjectの文章を削除して転送させたいのです。
    理由はスマホで見る時、横幅が短いのでFromやToが多いと、沢山スクロールさせないと本文見れない為です。
    お手数ですが、ご教授をお願います。

  79. 追記です。
    こちらに掲載されていた、「Excel ファイルのキーワードをもとに転送するマクロ」を元に少し編集して以下内容にしました。
    あとは、この転送時に本文内を元の状態のまま送れるようにしたいです。

    Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim objItem
    Set objItem = Session.GetItemFromID(EntryIDCollection)
    If objItem.MessageClass = “IPM.Note” Then
    ForwardByKeywords objItem
    End If
    End Sub
    Sub ForwardByKeywords(ByVal objMail As MailItem)
    Const KEYWORD_FILE = “c:\test\keywords.xlsx” ‘ Excel ファイルを指定
    Const START_ROW = 2
    Const KEYWORD_START = 2
    Const KEYWORD_END = 2
    Dim objWorkbook
    Dim objSheet
    Dim r As Integer
    Dim c As Integer
    Dim bFound As Boolean
    Dim objForward As MailItem
    ‘ Excel ファイルを開く
    Set objWorkbook = GetObject(KEYWORD_FILE)
    Set objSheet = objWorkbook.Sheets(1)
    r = START_ROW
    ‘ 項目番号が空白になるまで実行
    While objSheet.Cells(r, 1) “”
    bFound = True
    ‘ キーワードチェック
    For c = KEYWORD_START To KEYWORD_END
    If objSheet.Cells(r, c) = “” Then
    If c = KEYWORD_START Then
    bFound = False
    End If
    Exit For
    End If
    ‘ キーワードが本文になければループを抜ける
    ‘ If InStr(objMail.Body, objSheet.Cells(r, c)) = 0 Then
    If InStr(objMail.Subject, objSheet.Cells(r, c)) = 0 Then
    bFound = False
    Exit For
    End If
    Next
    ‘ すべて一致したら転送処理
    If bFound Then
    ‘ 転送メッセージを作成
    Set objForward = objMail.Forward
    c = KEYWORD_END + 1
    ‘ セルが空白になるまで宛先に追加
    While objSheet.Cells(r, c) “”
    objForward.Recipients.Add objSheet.Cells(r, c)
    c = c + 1
    Wend
    ‘ 転送メッセージを送信
    objForward.Send
    End If
    r = r + 1
    Wend
    End Sub

    • 転送時に追加される文字列をすべて削除ということであれば、要は元のメールの本文をそのままコピーするということになるので、objForward.Send で送信する前に以下の処理を追加すればよいと思います。

      If objMail.BodyFormat = olFormatPlain Then
      objForward.Body = objMail.Body
      Else
      objForward.HTMLBody = objMail.HTMLBody
      End I

      •  有難うございます。
        上記を追加するだけで成功しました。
        おかげさまで、スマホで見てもかなり見やすくなりました。

         あと、テストしている中で意外な問題が発生しました。
        一度に複数メールが連続受信した来た場合(恐らく1分以内)に
        以下の様に受信順とは逆の順にメールが転送されてしまいます。
        業務内容上、この順番が結構大切なので、なんとか受信メール順に
        転送させたいのですが、対策方法はないでしょうか?
        受信メール順:件名A、件名B、件名C
        転送メール順:件名C、件名B、件名A

         追加の質問になり、大変拘縮ですが宜しくお願いします。

      • Outlookで複数のメールをまとめて受信する際には、新しいメールから順番に受信する動作となります。
        つまり、サーバーに受信した順序とは逆の順序でOutlookが受信してしまいます。
        受信時のイベントはOutlookの受信のタイミングで実行されますので、残念ながらまとめて受信するときの順序を変更することはできません。

      • お世話になっております。
        回答、有難うございます。
        了解しました。
        ここは、ユーザーにも理解して頂き使っていってもらいます。

  80. OutlookアドインからVBAマクロを無効にしたいのですが、アドバイスをいただけると幸いです。
    Outlookのメール誤送信対策として、簡易的に以下のようなVBAマクロがあります。

    Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Dim aExtAddrs() As String ‘ 社外宛アドレスリスト
    Dim iExtNum As Integer ‘ 社外宛アドレス数
    Dim olRecip
    iExtNum = -1
    For Each olRecip In Item.Recipients
    If Not olRecip.Address Like “*@mydomain” Then
    iExtNum = iExtNum + 1
    ReDim Preserve aExtAddrs(iExtNum)
    aExtAddrs(iExtNum) = olRecip.Address
    End If
    Next
    If iExtNum >= 0 Then
    Dim sMsg As String
    sMsg = “社外宛のメールアドレスが含まれています。間違いはありませんか?”
    sMsg = sMsg & vbCrLf & Join(aExtAddrs, vbCrLf)
    If MsgBox(sMsg, vbYesNo + vbQuestion, “送信前確認”) vbYes Then
    Cancel = True ‘ 送信取消
    Exit Sub
    End If
    End If
    End Sub

    これをそのままOutlookのVSTOアドインにしました。
    Public Class ThisAddIn
    Private Sub ThisAddIn_Startup() Handles Me.Startup
    AddHandler Me.Application.ItemSend, AddressOf CatchItemSend
    End Sub
    Private Sub CatchItemSend(ByVal Item As Object, ByRef Cancel As Boolean)
    Dim aExtAddrs() As String ‘ 社外宛アドレスリスト
    Dim iExtNum As Integer ‘ 社外宛アドレス数
    Dim olRecip
    iExtNum = -1
    For Each olRecip In Item.Recipients
    If Not olRecip.Address Like “*@mydomain” Then
    iExtNum = iExtNum + 1
    ReDim Preserve aExtAddrs(iExtNum)
    aExtAddrs(iExtNum) = olRecip.Address
    End If
    Next
    If iExtNum >= 0 Then
    Dim sMsg As String
    sMsg = “社外宛のメールアドレスが含まれています。間違いはありませんか?”
    sMsg = sMsg & vbCrLf & Join(aExtAddrs, vbCrLf)
    If MsgBox(sMsg, vbYesNo + vbQuestion, “送信前確認”) vbYes Then
    Cancel = True ‘ 送信取消
    Exit Sub
    End If
    End If
    End Sub
    End Class

    こうした場合、アドインをインストールした時にVBAマクロを削除しないと、二重にItemSendイベントハンドラが設定された状態になり、両方の処理が呼ばれます(同時あるいは逐次的に)。なので、VBAマクロを無効にしたいのですが、適当な方法に悩んでいます。
    単純なのは、アドインをインストールする時にVBAマクロを手で削除することですが、人手に頼ることになり避けたいです。(できれば自動で行いたい)
    アドイン本体は共有の場所に置いてsetup.exeでインストールを行う予定ですが、そのインストーラでOutlookの持つVBAマクロを取得できたり、一部のマクロ(今回ではApplication_ItemSend)を無効にする方法はあったりするでしょうか?※VBAマクロ全体を抑止するのは他に必要な処理もあるため出来ません。
    あるいは、アドインからマクロを検知して抑止することが可能でしょうか?
    アドバイスをいただければ助かります。よろしくお願いします。

    • Outlook のマクロのコード自体を取得したり、マクロの一部を無効化するというようなことはできません。
      また、アドインとマクロが同じ ItemSend イベントを使用していた場合に、どちらが先に実行されるかは不定であるため、アドインからマクロを検知して抑止するというようなこともできません。
      ユーザーごとにマクロを変更いただくしかないでしょう。

  81. Outlook VBAのメール自動転送に関してのご質問です。

    Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim objItem As Variant
    Set objItem = Session.GetItemFromID(EntryIDCollection)

    If TypeName(objItem) = ‘MailItem’ Then

    Call ForwardOrderMail(objItem)

    End If
    のロジックを組んでいるのですが、Set objItem = Session.GetItemFromID(EntryIDCollection)で

    実行時エラー -2147221233(8004010f)
    指定されたメッセージが見つかりません。

    というエラーが実行時に表示されます。自端末で開発したVBAを他の端末に移植したのですが、このようなエラーが発生しました。自端末ではこのようなエラーが表示されず、調べても解決に繋がらなかったので、解決方法のお知恵を拝借させて頂きたいと存じます。

    Outlookのバージョンは2013です。

    • cc000072(投稿者です)

      一応
      Debug.Print TypeName(EntryIDCollection)
      Debug.Print TypeName(objItem)
      Debug.Print TypeName(objSession)
      で調べたところ

      String
      MailItem
      Mapi

      と表示されました

      • GetItemFromID で EntryIDCollection を指定してアイテムが取得できないというのは通常起こりえないはずなので、環境依存で何らかの問題が発生しているのかもしれません。
        ひとまず、Outlook 2013 の最新の修正プログラムを適用してみてください。

  82. Outlook(Exchange)ベースでの行動管理、工数管理システム構築の可能性を検討しています。

    Outlookの予定表にて、個人が予定を入れ管理していく予定です。
    予定表をExcel等にエクスポートすることが出来ると思うのですが、個人がエクスポートするのではなく、部門長のような立場の人が一括で該当する社員の予定をエクスポートするような事は可能でしょうか?
    あとは予定の入力で、細かい分類を指定するような機能は追加できますでしょうか?
    例えば、大分類 社内業務 中分類 営業支援 小分類 デモ資料 ・・・のような感じです。

    又、Outlook(Exchange)ベースでの行動管理、工数管理システム構築という部分で何かアドバイスをいただければ幸いです。

    宜しくお願いいたします。

  83. outlook VBA初心者です。いつも参考にさせて頂いております。

    会議フォームを使ってしか会議設定を出来ないようにするにはどうすれば良いでしょうか?
    また、『参集者数制限』や『プルダウン選択に伴い議時間をMAX30minにする』などの制限をかけたい場合はどのようにすれば良いでしょうか?
    『参集者数制限』を出来る範囲でやってみたところ、フォームでコマンドボタンを設置しても、そのボタンにマクロをどう仕込めばよいのかわからず、outlook VBAでsendに対してMAX制限かけたところ、メールまで出せなくなり、困っております。
    また、上記でMAX制限を件名のキーワードで解除するなどあれば、併せて教えて頂きたいです。

    ご教授のほど、お願います。
    どうぞ、よろしくお願い致します。

  84. Outlookでメールを送信または返信ボタンを押したときに、添付ファイルを特定の場所にコピーして保存し、メールには添付ファイルを付けないで送信したのですが、そのようなことはできますか?
    添付ファイルは後ほどまとめてパスワード付の圧縮ファイルで送ります。
    Outlook 2010
    Outlook 2016
    Outlook 2019

  85. outlook VBA初心者です。いつも参考にさせて頂いております。

    Outlookで日ごと、月ごとのメール受信・送信数の分析をしたいと考えております。

    具体的には以下のように、任意の期間にて何件メールを送受信したかをカウントしたいです。例えば9月1日~9月30日を選択した場合、

    9月1日(水):メール受信数:100件、メール送信数:50件
    9月2日(木):メール受信数:150件、メール送信数:40件
    9月3日(金):メール受信数:80件、メール送信数:40件



    9月30日(金):メール受信数:90件、メール送信数:40件

    のような形でエクセル又はメモ帳に表示されることは可能でしょうか。

    また、同様に任意の期間にて、Outlookのスケジューラに何分間の予定が入っているかをカウントしたいです。例えば9月1日~9月30日を選択した場合、

    9月1日(水):90分
    9月2日(木):120分
    9月3日(金):150分



    9月30日(金):80分

    Outlook2016、Excel2016を使用しております。
    お忙しい中恐れ入りますが、ご教示頂ければと思います。

  86. こんにちは。いつも参考にさせていただいています。
    お忙しい中恐縮ですが、OutlookVBAについて下記ご教示いただきたく、お願い致します。

    「メール」画面のナビケーションウインドウで最初に「みどくめ

  87. こんにちは。Outlook VBAは初めてです。(初心者です)
    お忙しい中恐縮ですが、OutlookVBAについて下記ご教示いただきたくお願い致します。

    「メール」画面のナビケーションウインドウで「未読メール」が最初にリストアップしています。
    「未読メール」のビューにポインターを当てて「件名」の全内容をコピーして、別のアプリケーションに貼り付けたいです。
    そのVBEモジュールはどう書いたらいいか分からず困っております。教えていただけないでしょうか。よろしくお願いいたします。

    • 別のアプリケーションに、というのは具体的にどのようなアプリケーションでしょうか?
      クリップボードにコピーできればどのようなアプリケーションでも貼り付け可能かもしれませんが、それをOutlookのVBAで行うのはちょっと面倒なのです。

      • 別のアプリケーションとは、NotepadとかTeamsとかです。

        『クリップボードにコピーできればどのようなアプリケーションでも貼り付け可能かもしれません』
        上記についてでもOKですので、ぜひご教示いただければと思います。よろしくお願い致します。

      • Outlooklabさん、お返事ありがとうございます。

        別のアプリケーションとは、NotepadとかTeamsとかです。

        『クリップボードにコピーできればどのようなアプリケーションでも貼り付け可能かもしれません』
        上記についてでもOKですので、ぜひご教示いただければと思います。よろしくお願い致します。

      • すみません。補足です。

        「メール」画面のナビケーションウインドウで「未読メール」が最初にリストアップしています。
        「未読メール」のビューで一つの受信メールに対してその「件名」の全内容をコピーして、別のアプリケーションに貼り付けたいです。(クリップボードにコピー)
        そのVBEモジュールはどう書いたらいいか分からず困っております。教えていただけないでしょうか。よろしくお願いいたします。

コメントを残す