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

  1. コメント失礼します。
    outlook2010を使用しています。
    現在メールの返信や新規作成時、署名が入るように設定しておりますが、自動転送したメールにも署名が入ってしまっている状態です。
    転送メールを見る際に、一々署名が入っていると見づらいため、転送時のみ署名を消したいと思うのですが何か方法はありませんでしょうか。
    ご回答いただけると幸いです。
    よろしくお願いします。

    • 転送の際の署名を設定している場合、残念ながら Outlook で自動転送した際に自動的に挿入される署名を消すことはできません。

      • Outlook 予定表について教えてください。
        Outlook2016、Windows10

        新規予定を相手先に送る場合、送信の時間指定はできますでしょうか?
        操作方法含めて、詳しく教えていただけたら、うれしいです。
        Outlookメールでは、配信オプションでできますが、予定表では、やり方が判りません。
        よろしくお願い致します。

  2. はじめまして。
    いつも参考になる多数の記事ありがとうございます。
    さて、投稿されている記事から
    「入力した文字列で検索し、見つかったアイテムをその文字列の名前のフォルダーに移動するマクロ」
    「本文に特定の文面を含む場合に、そのメールとファイルを添付して転送するマクロ」
    「Excel ファイルのキーワードをもとに転送するマクロ」
    などを参考にマクロを作成しているのですが、どうもうまくいかず、助言をいただきたくコメントさせていただきました。
    いま作成しているマクロは下記のようなものです。
    1.EXCELにOutlookフォルダ名と特定のキーワードを保存(複数キーワードでのAnd/Or条件)
    2.EXCELに記述したOutlookの特定フォルダから特定のキーワードを含むメールをローカルフォルダにmsgファイルとして保存
      この時、キーワードが件名に含まれるか、本文に含まれるか、添付ファイル内(Excel,Word,Ppt,PDF等)に含まれるかをEXCELに結果出力
    3.保存したmsgファイルの添付ファイル(EXCEL,Wordのみ)の該当キーワード部分を色付する。

    まず、お聞きしたいのは2の時に添付ファイル内にキーワードが含まれるメールの保存方法です。
    私が試したのは、EXCELからマクロを実行し、Outlookの検索窓にキーワードを入れ、検索結果を表示(ここまではうまく動きました)
    その後に検索結果のメールをmsgとしてローカルに保存する方法が分からず、一旦諦め。
    次にEXCELからマクロを実行し、GetNamespaceから該当のメールフォルダを捕捉、
    含まれるメールアイテム1件ずつを、InstrでSubjectとBodyで検索、検索結果はEXCELに出力。
    添付ファイルが含まれる場合には、その添付ファイルを全てローカルフォルダに一時保存し、
    一時保存したフォルダに対してShellとFileSystemObjectを使いNavigateやFilterViewで、
    キーワードが含まれるかどうか判断(残ったファイル数が1以上なら含まれる)する。
    その後、一時保存ファイルは削除し、判断結果によって該当のメールをmsgとして保存する。
    かなり力技ですが、この方法は何とか動きました。
    ですが、非常に時間が掛かるのと、FileSystemObjectのFilterが終わっているかが判断できず、
    稀に検索が失敗(キーワード含まれるのに無と判断)してしまいます。
    何とかスマートに作動させる方法が無いでしょうか?一旦諦めた検索結果メールを取得できるのが良い気がしますが・・・

    それが、出来れば上記3の添付ファイルを開いて文字への色付ですが添付ファイルを開いて編集し、
    上書きする方法を、合わせてご教示いただければと思います。VBA(EXCELマクロ)については、
    ある程度分かりますので、色付などは問題なくできると思っています。

    長文になってしまいましたが、何とかお知恵をお借りできればと思います。
    宜しくお願い致します。

    【マクロ使用環境】
    Windows 7
    Outlook 2013
    Excel 2013

    • 実行しようとしている内容が非常に高度であるため、マクロでの実装は困難でしょう。
      まず、件名、本文、添付ファイルの内容について検索するには、Windows Search での検索を実行する必要があります。
      マクロで Windows Search での検索をするには Explorer.Search を使用しますが、このメソッドで検索されたアイテムだけにアクセスするというメソッドは用意されていないため、この結果をマクロで使用することはできません。
      マクロではなく C++ で実装すれば Windows Search の API を呼び出して処理することも可能かもしれませんが、ちょっと大掛かりになりすぎますし、どの程度のコードが必要なのかの予測もつきません。
      そのため、力技といわれている方法で検索を実行する以外に手段はないと考えられます。
      なお、添付ファイルを開いて編集し、上書きするという処理を実装するとなると以下のような形になるでしょう。
      1. Outlook で添付ファイルをローカルに保存する
      2. 保存したファイルを編集できるアプリケーションのマクロを使ってそのファイルを開き、編集して上書き保存する
      3. Outlook でメールの添付ファイルを削除し、2. で編集したファイルを追加する
      これも複雑であり、ファイルの種類ごとにコードを書く必要があるため、私の力量ではカバーしきれません。

  3. 困っているので教えてください。
    Office2013ProPlusを使っていますが、Excel2013の起動が不安定になったため、やむなくOffice自体の再インストールを実施することにしました。
    Outlook2013についてはフォルダ構成や振り分けなどの設定を入れているため、完全に元に戻したいと思っています。
    そこでアカウント情報や振り分けルールなどを完全に戻す方法を教えていただけませんでしょうか?
    なお、pstファイルのエクスポートは振り分けのエクスポートなどは検索して見つかったのですが、メールアカウントのバックアップ方法は見つからなかったため、質問させていただきます。
    よろしくお願いします。

    • Office のアンインストールや再インストールではメール アカウントの設定などは削除されませんのでご安心ください。
      どうしても心配であれば、以下のレジストリとフォルダーをバックアップしておいてください。

      レジストリ:
      HKEY_CURRENT_USER\Software\Microsoft\Office\15.0

      フォルダー:
      c:\users\ユーザー名\AppData\Local\Microsoft\Outlook
      c:\users\ユーザー名\AppData\Roaming\Microsoft\Signatures

  4. WebにOutlookのVBAの情報が少ないため、いつも活用させていただいております。
    ありがとうございます。

    現在、メール送信後に、自動で送信済みアイテムフォルダから
    異なるデータファイルの別のフォルダへメールをコピーするマクロを作成しております。

    「送信済みフォルダーに保存されるメールにフラグを自動的につけるマクロ」
    (https://outlooklab.wordpress.com/2015/01/31/)を参考にさせていただき、
    作成していますが、コピー先のフォルダの指定で躓いています。

    コピー先のフォルダがデフォルトのデータファイルではない場合、どのように指定すればよいのでしょうか?
    (仕分けルールでは、下書き状態のメールがコピーされてしまうため、出来ませんでした。)

    マクロは以下のようにしています。

    Dim WithEvents mySentItems As Items

    Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
    Set mySentItems = Session.GetDefaultFolder(olFolderSentMail).Items
    End Sub

    Private Sub mySentItems_ItemAdd(ByVal Item As Object)
    If TypeName(Item) = “MailItem” Then
    Dim myItem As MailItem
    Dim myCopiedItem As Outlook.MailItem
    Dim myFolder As Outlook.Folder
    Set myItem = Item
    Set myCopiedItem = myItem.Copy
    Set myFolder = ‘ ここの指定がわかりません。
    myCopiedItem.move myFolder
    End If
    End Sub

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

    • たとえば、”個人用フォルダー” の下の “テスト” というフォルダーに移動したい場合は以下のようにします。

      Set myFolder = Session.Folders(“個人用フォルダー”).Folders(“テスト”)

  5. 助けてほしいです。
    小さい転職先の会社でOutlook 2013をIMAPで使っているのですが、色分類項目が使えません。POPに変えると他の端末(IPHONE)からメールが見れないくなると聞きました。この分類項目を是非使いたのですが、方法はあるのでしょうか?
    宜しく、お願い致します。

  6. oulook2010のデフォルト設定では、
    受信トレイに新着メールがあると通知領域に封筒のアイコンが出ますが、
    新着メールが仕分け条件にヒットし他のフォルダに仕分けられると封筒のアイコンが出ません。

    新着メール受信で常に封筒のアイコンを出すマクロを作ることはできるでしょうか?

  7. ユーザフォームを使ってアンケートを収集したい。

    はじめまして、Hiroと申します。
    OutlookのVBAスクリプトを作成する必要があり、参考にさせていただきたいと考え、
    投稿を読ませていただいています。

    [やりたいこと]
    最初に記載しました通りユーザフォームを使ってアンケートを集約したいと考えております。
    こちらがアンケート用のフォームを作成し、対象者がそのフォームに入力したうえで
    ユーザフォーム内の「送信」ボタンを押したら私宛にその回答内容が返信されるようにしたいと存じます。

    [シーン]
    ・まずアンケートを取りたい人Aとアンケートを回答する人B(Bは複数)がいる

    ・Aがユーザフォームを使ったアンケートをBに送信
     ⇒Bがアンケートのフォームとなったメールを受け取る。

    ・Bがアンケートフォーム内にあるチェックボックス、リストボックス、テキストボックスに回答を入力する。

    ・Bが「送信」ボタンを押すとA宛に下記のメールが送信される。
     ⇒・フォームに入力された内容がメールの本文に書きだされている
      ・フォームに入力された内容がExcelに書き出されてメールの添付となっている

    ・VBAスクリプトやフォームを作成するのはもちろんA

    [特にできるようになりたい機能]
    ・ユーザフォーム内の「送信」ボタンを押したらメールを送信する機能
     ボタンとスクリプトを関連付ける方法
     そのスクリプトでメール送信をするコマンド(方法)

    ・エクセルファイルを開き、内容を書き込んでメールの添付ファイルとする方法
     添付ファイルの指定

    [情報]
    使用環境はWindows10、Outlook2010です。
    私自身はOutlookによるVBAは完全に初めてですが、
    プログラム関連は20年近く経験があります。
    ※プロのプログラマーとしての経験はなし、
     C言語を大学での授業やなどで10年ほど
     MATLAB/Simulinkを業務で10年程度
     EXCELでのVBAを仕事に有用なアプリ作成など
     

    • Outlook で HTML 形式の本文にフォームやスクリプトを埋め込んでを送信したとしても、受信側ではそのフォームやスクリプトは動作しません。
      メールの送信者が何らかのスクリプトを埋め込んで、それを受信者側で動作可能にすると、ウイルスなどに悪用されるためです。

  8. エラーを回避出来ず、悩んでいます。

    メールの本文をExcelシートに追記したいです。
    メール本文
    日時 AAA
    場所 BBB
    プロセス CCC
    バッテリ残量 DDD
     :
     など40項目程度

    Excelシート
    日時  場所  プロセス  バッテリ残量  ・  ・  ・  40項目程度
    AAA  BBB  CCC    DDD    
    AA1  BB1  CC1    DD1

    項目の順番がメール本文とExcelで合致しないため、メール本文の項目を抜き出しExcelの項目から検索して追記をしたいのですが、For文の2回目でエラーになります。
    メッセージ
    「オブジェクト変数またはWith ブロック変数が設定されていません。」

    以下プログラム

    ‘ TABで区切られたメール本文をExcelシートの項目に追記する
    ‘ メール本文の設置場所に記載されている場所と
    ‘ プロセスに記載されている状態をファイル名とする

    Public Sub ExportBodyToExcel()

    ‘ エクスポートする Excel ファイルのファイル名を指定
    Const Carent_Dir = “c:\temp\”
    Dim objBook As Object
    Dim objSheet As Object
    Dim r As Integer
    Dim strBody As String
    Dim strl As String
    Dim c As Variant

    ‘ メール状態の確認
    If TypeName(Application.ActiveWindow) = “Inspector” Then
    strBody = ActiveInspector.CurrentItem.Body ‘ 開いてる
    Else
    strBody = ActiveExplorer.Selection(1).Body ‘ 閉じてる
    End If

    If “” GetValueByToken(strBody, “設置場所”, False) Then
    ‘ メール本文の設置場所名のEcxelファイルを作る
    FileName = GetValueByToken(strBody, “設置場所”, False)
    EXCEL_FILE = Carent_Dir & FileName & “.xlsx”

    ‘ Excel ファイルを開く
    Set objBook = GetObject(EXCEL_FILE)
    objBook.Windows(1).Activate
    Set objSheet = objBook.Worksheets(1)

    ‘ 空行を探す
    r = 1
    While objSheet.Cells(r, 1) “”
    r = r + 1
    Wend

    ‘ メール本文の最後まで一行ずつ切り出す
    For s = 1 To Len(strBody) – 1
    e = InStr(s, strBody, vbCr) ‘ 改行までの
    strLine = Mid(strBody, s, e – s) ‘ 1行ずつ切り出す
    s = e

    t = InStr(strLine, vbTab) ‘ TABまでの文字数
    strTit = Mid(strLine, 1, t – 1) ‘ TABまでの文字列
    strVle = Mid(strLine, t + 1, Len(strLine)) ‘ TAB移行の文字列

    c = objSheet.Range(“A1:BZ1”).Find(strTit).Column   <—-ここでエラー
    objSheet.Cells(r, c) = strVle
    Next

    どうしたらよいのでしょう。
    ご教授お願いします。

  9. こちらのサイトいつも参考にさせていただいております。ちょっと諦めかけているのですが、
    お知恵をお借りしたく、よろしくお願いします。

    【フォルダサイズを取得したい】
    選択されたフォルダ以下の合計サイズを取得する

    【相談事項】
    対象フォルダやファイル数が多いと、とてもじゃないですが遅くて使い物になりません。
    Outlook上のフォルダを右クリック-プロパティ-フォルダサイズで確認できますが、とても速いです。
    ただしこちらはデータをコピーすることができません。
    もちろんFor Eachで足し算しているところが遅い原因です。なにか違うメソッドでもあるのでしょうか?

    【参考】
    ttps://gallery.technet.microsoft.com/office/c9c72a2e-3ed0-47b4-a044-3bc2197b59cf

    【コード】
    Sub GetSubfolders(ByVal objParentFolder As Outlook.Folder, ByRef aryFolder As Variant)
    Dim colFolders, objFolder, objSubfolder, oFolder As Outlook.Folder
    Dim objItem As Object
    Dim intSize As Long
    Dim strParentName As String

    ‘ 現フォルダの参照
    Set colFolders = objParentFolder.Folders

    For Each objFolder In colFolders
    Set objSubfolder = objParentFolder.Folders(objFolder.Name)

    Call GetSubfolders(objSubfolder, aryFolder)

    ‘ 選択フォルダ直下のメールの合計サイズ
    intSize = 0
    For Each objItem In objFolder.Items
    intSize = intSize + objItem.Size
    DoEvents
    Next
    ‘ 選択フォルダのサイズを配列へ格納する
    ReDim Preserve aryFolder(UBound(aryFolder) + 1)

    ‘ サブフォルダのサイズを取得
    aryFolder(0) = aryFolder(0) + Int(intSize / 1024)
    aryFolder(UBound(aryFolder)) = objFolder.FullFolderPath & “,” & Int(intSize / 1024) & “,KB,” & objFolder.Items.Count & “,Files”
    Next
    End Sub

    Sub GetFolderSize()
    Dim objFolder As Outlook.Folder ‘フォルダー
    Dim aryFolder As Variant
    Dim intSize As Long
    Dim objItem As Object

    ‘ 選択フォルダへの参照を取得
    Set objFolder = Application.ActiveExplorer.CurrentFolder

    ‘ 配列の宣言
    aryFolder = Array()

    ‘ 選択フォルダへのサイズを取得
    intSize = 0
    For Each objItem In objFolder.Items
    intSize = intSize + objItem.Size
    Next
    ReDim Preserve aryFolder(UBound(aryFolder) + 2)

    ‘ 選択フォルダのサイズと総合計を配列へ格納する
    aryFolder(0) = aryFolder(0) + Int(intSize / 1024)
    aryFolder(UBound(aryFolder)) = objFolder.FullFolderPath & “,” & Int(intSize / 1024) & “,KB,” & objFolder.Items.Count & “,Files”

    ‘ サブフォルダのサイズを取得
    Call GetSubfolders(objFolder, aryFolder)
    aryFolder(0) = aryFolder(0) + “,KB”

    End Sub

    • スミマセンでした。
      【使用環境】
      Windows7+Outlook2010
      です。よろしくお願いします。

      • PST ファイルや OST ファイルならそれほど時間はかからなそうなのですが、Exchange サーバーにオンライン モードで接続している状況でしょうか?

      • コメントありがとうございます。
        下記に返信リンクがでない為、こちらに回答します。

        参照先はPSTファイルです。サブフォルダは100-120くらい、それぞれのフォルダに1000-1500件ほど
        保存しています。PSTファイルで4-6GBです。

        どんどんメールがたまっていくため、優先的に添付ファイルを整理するため
        フォルダ単位でサイズを取得したく。。。

        右クリック-プロパティ-フォルダサイズ で 大よそ20-30秒くらい、
        このマクロでは6000件の合計を計算させるだけで30秒はかかってしまいます。。。

      • PSTでも発生となると、ディスクアクセスなどがボトルネックになっているように思われます。
        優先的にサイズが大きいメールを処理したいということなら、検索フォルダーの[サイズの大きなメール]を使ってみてはどうでしょうか?

  10. マクロ作成について、ご教示ください。
    outlook2013を使用しています。

    ある特定の期間に受信したメールのうち、
    件名に特定のキーワードが入っているメールをカウントし、
    件数とその件名を抽出したいと思っています。

    また、今日を基準に、先月を自動算出し、
    先月分の条件に該当するメールをカウントするなどは可能でしょうか。

    よろしくお願いします。

  11. すみません、教えてください。Office 365 より Office 製品をダウンロードして利用しています。SharePoint Online で何か不具合があるらしく、Office 2013 を利用しています。最新版があたっているのですが、メールを作成途中になぜかクラッシュしてしまいます。周りの人も同じような状況でクラッシュしているのでアカウントの問題ではなさそうなのですが、何か改善する方法はありますでしょうか?

    バージョンは以下になります。
    15.0.4893.1000 MSO (15.0.4893.1000) 32 ビット
    Microsoft Office 365 ProPlus の一部

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

    • メールの作成中にクラッシュとなると、Word のコンポーネントの不具合の可能性もありますね。
      ひとまず、2 月中にリリースされる Outlook と Word の修正を適用してみてください。
      また、頻繁にクラッシュするようならマイクロソフトのサポートに問い合わせてみてください。

      • ありがとうございます。2月にリリースされる Outlook と Word の修正を適用して様子を見ようと思います。

  12. Liveメールの送信済みアイテムの画面で送信したメールのマークが開いた状態になっていますが、相手が見たら開いたマークにできませんか?相手が既読したかどうかの確認メッセージは要りません。

    • 相手からの既読確認のメッセージなどを受け取らない限り、相手が開いたかどうかを確認することは物理的に不可能です。

  13. メールの本文など、あるキーワードを選択した状態で、
    右クリック->Google検索(マクロ)->ブラウザが起動(googleサイトで検索)
    となるようなマクロは作成できませんでしょうか?

  14. 色々検索していたらこのサイトにたどり着きましたので、お世話になりますが質問させていただきます。
    outlook2013を使用していますがメールを受信したら本文を自動で読み上げるという事をやりたいのですが仕分け等の機能を探してもみつかりませんでした。VBA等を使いメール着信後、本文を読み上げる事はできないのでしょうか?コピペし専用ソフトで読み上げる事は出来ますが、特定のアドレスに送られたメールを自動で読み上げてもらいたいと思います。

    使用環境は、
    Windows10
    Outlook2013

    • Outlook のルールやマクロではメールの本文を読み上げるという機能はないのですが、Excel の機能を使えばできるかもしれません。
      受信したらすぐにメールの読み上げをするということで良いのでしょうか?
      何らかの作業中や電話中に突然メールの読み上げが始まるというのは、ちょっと不都合があるのではないかと思いますが。

      • 早速の回答有り難うございます。お世話になります。
        受信後、直ぐにメールを読み上げて構いません。
        私もエクセルに貼り付けて読み上げさせてみましたが単語登録がないため結構読み違いが多かったので、
        今はSofTalkというフリーソフトに単語登録し使用しています。
        エクセルに単語登録できれば良いのですが・・・。いずれにしても自動で読み上げてくれれば大変たすかりますのでよろしくお願いいたします。

  15. お世話になります。windows7でoutlook2010を使用しています。超初心者で基本の質問で申し訳ありません。
    「受信したメールの添付ファイルを自動保存するマクロ」を仕分けルールのスクリプトで使いたく、マクロをVBA project.OTMのMicrosoft Outlook Objects内のThisOutlookSessionに張り付けたのですが、スクリプトを選択できません。どうしたらよいでしょうか。

  16. 別件(祝日追加)でマクロを利用させて頂き大変助かりました。

    可能であればマクロ作成をご検討頂きたいのです。

    OS:Windows 7 Professional(64bit)
    Outlook2013

    Outlook.comのアカウントの予定を個人の予定表として利用する為
    アカウント登録し、Outlook2013側で
    Outlook.comアカウントの予定を入力しております。

    Outlook2013の予定表でも同様だとは思うのですが
    予定の【件名】【場所】に入力した文字を検索は可能なのですが
    置換をしたいのです。

    よろしくお願い申し上げます。

  17. 上記に追記です。

    CSVでエクスポートし置換えた後に
    CSVでインポートという方法で可能なのは承知していますが
    以下の理由でCSVのインポートは避けたいという状況です。

    Outlook.comをAndroidのアプリで見ると表示されかなったりとなります。
    原因はバージョンの違いのように思います。

    予定表のビューで一覧にし、
    表示フィールドに【バージョン】を表示させると以下の状況となります。
    Outlook2013で入力(データ更新)分 バージョン【15.0】
    AndroidのOutlookで時間等を更新 バージョン【15.1Ex】
    CSVでインポート バージョン【空欄】

    CSVデータに【バージョン】の情報はエクスポートされないようです。
    CSVデータに【バージョン】の情報はエクスポートされ
    【バージョン】の情報【15.0】でインポート可能であれば問題ないのかもしれません。

    よろしくお願い申し上げます。

  18. win10(32bit)、outlook2016を使用しています。以下の操作を手作業でやっていますが、マクロで行うことは出来ますでしょうか。
    ・サブフォルダにある複数のメールを選択。(サブフォルダ内の全てのメールでも構いません。)
    ・選択した状態で「ファイル」「名前を付けて保存」をクリック。
    ・任意のフォルダを指定、「ファイルの種類(テキスト)」を選択、ファイル名は例えば「123.txt」として保存する。
    (結果的に、複数のメールの内容が並んだ1つのテキストファイルが作成されます。)

  19. Windows7(32bit)Outlook 2016をMicrosoft Exchangeで使用しています。
    以前、Outlook 2013を使用していたときに、アドレス帳に登録してある名前を連絡先に関連付ける下記のマクロを使って、差出人の名前を表示していました。
    ところが、同じマクロをOutlook 2016で使うとエラーが出てしまい、どこをどう修正して良いか分かりません。
    どなたか、分かる方はいらっしゃいませんか?

    Sub 関連付け()

    Set myNamespace = Application.GetNamespace(“MAPI”)
    Set myCfolder = myNamespace.GetDefaultFolder(olFolderContacts)
    Set myMItems = Application.ActiveExplorer.Selection

    For Each myMitem In myMItems
    With myMitem
    If .Class = olMail Then
    myAddress = .SenderEmailAddress
    For Each myCitem In myCfolder.Items
    Select Case myAddress
    Case _
    myCitem.Email1Address, _
    myCitem.Email2Address, _
    myCitem.Email3Address
    .Links.Add myCitem
    .Save
    End Select
    Next myCitem
    End If
    End With
    Next myMitem

    End Sub

  20. Windows8.1 (64bit) Outlook2013 (64bit)を使用しています.
    Subjectの先頭に”Re:”以外の文字が入ると,スレッドが切れてしまうことを避けるため,他のサンプルを参考にさせていただき,下記の置換をしました.
    Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim objItem ‘As MailItem
    Dim msgItem As MailItem
    Set objItem = Session.GetItemFromID(EntryIDCollection)
    Set msgItem = objItem
    If msgItem.Subject Like “回:Re:*” Then
    msgItem.Subject = Replace(msgItem.Subject, “回:Re:”, “Re:”, 1, 1, vbBinaryCompare)
    End If
    msgItem.Save
    End Sub
    ところが,プレビューではRe:となるのですが,スレッドは回:Re:のままでスレッドは切れました.
    スレッド表示にはheaderの中のMIME encodeされた部分を参照しているのかもしれませんが,マクロで対策する方法はありませんでしょうか?
    よろしくお願いいたします.

    • 残念ながら、スレッド表示をマクロで制御することはできません。
      Outlook ではスレッドを独自の方法で管理しており、件名を変更するとスレッドが分離する動作となっています。

  21. いつもこちらのVBAを見て勉強をさせていただいております。Outlookの予定表からCSVをエクスポートをするというマクロを基にファイルを作成しているのですが、一点どうしても回避できないエラーが発生してしまい、ご相談させていただきます。

    予定表の件名のところになるのですが ”✳会議”など 通常の記号ではないものが入力されたときに
    実行時エラー=’5’ プロシージャの呼び出し、または引数が不正です。というメッセージが表示され
    止まってしまいます。
    中味を確認すると objAppt.Subject = ”?会議”となっており StrLineで”?”を置き換えても
    全く エラーが回避できない状態になっています。

    XX = Replace(strLine, “?”, ” “)

    stmCSVFile.WriteLine  XX  ← ここで デバック。

    大変お手数ですが 回避方法を教えていただけますでしょうか。よろしくお願いいたします。

    • VBA のエディタは Unicode に対応していません。
      そのため、日本語環境で日本語以外の文字を使用していると、デバッグ画面では “?” と表示されます。
      ただし、実際の文字は “?” ではないため、Replace で “?” を使って置き換えることもできません。
      エラーを回避するには、CSV ファイルを開く際の CreateTextFile や OpenTextFile で Unicode を指定して開く必要があります。
      なお、CSV ファイルを Unicode で作成した場合、そのファイルをダブルクリックして Excel で開くと文字化けが発生しますので、注意が必要です。

  22. Excelファイルで集計表を作成し、マクロや数式を省き値に変換したものを別シートに移し、これをコピーして新規ブックを「特定のフォルダ」に保存。

    更に同じファイル上でマクロを実行、メール作成画面起動、定型文入力後、上記で保存したファイルを添付するよう「ファイルを開くダイアログ」を表示させたいのですが、プログラムで指定するフォルダが開きません。

    集計表の種類により保存するフォルダが変わる為、それぞれフォルダを別個に指定したプログラムで運用していますが、直近で添付したファイルのフォルダが開いてしまいます。

    該当のフォルダが存在しないとエラーになるので、あと一歩で何とか出来そうな気がするのですがうまくいきません。

    指定通りのフォルダが開くように修正できればありがたいです。
    宜しくお願いします。

    使用環境・・・
    OS:Windows7及びWindows10
    アプリケーション:Office2010

    VBAファイルの保存先:Cドライブ
    帳票ファイルの保存先:Dドライブ\フォルダ

    Sub メール作成()

    ‘ 添付ファイルをメールで送信
    ‘ Outlook専用

    Dim oApp As Object
    Dim objMAIL As Object
    Dim strMOJI As String
    Dim strSign As String

    On Error Resume Next
    Set oApp = GetObject(, “Outlook.Application”)
    On Error GoTo 0
    If oApp Is Nothing Then
    Set oApp = CreateObject(“Outlook.Application”)
    oApp.GetNamespace(“MAPI”).GetDefaultFolder(6).Display
    End If

    Set objMAIL = oApp.CreateItem(0)

    ‘本文の作成
    strMOJI = “ABC商事株式会社” _
    & vbCrLf & ” ” _
    & vbCrLf & “総務課 ○○様” _
    & vbCrLf & “写し:㈱COPO ○○様 ” _
    & vbCrLf & ” ” _
    & vbCrLf & ” ” _
    & vbCrLf & “いつもお世話になっております。” _
    & vbCrLf & ” ” _
    & vbCrLf & “標記の件、ご依頼の備品調査表、送付させていただきます。” _
    & vbCrLf & ” ” _
    & vbCrLf & “以上、宜しくお願い致します。” _
    & vbCrLf & ” ” _
    ‘署名作成
    strSign = “* ・ * ・ * ・ * ・ * ・ * ・ * ・ * ・ * ・ * ・ *” _
    & vbCrLf & “ 株式会社 COPO” _
    & vbCrLf & “ 山田 タロウ (内線111)” _
    & vbCrLf & “ E-mail yamada-taro@ac.copo-net.jp” _
    & vbCrLf & “* ・ * ・ * ・ * ・ * ・ * ・ * ・ * ・ * ・ * ・ *” _
    & vbCrLf & ” ”

    objMAIL.To = “abc.syoji@ab.abc.com”
    objMAIL.CC = “oo.kaco@ac.copo-net.jp”
    ‘objMAIL.BCC =
    objMAIL.Subject = “備品調査票送付の件”
    objMAIL.Body = strMOJI & vbCrLf & strSign
    objMAIL.Display

    Set TestObj = objMAIL.GetInspector.WordEditor

    Set objMAIL = Nothing
    Set oApp = Nothing

    ChDrive “D”     ’ここと・・・
    ChDir “D:\調査表”  ’ここです

    ‘ファイル添付
    DoEvents
    ‘「ファイルを開く」ダイアログを開きます
    With CreateObject(“WScript.Shell”)
    .SendKeys “%NAF”, True ‘添付ファイルの参照
    End With
    DoEvents
    End Sub

    • お世話になっています。
      添付ファイルの件(フォルダ指定ができない)、自己解決しました。

      【Outlook でフォルダ選択のダイアログを表示するマクロ】の解説で「Outlook 自体には Excel や Word のようにファイルの保存ダイアログを表示する機能はありません。」・・・という事でしたので、
      ファイルを開くダイアログ表示は、いささか無理があるものとあきらめました。

      そこで、パス毎直に指定したファイル名を「変数」に格納して対応させるように変更しました。

      帳票作成後のコピーの保存で自動的に付けられるファイル名を、作業シート上のセルに書出、これを変数に格納して対応させます。

      帳票作成からメールの送信まで、すべてマクロで実行でき、ファイルを開くダイアログを表示してファイルを選択させるより、スムーズに正確な作業が出来ることとなりました。

      以上報、告まで。
      また何かありましたら宜しくお願いします。

      ‘帳票作成作業のVBAに下記を追加
      Cells(24, 10).SELECT
      ActiveCell.FormulaR1C1 = 自動保存のファイル名の変数

      ‘追加した構文・・・
        Dim bookName As String

      bookName = Cells(24, 10) ’ファイル名が入力されたセルの値を変数に格納

      objMAIL.display’のあとに・・・
      objMAIL.Attachments.Add bookName ’変数に格納されたファイルを添付

  23. はじめまして。こちらのサイトでいつも
    Outlookのマクロ勉強させていただいています。

    受信トレイを未読メールのみにしたいのですが
    メールを開封済みにした際
    自動で別フォルダへ移動させることは
    出来るでしょうか。

    仕事でまだ処理していないメールを未読にしているのですが
    開封済みメールに埋もれてしまい処理漏れしてしまいます。
    手動で1件ずつ別フォルダへ移動させるのは
    大変なのでどうにか自動化できないかと考えています。

    使用環境は
    Windows7 + Outlook2010 です。

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

    • はじめまして

      こちらのページは大変参考になり、私も勉強させていただいています。
      「未読メール」だけをまとめたいだけでしたら「Outlook」の機能で可能です。
      ※別フォルダーに移動するわけではありません

      複数のフォルダーにわたるすべての「未読メール」を「未読フォルダー」にまとめて表示することが可能です。
      「未読フォルダー」は下記の手順で作成します。

      1.検索フォルダーを右クリックし、[新しい検索フォルダー] をクリックします。

      2.新しい検索フォルダーダイアログから、[メールの読み取り] セクションで [未読のメール] を選択し、[OK] をクリックします。

      3.作成された「未読メール」フォルダをお気に入りにドラッグします(ショートカットが作成されます)。
      ※あえて、お気に入りに表示しなくてもいいですが便利かと思います

      参考ページ
      Outlook2010:未読のメールフォルダを作成するには
      http://outlook-navi.com/qa/ol97.htm

      • halyakko さん、こんばんは。

        なるほど!
        検索フォルダを使うと
        未読メールだけまとめられるのですね。

        お気に入りに表示させて
        さっそく使います。

        ありがとうございました。

  24. 初めまして。現在特殊な環境でexchange2010にmapiで接続する際、接続できなくて困っております。
    環境は、ドメインa にexchange、adのユーザーがいるのですが、
    ドメインbに参加している仮想マシンに、ドメインaのユーザでログインし、outlookで受信しようとしており、NGとなります。

    なお、ドメインa bは双方の信頼関係を結んでおります。

    そのため、owaでは、パスワードの入力も必要なく正常に閲覧できております。

    exchange側に、何か追加設定が必要なのでしょうか?
    それともクライアント側に何か設定した方がいいのかわからない状態です。
    確認した方がいいこと等ありましたらお教えいただけないでしょうか。

    よろしくお願いします。

    • これだけだと、何が原因かの判断が難しいです。
      ログの採取などを行って調査する必要があると思いますので、マイクロソフトにお問い合わせください。

  25. こんばんは。
    Outlook 2010で以下のようなことができないか考えています。
    ・連絡先に登録されたメールアドレスをキーワードに、Outlook アドレス帳に設定したLDAPサーバーへ問い合わせて情報を取得し、連絡先を最新化するマクロ
    社内で所属が変わった場合を想定しています。
    よろしくお願いします。

    • 残念ながら、Outlook のマクロでは LDAP サーバーへの問い合わせを行うことはできません。
      アドレス帳で名前解決を実行するというものなら可能なのですが、名前解決で SMTP アドレスを指定した場合、アドレス帳に対して検索が行われずにメールアドレスだけで確定してしまうため、LDAP からの情報取得ができません。

  26. はじめまして。
    いつもサイトを拝見させていただき、大変お世話になっております。
     
    Outlook2013で連絡先の閲覧ウインドウで、名前の下にある4つのアイコンの中から一番右のメールのアイコンからメールを作成しようとすると、宛先にはメールアドレスが表示されます。この時にメールアドレスでなく、連絡先に登録してある表示名を宛先に表示する設定とかあるのでしょうか。新しい電子メールから作成した時と、送信済みアイテムの宛先が異なる名前で残ってしまうのが困っています。
     
    宜しくお願い致します。

  27. 本文や件名に期限が記載されているメールを期限の●日前に自動で自身や指定のMLにリマインドするマクロって作れますか?

    • 期限がどのように記載されているのかが決まっているのであれば、その文字列を解析してアラームを設定することは可能です。
      ただ、ルールが決まっていない場合、テキストから期限を抽出するというのは極めて困難です。

  28.  Outlook新しい予定(無題-予定)を開きます。その後、UserFormに配置されたListBoxから、文字列を選択し、この文字列を新しい予定の[場所]のコンボボックスに入力したいと考えています。
    文字列をstrTextとして
     Active予定Form.combo場所.text = strText
    とできればよいとは思うのですが、「Active予定Form.combo場所.text 」の正しい表現が
    いろいろ調べたのですがわかりませんでした。
     どのようにしたら場所のコンボボックスにマクロから入力できるようになるでしょうか?
     お知恵をお貸しください。

    • 自己レスです
      「アイテムに対してマクロを実行する際の記述方法」という記事がありました
      解決しました
      板汚しすみません

  29. 勝手ながらいつもお世話になっております。

    メッセージ送信の際、ハンドで宛先を(アドレス帳から選択)入力した時は、「連絡先の表示名(漢字表記)」で表記されますが、マクロで宛先・CCをあらかじめ設定していると(自動入力)、宛先・CCがメールアドレスの表記になってしまいます。

    自動入力で間違いは起こりえない筈ですが、送信ボタンをクリックする前に、ざっとでも宛先を確認したいです。
    ※仕事での使用なので、移動等で担当者が変わる場合もありますので・・・。

    しかし、メールアドレス表記では確認作業が若干手間であり、いまひとつでピンときません。
    マクロでの実行(入力)でも「連絡先(アドレス帳)の表示名(漢字表記)」になるようマクロを組みたいのですが方法がわかりません。
    可能であれば例文等、ご教示御願い致します。

    以下、現状です(3月3日に投稿したときのマクロです)。

    objMAIL.To = “abc.syoji@ab.abc.com”
    objMAIL.CC = “oo.kaco@ac.copo-net.jp”

    使用環境:Windows10、Outlook2010

    • 宛先を指定する際に表示名も指定できます。
      例えば、「テスト ユーザー」という表示名でアドレスが testuser@example.com なら、以下のように指定します。
      objMAIL.To = “テスト ユーザー <testuser@example.com>”

  30. お世話になります。
    Outlook2010環境において、
    マクロで仕訳ルールのチェックのオンオフを操作したいと考えております。
    このルールがオフだったら有効とかオンだったらオフとかをOutlook起動時の操作やメール送受信時の操作を考えています。
    ご教示お願い致します。

  31. はじめまして
    WebにOutlookのVBAの情報が少ないため、いつも活用させていただいております。

    まだまだvbaに関して未熟のため教えて頂きたいのですが、現在”受信メッセージの差出人を連絡先の表示名に置き換え”を使用さして頂いてるのですが、outlook起動時の同期メッセージ?(未起動時の受信メール)は表示名が変更されないのですが、変更することは可能でしょうか?

    それと上記のvbaと同時に”受信メールの宛先やCcをアドレス帳の名前に置き換えるマクロ”を使用したいと考えているのですが可能でしょうか?

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

    • Exchange サーバーを使用している環境でしょうか?
      その場合、Outlook が動作していない場合は NewMailEx が起動しないため、ルールのスクリプトを使う必要があります。

  32. はじめまして、いつもこのサイトの内容に助けられております。
    要望なのですが、メール返信時に特定の連絡先フォルダーを参照して、同じメールアドレスの連絡先の、電子メール2のアドレスに置き換えて返信ウィンドウを開くマクロを作成することは可能でしょうか。
    よろしくお願いします。

  33. はじめまして。
    いつもこのサイトにはお世話になっております。

    ActiveExplorer.CurrentFolder.Items(cntItem)
    を、選択された状態にしたいのですが、下記を調べてもメソッドが分かりませんでした。

    Items オブジェクト
    https://msdn.microsoft.com/ja-jp/library/office/ff863652.aspx

    Explorer オブジェクト
    https://msdn.microsoft.com/ja-jp/library/office/ff860356.aspx

    #.select とか、.Activateとかかと思いきや、思わぬ苦戦を強いられております。

    ご教示頂けますと幸いです。

    • 失礼します。補足です。
      「フォルダを開いたときに最新のメールを選択するマクロ」にて、
      ActiveExplorer.AddToSelection ActiveExplorer.CurrentFolder.Items(cntItem)
      を用いて選択状態にすることが出来ました。

      ただ、やりたかったこととしては10000件を超えるメールが格納されたメールボックスから、2年前の日付のメールをまとめてMailDropZoneというWebアプリ上にドラッグ&ドロップするという作業がありまして、その際まとめて選択したアイテムをドラッグしやすくしたかったので、「選択したい」=「選択されたメールまでメールボックスをスクロールしたい」でした。

      ご教示頂けますと幸いです。

  34. いつも大変お世話になります。

    さて、このサイトを参考に、メールチェッカーを作成し使っております。

    Private Sub Application_ItemSend

    でメール送付時に、作動するようにしております。

    ところが最近、部署を移動したら、スケジュールの承諾/拒否のような感じでスケジュールを

    聞いてくるメールにいくつか出くわし、「承諾」を選択して、送信のような感じで返信するのですが、

    その際、かならず、上記のPrivate Sub が作動し、エラーになります。

    スケジュール確認の場合は、作動させないように、修正コードを入れたいのですが、

    コーディングを教えていただけますと幸甚でございます。

    恐れ入りますが、宜しくお願い致します。

    ぺたぽん 拝

    • Application_ItemSend を特定の条件でだけ作動させないということはできませんので、ItemSend 内で適切な処置をすべきです。
      例えば、メールだけ処理する必要があるなら以下のようにします。
      Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
      If Item Is MailItem Then
      ‘ メールアイテムでのみ行う処理を記述
      End IF
      End Sub

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

    OUTLOOK2013とWEBのOFFICE365をあわせて使っているのですが、OUTLOOK2013上で【条件付書式】にてカレンダーに色づけをした場合、WEBのOFFICE365には反映されないものなのでしょうか?
    分類項目で設定しているものはWEB上でも確認できるものの、条件付書式のものの場合反映されないので、そういうものなのか、何か設定方法があるのかご教示頂けますと幸いです。

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

    • Office 365 の Web でメールを表示する機能は Outlook on the Web と呼ばれますが、こちらでは条件付き書式がサポートされていません。
      そのため、条件付き書式の設定は反映されず、反映する方法もありません。

  36. いつも大変お世話になっております。

    可能であればマクロ作成をご検討頂きたいのです。
    OS:Windows 7 Professional(64bit)
    Outlook2013

    【ビューの定義をエクスポート(インポート)するマクロ】
    【印刷スタイルの定義をエクスポート(インポート)するマクロ】

    ビューの定義や印刷スタイルの定義を社内で統一して利用したい。

    私が現在設定しているビューを
    PC内(Outlook2013)でコピーする事は出来ますが
    別PC(Outlook2013)へビューや印刷スタイルの定義を
    エクスポート(インポート)する事は出来ないでしょうか?
    標準の機能として、これらの定義のエクスポート(インポート)はないようなので
    マクロで作成可能であればお願いしたい次第です。

    ビューについては
    【現在のビューの設定をサブフォルダにコピーするマクロ】や
    2014年2月22日 コメントでの要望を受けての
    全てのストアのフォルダー階層にアクセス可能な
    【現在のビューをすべてのフォルダーに適用するマクロ】
    上記の2つのマクロをどうにかすれば可能なのでしょうか?

    ご検討の程、よろしくお願い申し上げます。

  37. BOLANです。
    OUTLOOK2010 Windows7で
    連絡先フォルダーのメールアドレスを取得したいのですが
    該当するマクロが無いようですが、ご教示お願いします。

    • 連絡先フォルダー自体にはメールアドレスは存在しません。
      連絡先フォルダーに含まれている特定のアイテムのメールアドレスを取得するということでしょうか?
      その場合、具体的にはどのような形でメールアドレスを取得するアイテムを特定する必要があるのでしょうか?

  38. いつも参考にさせて戴いております。今回初めて質問致します。
    HTML形式で図が含まれているメールに対して
    mailItem の reply メソッドを行うと図が保持されますが、本文に何かを追記しようとすると図が失われます。
    保持する方法はありますでしょうか。
    (Outlook 2010 or 2013, VBA はExcel から起動)
    ex) objReply.body = “test” + objReply.body –> 図がなくなる

  39. お世話になります。今回初めてコメントをさせていただきます。Outlook2010、Outlook2013の環境で、決まった差出人のメールを、受信トレイ配下に階層深くチェックした後に、移動させたいのですが、その時にフォルダが存在しない時は、作成してメールを移動させたいのですが、1回目は階層深くフォルダを作成し、移動することはできるようになったのですが、翌日、同じマクロを実行すると、最階層の下にフォルダをまた、階層深く作成してしまって、どうにかして、最階層だけ作成して、メールを移動するようにしたいのですが、よくわからないのです。ご教授いただけると助かります。
    受信トレイから→チェック済→年度→月→日に移動させたいのです。翌日は新しい日のフォルダが月の下に作成されて、メールが移動される。月が変わったら、新しく月と日のフォルダを作成して、日のフォルダにメールが移動される。年度が変わったら、年度、月、日のフォルダが作成され、新しい日のフォルダにメールが移動されるようにしたいのです。マクロVBAを作成した経験がなく、非常に困っております。どなたかご教授いただけると助かります。よろしくお願いいたします。

  40. いつも拝見しています。初めてコメント致します。環境はOutlook2016です。
    リボンのユーザー設定にて新しいタブを作成しました。
    メール画面、予定表画面、タスク画面用にそれぞれ作成したタブを、画面切り替え毎に併せて表示/非表示を切り替えたいのですが、マクロで可能でしょうか?
    Outlookのリボン切替に関するVBA情報が見つけられず苦労しています。
    ご教授いただければ幸いです。

  41. はじめまして。outlookのマクロを調べてココに来ました。
    過去ログを読ませていただいたのですが、幾つかの過去ログを参考にやってみたのですが
    スキルのない私には上手く組み合わせる事ができませんでした。

    やりたい事は、「件名にキーワードを含むメールを受信した際、キーワード毎に指定されたアプリを実行したい」なのですがoutlookのvbaで可能なのでしょうか?

    • 単にキーワードを含むメールを受信した際に特定のプログラムを実行するというだけなのであれば、自動仕分けのルールで [アプリケーションを開始する] というアクションを選択し、[アプリケーション] にそのプログラムを指定するだけで実現できます。
      受信したメールについてそのアプリケーションで何かしらの処理が必要というようなことになるとマクロで実装する必要がありますが、その場合は具体的にどのようなことをするかがわからないとマクロにできません。

  42. いつもお世話になります。
    会社でOutlook2013 & Exchangeサーバー環境で使用しています

    受信したメッセージは定期的に個人PCのローカルHDDに移動させています。
    ローカルPCの.pstファイル内の個別のメッセージへリンクを張って
    リンク集(bookmarkでも可)を作成したいです。
    リンク集のファイル形式はexcel, text, accessなどを想定しています。

    pst.ファイル内のメッセージへのリンクはoutlookの操作だけで可能でしょうか。
    もし、マクロorスクリプトの作成が必須でしたらご教示いただけないでしょうか。

    よろしくご教授ください

  43. outlook2010で「分類」を一度にまとめて登録したいのですが、CSVファイルやTXTファイルから登録、また削除するマクロは作れるでしようか?

  44. 会社でOutlook2010 & Exchangeサーバー環境で使用中
    デスクトップサーチサービスは提供されていません。
    このため、クイック検索ボックスでの検索結果は有効ではありません(不正確)。

    受信メールから、特定の添付ファイル名のあるメールを抽出したいのですが、クイック検索ボックスを利用せずに、うまく検索する方法があるでしょうか。

    • 残念ながら Windows Search を使用していない場合、Outlook の検索機能で添付ファイルを検索することはできません。
      マクロでファイル名を探すということは可能ですが、見つかったメールを Outlook のメール一覧ウィンドウで表示することはできず、テキストファイルなどに件名などを書き込むか、見つかったメールを特定のフォルダーにコピー・移動するというようなものになります。

  45. 会社でOutlook2010 & Exchangeサーバー環境で使用中
    https://outlooklab.wordpress.com/2014/05/10/%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E3%83%BC%E5%86%85%E3%81%AE%E3%81%99%E3%81%B9%E3%81%A6%E3%81%AE%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%AE%E5%86%85%E5%AE%B9%E3%82%92-excel-%E3%83%95%E3%82%A1%E3%82%A4/
    「フォルダー内のすべてのメールの内容を Excel ファイルに書き出し、さらに MSG ファイルとして保存するマクロ」
    を使用して、保存済みフォルダの削除フォルダのアイテムを完全削除前に、Excelでリスト化する目的で使用しようとしています。

    実行したところ、
    For Each objItem In fldCurrent.Items
    のところで、「型が一致しません」のエラーとなり、中断してしまいます。
    何が悪いのか、何処を直せばよいか、ヒントはないでしょうか。

    • このマクロは受信トレイなどメールが保存されているフォルダーでの実行を想定しています。
      しかし、削除済みフォルダーにはメール以外の種類のアイテムも格納されるため、そのアイテムが原因でエラーが発生します。
      削除済みアイテムに対して実行するには、
      Dim objItem As MailItem

      Dim objItem As Variant
      としてください。
      また、関数の冒頭に On Error Resume Next も追加してください。

  46. はじめまして。いつもこちらのマクロに助けていただいています。
    「受信メールの宛先やCcをアドレス帳の名前に置き換えるマクロ」の方へ先日コメントしてしまったので、改めてこちらへ再掲させていただきます。

    はじめまして。
    こちらのマクロに大変助けていただいています。

    「連絡先をマクロで活用する」の過去ログなどから、自分の望むようになんとか近づいているのですが、ひとつわからないことがあります。

    実行したいことは、受信したメールと、ルール付けでフォルダ分けした受信メールをアドレス帳の名前に置き換えなのですが、そこでひとつだけ、困っているのがフォルダ分けしたアドレスの反映がされていないことです。

    #マクロのモジュールがあまり理解できておらず、自分なりに色々組み合わせています
    #わかっていないことが悪いので、振り分け時に置き換えがされていなくても手動で良いです

    便宜上、連絡先にカテゴリAのアドレス、他はフォルダを作ってB、C・・・とし、DにはA~Cから選択したアドレスの組み合わせでグループ分けをしています。
    メール作成時に、デフォルトでカテゴリAにB,Cが入っていると大変不便なことが理由です。

    以下のようにしているのですが、これだと連絡先フォルダにあるカテゴリAのアドレスには置き換えがされるのですが、B,Cに入っているアドレスは反映がされません。
    簡単なことかもしれませんが、手助けいただけるととてもうれしいです。

    ※本当に切貼り状態なので、美しいマクロではないかと思います。ご容赦ください。

    ‘ メール受信時に発生するイベント
    Private Sub Application_NewMailEx(ByVal EntryIDCollection As String)
    Dim i As Integer
    Dim c As Integer
    Dim colID As Variant
    If InStr(EntryIDCollection, “,”) = 0 Then
    RewriteSender EntryIDCollection
    Else
    colID = Split(EntryIDCollection, “,”)
    For i = LBound(colID) To UBound(colID)
    RewriteSender colID(i)
    Next
    End If
    End Sub

    ‘ 差出人の名前を置き換えるサブプロシージャ
    Private Sub RewriteSender(ByVal strEntryID As String)
    On Error Resume Next
    Dim objMail ‘As MailItem
    Dim objContact As ContactItem
    Dim strSenderAddress As String

    Set objMail = Application.Session.GetItemFromID(strEntryID)
    If objMail.MessageClass = “IPM.Note” Then
    strSenderAddress = objMail.SenderEmailAddress
    Set objContact = FindContactByAddress(strSenderAddress)
    If Not objContact Is Nothing Then
    objMail.SentOnBehalfOfName = objContact.FullName
    objMail.Save
    End If
    End If
    End Sub

    ‘現在表示中のフォルダーの差出人を書き換えることができます。
    Public Sub 現在表示中のフォルダーの差出人を書き換え()
    On Error Resume Next
    Dim objMail ‘As MailItem

    For Each objMail In Application.ActiveExplorer.CurrentFolder.Items
    RewriteSender objMail.EntryID
    Next
    End Sub

    ‘ PF 連絡先を検索する関数
    Private Function FindContactByAddress(strAddress As String)
    Dim objContacts As Folder
    Dim objContact As ContactItem

    Set objContacts = Application.Session.Folders(“パブリック フォルダ”).Folders(“すべてのパブリック フォルダ”).Folders(“連絡先”)
    ‘ Outlook 2010 は下記を使用、sample@example.com を自分のメールアドレスに置き換える
    ‘Set objContacts = Application.Session.Folders(“パブリック フォルダー – sample@example.com“).Folders(“すべてのパブリック フォルダー”).Folders(“連絡先”)
    Set FindContactByAddress = FindContactRecursive(objContacts, strAddress)
    End Function

    ‘ 連絡先フォルダーを再帰的に検索する関数
    Private Function FindContactRecursive(objContacts As Folder, strAddress As String)
    Dim objSubFolder As Folder
    Set objContact = objContacts.Items.Find(“[Email1Address] = ‘” & strAddress _
    & “‘ or [Email2Address] = ‘” & strAddress _
    & “‘ or [Email3Address] = ‘” & strAddress & “‘”)
    ‘ 見つからなければサブフォルダーを検索
    If objContact Is Nothing Then
    For Each objSubFolder In objContacts.Folders
    ‘ 再帰的に検索
    Set objContact = FindContactRecursive(objSubFolder, strAddress)
    If Not objContact Is Nothing Then
    ‘ 見つかったら検索終了
    Set FindContactRecursive = objContact
    Exit Function
    End If
    Next
    End If
    Set FindContactRecursive = objContact
    End Function

  47. Win10 Outlook2016を利用しています。
    当サイト内の
    受信したメールの添付ファイルを自動保存するマクロ
    を参考にVBAを組みましたが、複数のメールを同時に受信したときにうまく動作しません。

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

    Else以下の分岐が、複数メール受信しているときは動作していないようです。

    何かいい方法はありますでしょうか?
    よろしくお願いいたします。

    • 実のところ、Outlook 2010 以降は EntryIDCollection に複数の ID がカンマで区切られて格納されてくるという動作がなくなったため、Outlook 2016 では Else 以降には進みません。
      おそらくはファイルの保存に時間がかかりすぎた場合に、次のイベントが処理されていないのではないかと思います。

  48. はじめまして以前掲載してた件名を変えて転送するマクロをしてみようとしてますが旨く行きませんなぜでしょうか
    Option Explicit

    ‘ ここをトリプルクリックでマクロ全体を選択できます。
    Public Sub ForwardWithPrefix(objMail As MailItem)
    Const FORWARD_ADDRESS = “” ‘ 転送先のアドレスを指定します
    Const SUBJECT_PREFIX = “テスト ”
    Dim objForward As MailItem
    Set objForward = objMail.Forward
    With objForward
    .To = FORWARD_ADDRESS
    .Subject = SUBJECT_PREFIX & objMail.Subject
    .Send
    End With
    End Sub
    アウトルックは2010ですよろしくお願い致します

    • うまくいかないというのはどのような動作となるのでしょうか?
      何かエラーが発生するのでしょうか?
      それとも期待した動作にならないということでしょうか?
      もし、このマクロを実行できないということなら、こちらについては自動処理の内部で呼び出すことを想定としているため、単独で動作させることはできません。
      直接実行するには以下のようにしてください。
      Public Sub ForwardWithPrefix()
      Const FORWARD_ADDRESS = “” ‘ 転送先のアドレスを指定します
      Const SUBJECT_PREFIX = “テスト ”
      Dim objForward As MailItem
      Set objForward = ActiveInspector.CurrentItem.Forward
      With objForward
      .To = FORWARD_ADDRESS
      .Subject = SUBJECT_PREFIX & objMail.Subject
      .Send
      End With
      End Sub

  49. はじめました。こんなに情報量豊富なサイトがあるのを知り感動いたしました。さっそく
    ご相談させていただきたく。

    Outlook2013において、所定フォルダにあるメールメッセージをSaveAsメソッドでmsg形式
    で保存するVBAを作成、試しているのですが、比較的大きなサイズのmsgファイルが添付
    されたメールメッセージをmsg形式で保存しようとすると、
    「処理を実行するためのメモリが不足しています」
    というエラーをはいてプログラムが途中終了してしまいます。
    エラー発生までは、msg形式のファイルが出来ているのですが16kBのままサイ
    ズが増えず、エラー発生とともにそのファイルが自動消去されます。

    【試行結果】
    ・(msg形式の場合、)Unicodeの如何を問わず不動作
    ・ファイル~名前を付けて保存 でも不動作
    ・不動作となるメールメッセージについて、txt形式であれば保存可能
    ・msgでない他のファイル形式で大きなサイズが添付されている場合、msg形式で保存可能

    【ご相談事項】
    ・最終的には、当該ケースでもちゃんと保存できるようにしたい
    ・複数メールメッセージを対象とした場合、あるメッセージが上述の事象により保存
     不能でも、そこで途中終了せず、メッセージ個数の分すべてトライ(次のメッセージ
     の保存トライが継続)されるように、せめてしたい

    【その他】
    大きなファイルでなくたくさんの宛先がセットされているmsgの場合に同様の事象が
    発生という説もあるようですが・・・自分にはこれ以上解明できませんでした。
    https://www.experts-exchange.com/questions/28536821/Outlook-vba-cannot-save-a-large-Msg-file-to-disk-error-2147024882-There-is-not-enough-free-memory.html

    https://social.msdn.microsoft.com/Forums/office/en-US/2836370d-33dd-44fe-b480-26edcf1f6859/does-the-saveas-method-in-microsoftofficeoutlookinterop-have-a-maximum-file-size?forum=outlookdev

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

  50. はじめまして。これほど情報量満載のサイトがある
    のを知り感動いたしました。早速質問させて戴きたく。

    Outlook2013上で所定フォルダ上のメールメッセージを
    SaveAsメソッドによりディスクにmsg形式で保存する
    VBAを作成していますが、メールメッセージがmsg形式
    の添付ファイルを持つ場合に保存が失敗し、そこで
    メモリエラーでプログラムが途中終了してしまいます。
    保存の際、ディスク上に16kBのmsgファイルが出来る
    のですがサイズがそこから増えることなく、エラー
    「処理を実行するためのメモリが不足しています」が
    出て、途中終了するとともに、上記ファイルが自動
    削除されます。

    【試行実験】
    ・msg形式での保存では、Unicodeの如何を問わず保存不能
    ・マニュアルで「ファイル~名前をつけて保存(msg形式)」
     でも保存不能
    ・保存不能のケースで、TXT形式での保存は可能
    ・添付のmsgファイルが壊れていることはおそらくなく、
     ダブルクリックで開いてみることが可能。但しそれを
     保存することも同じエラーで不能。
    ・メールメッセージをexplorer上のD&Dしてmsg形式で
     保存することは可能

    【相談事項】
    所定フォルダ上の複数のメールメッセージを1つずつ
    msg形式でプログラムで保存したいので、
    ・最終的には、対象とするメールメッセージを全て保存したい
    ・不能なメッセージがあってもそこで途中終了せず、次の対象
     の保存に取りかかれるようにせめてしたい

    【参考】
    添付ファイルのmsgが大きなサイズの場合に失敗するようですが、
    以下には必ずしもそうでは無く沢山の相手先が設定されていると
    失敗するとの話もあるそうです。もはや私には理解が及びません。
    https://social.msdn.microsoft.com/Forums/office/en-US/2836370d-33dd-44fe-b480-26edcf1f6859/does-the-saveas-method-in-microsoftofficeoutlookinterop-have-a-maximum-file-size?forum=outlookdev

    https://www.experts-exchange.com/questions/28536821/Outlook-vba-cannot-save-a-large-Msg-file-to-disk-error-2147024882-There-is-not-enough-free-memory.html

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

  51. outlook2013(office365proplus)です。
    ここでいろいろ参考にさせていただいて、予定表をテキストで取り出すvbsを
    使っております。
    数か月は問題なく使っていたのですが、最近、下記セキュリティのアラートが出るようになりました。
    「Outlook内に保存されている電子メールアドレス情報がプログラムによってアクセスされようとしています。なんたら」

    数分ごとに実行するようにスケジューリングしているので、事実上アラートが邪魔で使えない状況です。。

    いろいろ調べたのですが、「セキュリティセンターの設定でプログラムによるアクセス」を「不審な動作に関する警告を表示しない」にする、というのしか見つかりません。(私は管理者ではないので、この項目を変更できません)

    特定のプログラムを許可するようなオプションも見つかりません。

    何か対策は無いでしょうか。
    最近突然使えなくなったのは何かマイクロソフトで仕様変更したのでしょうか。。

  52. kkium

    はじめまして
    環境:windows10
    Outlook2013
    Excel 2013
    受信したメールを件名別に検索しExcelに本文を保存しようと思っています。
    いろいろ参考マクロをコピーしては試したのですがうまくいきません。
    初歩的な質問で申し訳ございません。

    • もう少し具体的な処理フローを教えてください。
      「受信した」というのは受信したタイミングで自動処理するのでしょうか?
      それともすでに受信済みのメールに対して手動で処理するのでしょうか?
      また、「件名別に検索」というのはあらかじめ決まった件名で検索するということでしょうか?
      それとも、手入力した件名を検索して見つかったメールの本文を保存するのでしょうか?

  53. 前回はサンプルをご教授いただきありがとうございました。
    今回は「受信したメールの添付ファイルを印刷し、メールを移動するマクロ」をベースとした質問です。
    ワードやエクセルファイルは印刷ダイアログの表示無しに通常使用しているプリンタで自動印刷が可能なのですが、TIFFファイルの場合は印刷ダイアログが表示されてしまいます。
    印刷ダイアログを表示させずに印刷する方法はあるのでしょうか?
    お手数をおかけしますが、よろしくお願いします。

    • 印刷処理自体はファイルを開くアプリケーションが行っているため、印刷ダイアログを表示するかどうかはそのアプリケーションに依存し、マクロで制御することはできません。
      TIFF ファイルを印刷する際にダイアログを出さないようなアプリケーションをインストールして TIFF ファイルに関連付ければ回避できると思いますが、ちょっと私のほうではそのようなアプリケーションがあるかどうかは把握しておりません。

      • お返事、ありがとうございます。
        マクロでは制御できない事が分かりましたので、違う方向から検討してみます。

  54. ZZZ

    環境:
    Outlook2013
    Excel 2013

    はじめまして。
    Excelの表をOutlookのメールに貼り付けたく、下のコードを作成しましたが、
    ”.Wordeditor.Windows(1).Selection.Paste”のところでエラー287が出てマクロが止まってしまいます。
    いろいろ試してみましたが、”Wordeditor”を含むところでエラーが出ます。
    理由と解決策をご教示いただけますでしょうか。
    どうぞよろしくお願いいたします。

    Dim oApp As Object
    Dim objMAIL As Object
    Dim strMOJI(1) As String
    Dim n As Long

    On Error Resume Next
    Set oApp = GetObject(, “Outlook.Application”)
    On Error GoTo 0
    If oApp Is Nothing Then
    Set oApp = CreateObject(“Outlook.Application”)
    oApp.GetNamespace(“MAPI”).GetDefaultFolder(6).display
    End If

    Set objMAIL = oApp.CreateItem(0)
    strMOJI(0) = Replace(Range(“I20”).Value, vbLf, vbCrLf)
    objMAIL.To = Range(“I8”).Value ‘ 宛先
    objMAIL.Cc = Range(“I10”).Value ‘ CC
    objMAIL.Bcc = Range(“I11”).Value ‘ BCC
    objMAIL.Subject = Range(“I12”).Value ‘ 件名
    objMAIL.Body = strMOJI(0) ‘ 本文
    objMAIL.display

    Range(“B4:D15”).Copy
    With oApp.ActiveInspector
    .Wordeditor.Windows(1).Selection.Paste
    End With

    Set objMAIL = Nothing
    Set oApp = Nothing

    End Sub

    • 私の手元の環境では問題なく動作しました。
      可能性としてはメールのウィンドウの表示までに時間がかかり、.WordEditor で Paste を実行する際にはまだ Active になっていないというものが考えられます。
      この場合は、エラーが出たらしばらく待ってリトライするというのが回避策として考えられます。
      また、もしかすると Outlook と Word のバージョンが一致していない場合に WordEditor が使用できないという制約があるかもしれません。

  55. はじめまして。
    マクロを使用して、現在登録されている会議室名をすべて取得したいと考えています。
    どのような関数を利用して、実現するのがよいのかお知恵を拝借できれば幸いです。

    outlook VBAは情報が少なく、困り果てています。
    どうぞよろしくお願いします。

  56. いつもお世話になっております。
    こちらのサイトをよく参考にさせていただいております。
    この度、検索フォルダーの再検索を定時処理で実行したくご教示頂ければと思い、
    コメントさせて頂きます。

    ver:Outlook2013
    OS:Windows7 Pro SP1

    検索フォルダーで「過去7日以内」の検索フォルダーを利用していますが、
    日を跨ぐと再検索が必要になる為、読み込み中となりメールの量も多い為、
    数分~10数分かかることもあります。
    その間、端末自体がそれなりに重くなる為、明け方などに定時処理で再検索を
    しておき、朝にはすんなりと開けるようにしたいと考えております。

    タスクのアラームを利用して定時処理をする事は出来ましたが、
    .ActiveExplorer.CurrentFolderでも、.Display(新しいウィンドウで開く)でも、
    再検索はされず、結局フォルダーツリーをマウスでクリックする等して該当の
    検索フォルダーを開くと読み込み中になる状態です。

    あとは思いつく方法として一つ上のフォルダからSendkeyで一つ下のフォルダを
    選択するとかくらいですが、Sendkeyはなにぶん動作不安定なので他に希望の
    動作を実現する方法があればご教示下さい。

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

    ※会社から同様のコメントをしたのですがうまく送信されていないようなので、
     再度、コメントさせて頂きます。
     二重投稿になってしまったら申し訳ございません。

  57. Outlookの予定表で「新しい予定表グループ」で新しい予定表グループを作成して、そのグループの中に「予定表の追加」で共有するユーザーを追加するVBAを作成したいのです。

    新しい予定表グループを作成するのは下記でできたのですが、
    ActiveExplorer.NavigationPane.Modules.GetNavigationModule(olModuleCalendar).NavigationGroups.Create(グループ名)

    共有するユーザーの追加が出来ずに困っております。
    「NavigationFolders.Add (ユーザー名)」では「型が一致しません」とのエラーが出ます。

    突然で申し訳ございませんが御教授頂けます様よろしくお願いいたします。

    • 予定表グループにほかのユーザーの予定表を追加する場合、NavigationFolders.Add にはユーザー名を指定するのではなく、GetSharedDefaultFolder により取得したフォルダーを追加します。
      例えば、以下のようになります。

      Set recUser = Session.CreateRecipient(“username”)
      recUser.Resolve
      Set fldShare = Session.GetSharedDefaultFolder(recUser, olFOlderCalendar)
      NavigationFolders.Add fldShare

      ただし、この方法で追加できるのはその予定表に参照者以上の権限がある場合です。
      [空き時間情報] や [空き時間情報、件名、場所] という権限しかない予定表はマクロで追加することはできません。

  58. お世話になります。OUTLOOKの予定表の本文中の書式設定(フォント、色、サイズ)を変更したいのですが、
    どのようにしたらできるでしょうか?ご教示ください。
    現状、objITEM.Body= ” xxxxxxxx ” にて本文を設定しています。

    メールの場合には .HTMLBody= “” & “” などで、変更できたのですが。

    お手数ですがよろしくお願いいたします。

  59. はじめまして

    本文にIPアドレスを含むメールが飛んでくるのでそのメールが着たらpingを自動で投げるようにしたいのですが、できますでしょうか?

    [環境]
    os:win7 pro
    outlook 2010

    メール
    件名:障害発生
    本文「
    IPアドレス:○○.○○.○○.○○
    障害時間:yyyy:mm:dd hh:mm
    障害ログ:~~~~~

  60. いつもお世話になっております。
    特定のフォルダに入っているメールを転送用のとして下書きメールの作成(未送信の段階)まで行いたいVBAを考えております。
    初心者過ぎて全く分からないのですが、作成して頂けないでしょうか。

    • もう少し詳しくやりたいことを説明いただけますでしょうか?
      特定のフォルダーに入っているすべてのメールを下書きにするのでしょうか?
      転送用ということは、転送ボタンをクリックした直後のような状態で下書きに保存すればよいのでしょうか?

  61. EXCELのVBAで生成したOUTLOOKの予定表の本文(Body)の一部をEXCEL VBAで太字にしたいです。どのように記述すればよいか、ご教授願えませんでしょうか?ついでに一部の文字を赤にする場合も、ご教授いただけると助かります。よろしくお願い致します。

  62. Outlook VBAをいろいろ調べている中で本サイトを知りました。すばらしい!今まで知らなかったのが悔やまれます。

    早速質問させていただきたいのですが、Outlookで受信したファイル名の一覧を送信者のメールアドレスとセットで取得する良い方法がありませんでしょうか?
    (究極的には添付ファイルを送信者名に変えて保存するVBAが希望なのですが、送信者名と添付ファイルがセットで一覧化できれば私のスキルでもExcel VBA等を使ってファイル名の変更が出来ます。)
    御サイトとGoogle検索は行ったのですが、私のやりたいことが出来る記述がありませんでした。
    アドバイス頂けますと幸甚です。

    • この処理はメールを受信したタイミングで自動的に行うのでしょうか?
      それとも、現在受信トレイにあるメールに対して行うのでしょうか?
      また、添付ファイルが複数ある場合や同じ送信者から複数回添付ファイルがあるメールを受信した場合にはどのように処理するのでしょうか?

  63. いつもブログ拝見させていただいています。

    私は、ある会社で新人研修のスタッフを行っております。
    新入社員は一日の終わりに日報をメールで作成して送るのが義務に
    なっています。

    そこで新入社員が送信したメールデータをExcelファイルにエクスポートする
    マクロはございますでしょうか。
    (新入社員が日報を送ったかチェックするためです。)

    ■メール抽出条件
    ・件名が”【日報】”となっているもの
    ・日付を指定して抽出する
    ・受信フォルダを複数指定して抽出

    ■Excelに抽出する際に必要情報な情報
    ・件名
    ・差出人(CC情報も含む)
    ・宛先

    利用環境はOutlook2016です。

    ご教授頂きたく、宜しくお願い致します。

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

    下書きメールの名前解決を、マクロでまとめて行いたいと試行錯誤しています。

    .Recipient.Resolve で解決できなかった送信先について、リボンの「名前の確認」で出てくる「”●●”が複数見つかりました。」のダイアログを表示し、利用者に選択させたいですのですが、これを直接表示させて値を取得することは出来るのでしょうか?

    .GetSelectNamesDialog を試してみたのですが、「名前の選択」でアドレス帳が表示され、未解決でOKを押した後に目的の画面になるため、この手間をどうにか省けないかと思った次第です。

    利用環境はWindows 7/Outlook 2013です。
    ご教示のほど、どうぞ宜しくお願いいたします。

  65. 助けてほしいです。
    Outlookで以下ルールを追加しているのですが、
    時々クライアントエラーになります。
    エラーになった仕訳ルールを削除し、新たに同じルールを作成すると
    問題なく動くのですが、何日か経つとまたクライアントエラーになってます。
    =====仕訳ルール内容=====
    この仕訳ルールは次のタイミングで適用されます:メッセージを受信し時
    [差出人]が”特定のユーザー”の場合
      さらにこのコンピューターで送受信した場合のみ
    Project1.testを実行する。
    =================
    Project1.testは件名や本文の一部を引数としてjarを実行するマクロです。

    Outlookのバージョンは2010です。
    Outlook 2016がインストールされてるPCでは同じ仕訳ルール(差出人だけ違います)でも
    一度も本事象は起こっていないのでもしかしたらOutlookのバージョンが
    関係しているのかなと推測しています。
    原因と解決策をご回答いただけましたら幸いです。

    • Outlook 2010 で発生して Outlook 2016 では発生しないとなると、何らかの不具合があり、Outlook 2013 以降で修正されたのかもしれません。
      Outlook 2010 の最新の修正プログラムは適用済みでしょうか?

  66. こんにちは。

    実は初めましてではありません。以前も助けていただいたことがあります。
    そのときは、ありがとうございました。

    私、とある任務を持っています。それは、会社の代表メールに着信したメールを振り分けるという、それなりに大事なこと。

    しかしOutlook(2013/2016)で普通に転送をすると、「送信者」は当然”私”となります。よって、転送メールを受け取った人は、それほど深く考えずメールに対し返信をすることで、すべて私に戻ってくるわけです。

    これの解決策として、世の中には「リダイレクト」という仕組みが用意されています。Outlookでも「仕分けルール」を使うことで(自動的に)行えるようですが、自動的ではダメなのです。

    受信したメールを確認し、”このメールは人事課”,”このメールは総務課”とひとつひとつ大事に転送を掛けていきたいのですが、Outlook(手動)でなんとか出来るようになりませんか?

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

    風のピエロ

  67. 「受信したメッセージの差出人表記を、自身で登録したアドレス帳の表示名で表示する方法」

    はじめまして。コメント失礼致します。
    outlookを利用してから、受信したメッセージの差出人名が、相手が登録しているユーザ名やメールアドレスで表示されてしまうため、分かりにくく困っております。

    過去の投稿
    「受信メールの宛先やCcをアドレス帳の名前に置き換えるマクロ」(2016年7月30日)
    https://outlooklab.wordpress.com/2016/07/30/%e5%8f%97%e4%bf%a1%e3%83%a1%e3%83%bc%e3%83%ab%e3%81%ae%e5%ae%9b%e5%85%88%e3%82%84cc%e3%82%92%e3%82%a2%e3%83%89%e3%83%ac%e3%82%b9%e5%b8%b3%e3%81%ae%e5%90%8d%e5%89%8d%e3%81%ab%e7%bd%ae%e3%81%8d%e6%8f%9b/

    を参考に、受信したメッセージの宛先表記はアドレス帳に登録した表示名で表示することが可能になりました。

    差出人名も同様に、アドレス帳への登録名称に変換するマクロをご教授いただけますと幸いでございます。

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

  68. お世話になります。
    「出席者から辞退の返信が来た際にキャンセル通知を送信して会議を削除するマクロ」にて質問者の方とほぼ同じ用途で会議室予約のマクロを作成しており、辞退になったアイテムの自動キャンセル送信に、上記マクロを使用させていただいております。

    しかし、以下の条件で実行時エラーが発生します。

    ■条件1
     一つの予約アイテムに複数の会議室を指定した同一条件のアイテムを多数同時送信した場合
     ※必ず再現する
    【エラー発生個所】
     apptItem.MeetingStatus = olMeetingCanceled
     このとき、「apptItem」の値は「Nothing」になっています。
    【エラー内容】
     実行時エラー ’91’
     オブジェクト変数またはWithブロック変数が設定されていません。

    ■条件2
     一つの予約アイテムに一つの会議室を指定した同一条件のアイテムを多数同時送信した場合
     ※再現性は低い
    【エラー発生個所】
     Set objItem = Session.GetItemFromID(EntryIDCollection)
    【エラー内容】
     実行時エラー ‘-2147352567(80020009)’:
     アイテムを開けませんでした。もう一度試してみてください。

    エラー番号など調べてみましたが、解決には至っておりません。
    初心者で申し訳ありませんが、よろしくお願いいたします。

    • 条件 1 については、複数の辞退メールを受信した際に、1 通目で会議アイテムが削除されてしまっているため、2 通目以降では会議アイテムが取得できずにエラーになっていると考えられます。
      条件 2 についてはちょっと不明ですが、何らかの理由で受信メールが開けないという状態であり、マクロの書き方で対処できるものでもなさそうです。
      いずれにせよ、エラーが発生しても無視するように Dim objItem の前に On Error Resume Next を入れてみてください。

  69. 普段より拝見させていただき勉強させていただいております。
    Outlookの会議室予約を項目別にExcelシートに設定し、メール送信をしたら
    素人考えで恐縮ですが、予約が受付できるのではないかと思いましたがうまくできませんでした。
    十分な知識がなく、もし助言等いただければ幸いです。
    よろしくお願い致します。

    Exchange2007
    Excel2013

    A列1行目から順に次の項目名を順に設定しました。

    ・件名/開始日/開始時刻/終了日/終了時刻/終日イベント/アラーム オン/オフ/アラーム日付/アラーム時刻/
    会議の開催者/必須出席者/任意出席者/リソース/場所/内容/秘密度/分類/優先度
    ・会議の主催者や任意出席者は、メールアドレスをカンマ区切りで入力しました。
    ・会議室の名称はOutlookグローバルメールアドレス一覧から取得し、設定しました。

    • Exchange 環境で会議出席依頼を生成する場合、まずは開催者の予定表に予定アイテムを作成し、そのアイテムから会議出席依頼を送信する必要があります。
      そのため、ほかのユーザーを開催者とした会議出席依頼を送信するには以下の権限が必要となります。
      ・開催者の予定表に対する編集者権限
      ・開催者の代理としてメールを送信する権限
      これらの権限の付与が可能ということであれば、マクロでの送信も可能と思いますが、権限が付与できないならマクロでは実行できません。
      権限の付与が可能かどうか管理者の方にご確認ください。

  70. (こんなマクロがあったらいいな)
    コメント失礼します。
    Windows10でoutlook2016を使用しております。
    游ゴシックを使用したHTMLメールが大変読みにくく(Outlook2016のデフォルトでしょうか…)
    画面の調整では限度あり、かすれたような読みにくさは、
    PCの環境によっては、回避できない場合もあります。

    Outlookの設定では、HTMLメールをテキスト形式として受信する設定があり、
    かつ、テキストメールの設定を所望のフォントにしておけば、
    見やすさは確保できるのですが、
    余計な改行が入る、表などの書式もなくなってしまうことから
    この機能に頼ることはできません。

    そもそも、
    HTMLメールに游ゴシックを使わない、(好きな方ゴメンナサイ。)
    HTMLメールで改行するときは、SHIFT+ENTERで!
    と送信時に、ひと手間かけていただければ解決するのですが、
    それはそれで、難しい話です。

    ご提案なのですが、
    HTMLメール受信時に、特定のフォント(游ゴシック)を、
    特定のフォント(MeiryoUIやMSゴシック)に置換し
    表示するマクロがあると、救われる方々が大勢いらっしゃると思います。
    是非、ご一考いただければ幸いです。

  71. いつもお大変世話になっております。

    下記の運用を考えておりますが、マクロで対応することは可能でしょうか。
    ご検討いただければ幸いです。

    ■ やりたいこと
    受信トレイに保存されているメールアイテムのうち下記の要件に合致
    しているメールのみを特定のフォルダへ移動させたい
    <要件>
     ・ 受信後、14日が経過している
     ・ 件名に特定の文字列が入っている

    ■ 利用環境
    OSバージョン:Windows7 SP1 & Windows10 RD2
    Outlookバージョン:Outlook2016
    サーバ:Exchange Online

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

  72. いつも勉強させていただいてます。
    ありがとうございます。

    新規メールの作成時、メールの返信時において、
    署名をメールの宛先のドメインに合わせて変更することは可能でしょうか。
    ぜひご教示いただければ幸いです。
    よろしくお願いいたします。

    操作環境
    Windows 7
    Outlook 2013

  73. コメント失礼します。
    windows7 outlook2010です。
    やりたいこちは、特定のメールから受信し、自動で編集して、再送したいです。今考えているのは受信後自動で各項目ごとにエクセルに転記、転記されたデータをvlookupで別データから参照し値を抽出、その抽出したデータを元のメール文章に追加して送信できればと思っています。
    特定のメールアドレスから顧客番号が記載されて送られてきますが、顧客名と住所をいちいち調べなければなりません。現状は顧客名と住所を調べて、元のメール文に追記して再送しています。
    それを自動化できればと考えています。

    メール文 (例

    受信日時 〇〇〇〇
    顧客コード 〇〇〇〇〇〇〇〇
    内容 〇〇〇〇〇〇〇〇

    下記のコードでエクセルに本文を転記することができました。

    Public Sub ExportToExcel()
    ‘ EXCEL ファイルをフルパスで指定します
    Const EXCEL_FILE = “c:\sample\sample.xlsx”
    Dim objItem As MailItem
    Dim objBook ‘As Excel.Workbook
    Dim objSheet ‘As Excel.Worksheet
    Dim r As Integer
    ‘ メールをどのように開いているか確認
    If TypeName(Application.ActiveWindow) = “Inspector” Then
    Set objItem = ActiveInspector.CurrentItem
    Else
    Set objItem = ActiveExplorer.Selection(1)
    End If
    ‘ Excel ファイルを開く
    Set objBook = GetObject(EXCEL_FILE)
    objBook.Windows(1).Activate
    Set objSheet = objBook.Sheets(1)
    ‘ データがない行まで移動
    r = 2
    While objSheet.Cells(r, 1) “”
    r = r + 1
    Wend
    ‘ メールの情報を Excel ファイルに追記
    With objSheet
    .Cells(r, 1) = objItem.SenderEmailAddress
    .Cells(r, 2) = objItem.Subject
    .Cells(r, 3) = objItem.Body
    End With
    ‘ Excel ファイルを閉じる
    objBook.Close True
    End Sub

    これだとマクロを実行しないとエクセルに転記されません。
    受信毎で自動でエクセルに転記したいです。どこにコードを足せばよいですか?

    このあと、エクセルの関数で項目ごとに各セルに振り分けし、(A1:受信日時 B1:顧客コード C1:内容)顧客コードからvlookupで顧客名と住所を抽出まではできましたが、そこから自動でメールを作り、送ることは可能でしょうか?

  74. いつもマクロを参考にさせていただいています。
    ありがとうございます。
    利用環境は、windows7 outlook2013で、送信時にメールの宛先や本文内容をチェックする
    マクロを使用しています。

    作成したマクロを社内のユーザに配布をして使用してもらう予定なのですが、今後のことも考えて
    ユーザが使用しているバージョンの確認をヘッダ情報で行えないかと考えています。

    希望としては、X-Mailer等の情報を変更できれば良いのですがヘッダに何かしら特定の文字列を
    追加できればかまいません。

    よろしくお願いします。

  75. コメント失礼します。
    outlook2016‐exchange2016です。
    〈ご質問したいこと〉
    素朴な疑問で恐縮なのですが、outlookで組織内(同じ上司の配下です)ユーザーの予定表を参照する際、EWSって影響するのでしょうか。

    〈補足〉
    下の予定表問題に対してメールボックスの EWS を有効化したら直ったと言われてますがしっくり来てません。
     ー問題
    ユーザXからユーザAの予定表は見えていて、ユーザBの予定表を表示しようとするとエラーになり、アイテムが1つも表示されません。
    ユーザYからはA、Bの予定表は参照可能で、
    X、Yの権限はA、Bに対して共にデフォルトの参照権限です。
    かつ、OWAからはユーザXからユーザBの予定表を参照可能です。
    OLKのプロファイル再作成は試して改善しませんでした。

  76. Windows10、Outlook2016環境です。

    受信したメール(受信時・すでに受信済の任意フォルダーにあるメール)の差出人を、アドレス帳にある表示名に置き換えて表示したく、いろいろ試してみたのですがうまくいかずお願いします。

    おそらく、連絡先フォルダーをいくつかに仕分けていることが原因だと思われます。

    連絡先フォルダーのディレクトリは以下のようになっています

    連絡先フォルダー/
     ├ ***@**.****
     ├ ***@**.****
     ├ 連絡先フォルダーA/
     │ ├ ***@**.****
     │ ├ ***@**.****
     ├ 連絡先フォルダーB/
     │ ├ ***@**.****
     │ ├ ***@**.****
     └ 連絡先フォルダーC/
       ├ ***@**.****
       ├ ***@**.****

    ・受信時、連絡先フォルダーにアドレスが見つからなければ、A、B、C・・・から探し置き換え、なければそのまま表示する

    ・すでに受信してしまっているメールに対しても同様の処理を行う(手動で可)

    同じ差出人でも件名によって振り分けルールを実行しているので、今回のVBA処理で
    振り分けを行うことはありません。
    (できれば素晴らしいですが、今回はそこまで求めません)

    簡単なことなのかと思うのですが、お願いできると大変助かります。

    • ご対応いただきありがとうございました。
      ふたつ質問です。

      メールの受信時にこのマクロが実行されると認識していたのですが、
      どうやらその都度マクロを実行しないと実行されません。こちらの環境の問題でしょうか。

      もうひとつ、このマクロを実行するにあたり、受信トレイにあるメールでしか処理ができません。

      ルール仕分けによって、受信トレイと同階層(受信トレイ配下)ではないフォルダーがあるので、それぞれに適応させたく、いずれも「アイテムに対してマクロを実行する際の記述方法」を参考にして変更を試みているのですが、やはりうまくいきません。
      また、受信トレイ配下のフォルダにも適応ができません。

      一番の希望は、受信時にすべての親フォルダーと配下にあるフォルダーにマクロが実行されてルール仕分けがされることです。(振分け条件はVBAではなくOutlookの振分け機能使用)

      あるいは、表示中の受信トレイ(親1)、同階層のフォルダ(親2、親3)を選択した状態で実行すると配下フォルダを含めて実行できれば嬉しいのですが…

      現在はいったん受信フォルダーに移してマクロを実行させて対処しています。

      今自分にできそうなことは、適応させるフォルダーごとにマクロを作成するくらいなのですが、スマートではないですよね・・・。

      「アイテムに対してマクロを実行する際の記述方法」
      https://outlooklab.wordpress.com/2013/02/02/%e3%82%a2%e3%82%a4%e3%83%86%e3%83%a0%e3%81%ab%e5%af%be%e3%81%97%e3%81%a6%e3%83%9e%e3%82%af%e3%83%ad%e3%82%92%e5%ae%9f%e8%a1%8c%e3%81%99%e3%82%8b%e9%9a%9b%e3%81%ae%e8%a8%98%e8%bf%b0%e6%96%b9%e6%b3%95/

  77. Windows7/ExchangeServer/Outlook2013の環境です。マクロについて教えて下さい。
    複数のドメインが混在していた時に警告を表示するマクロ、を部内で共有させていただいておりますが、単一ドメインが自社ドメインに混在していた時にも警告を表示することは可能でしょうか。
    例:社内向けの案内だったにもかかわらず、間違えて社外の人を1名入れてしまった。

    (送信時に宛先に含まれるドメインの数で異なる警告メッセージを表示するマクロ、はうまく機能しませんでした。自分のドメインを認識してくれていないようすです)

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

  78. Windows7/ExchangeServer/Outlook2013の使用環境です。
    メールフォルダービューについて教えてください。
    メールのビューでフォント設定を11ptにしており、現在のビューを他のメールフォルダに適応するをクリックしてサブフォルダにも適応するを選択したのですが、選択した日は適応されています。
    ですが数日たちメールを開くとフォントが小さくなり元に戻ってしまいます。
    もとに戻らなくなる方法を教えてください。

    • 既存のビューを変更すると、その変更はフォルダーに保存されますが、何らかの理由でリセットされる場合があります。
      このようなことを避けるには、そのカスタマイズしたビューを別の名前で保存するとよいでしょう。
      ビューをカスタマイズしたら、[表示] リボンの [ビューの変更]-[現在のビューを新しいビューとして保存] で名前を付けて保存し、その後他のメール フォルダーに適用してください。

  79. いつも参考にさせて頂いております。
    ところで定義されたビューをユーザ設定したタブに登録したいと考えております。
    VBAでビューを呼び出すことが出来るのでしょうか。
    以前にビューをインポートするマクロがあり、それを参考に作成してみましたが、ビューの呼び出しがうまくいきません。
    アドバイスを御願いします。

  80. いつも参考にさせていただいております。
    利用環境は、windows7 outlook2013です。
    時々ですが、メールの本文が空白になってしまいます。
    特にメールボックスを何日か開けていなくて、一度に受信した時に起こることがよくあります。
    WEBメールではきちんと本文も見られます。
    ネットで調べると特定のウィルスソフトに原因がある、という記載を見つけましたが、
    当方はそのソフトを利用しておりません。
    何か、原因が分かればと思っております。

    • このような場合に可能性として考えられるのはやはりウイルススキャンソフトです。
      ウイルススキャンソフトの中にはサーバーからダウンロードしたメールをいったんそのソフトがスキャンし、その後Outlookに引き渡すというものがあります。
      そして、そのソフトの動作に問題がある場合、スキャン後のメールの本文がなくなることがあるのです。
      ひとまず、一度ウイルススキャンソフトで送受信時のスキャンを無効にしてみてはどうでしょうか?

  81. 始めまして。
    会社の指定でOutlook2013の利用を始めました。
    社外への送信時には、本文の最後にセパレータとして
    –@sep
    を記載し、改行後に登録したキーワードを記載することになっています。

    そこで、以下マクロを教えていただけると非常に助かります。
    ・キーワードを送信先メールアドレスとし
    ・宛先に社外メールアドレスがある場合、宛先から社外メールアドレスのみを抽出
    ・–@sepを本文の最後(署名のあと)に追記
    ・社外メールアドレスを追記(1メールアドレスごとに改行)
    ・社内にあたるドメインはグループ会社も含まれるので、複数をマクロ本文内で設定したい。
     @xxx.co.jp,@yyy.co.jp
     など除外ドメインを指定したい。

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

  82. はじめまして、はせがわと申します。
    Outlookのマクロを作りたいとネットを検索していて貴サイトを拝見し、ご質問させていただきたく思いました。

    やりたいこと
    社員向けに500件くらいのメールをAccessから自動送信しています。
    本メールには社内試験の結果等をパスワードを付したファイルをメールに添付して受験者に送信しました。
    パスワードを知らせるメールを受験生全員に上記メールに返信する形です送付したいと考えています。

    具体的には、特定のメール(タイトルと日付)を探し出し、本メールへの返信メールを作成し、パスワードを連絡するメールを送信したい。
    1.送信トレイの中から、期間指定(YYYYMMD-YYYYMMDD)およびメールタイトル(キーワード部分一致:”結果送付のお知らせ”)で対象メールを特定する。
    2.対象メールにReplyAllで返信する形でメールを作成する。
    3.本文にパスワードを伝えるテンプレートを加える
    4.送信

    ※知りたいところ、
    1.特定のフォルダからのメールの検索方法
    2.ReplyAllの返信メールを作成する方法

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

  83. はじめまして。

    outlook2010で、特定の「件名」でメールを受信した時、指定したURLを開くマクロはできるでしょうか?
    例えば、1日に同じ「件名」のメール10件を受信したら、指定したURLを10回開く、のような感じです。

    アドワーズのコンバージョン計測において、タグが貼れない楽天等からの注文を計測するのに利用したいです。
    よろしくお願いします。

  84. はじめまして。
    Windows10+Outlook2013で、一定時間内に同じ件名のメールを受信したら指定のメールアドレスに定型文のメールを送信したいのですが可能でしょうか?
    例えば、10分間に同じ件名のメールを10件受信したら指定アドレスにメールを送る。10分間隔でメールをチェックする仕掛けになるイメージになるのでしょうか。

  85. はじめまして
    Windows7、Outlook2013の環境を使用しています。
    Outlookで受信したメールを指定したら、1メール1ファイル(csvまたはtxt)でエクスポートできるような
    マクロを作りたいと思っております。何かよい方法はありますでしょうか?
    宜しくお願い致します。

    • エクスポートした後どのようにするのでしょうか?
      Outlookではメールをテキスト形式で保存することができますが、このフォーマットでよいということなら簡単にマクロでできるとは思います。
      ただ、保存したテキストファイルをさらに何かしらで加工する必要があるなら、出力する際のフォーマットが重要になると思います。

  86. 【使用環境】
    OSバージョン:Windows7 SP1 & Windows10
    Outlookバージョン:Outlook2013
    サーバ:Exchange Online

    はじめまして。
    いつも参考になる多数の記事ありがとうございます。

    現在定期的に当サイト記事「連絡先をエクスポート・インポートするスクリプト」を使用し、社内アドレス帳を一括インポートしています。
    又、そのアドレス帳から予定表グループ機能を使用し、予定表の共有を行っていますが、
    社内アドレス帳の更新した際に、予定表グループ接続が無効になってしまいます。(レ点をつけれない)
    原因は、社内アドレスの中身を一度一括削除した上で、一括インポートしているからです。
    解決策として、「新しい予定表グループで作成」で既定のアドレス帳に予定表グループを作成するスクリプトを作成頂けませんか。

  87. いつも勉強させていただいてます。
    ありがとうございます。
    受信したメールの差出人を連絡先
    から検索するを使用していますが、
    outlookを起動してない時に受信した
    メールはvbaが反映されません。
    対応可能でしょうか?
    ぜひご教示いただければ幸いです。
    よろしくお願いいたします。

  88. 連続ですいません。
    過去のコメント等拝見して
    exchangeの場合ルールに
    スクリプトを追加するれば
    良いとのことを理解したのですが、
    どのマクロを登録したら
    良いのでしょうか??

  89. “たげん”と申します。
    マクロによるメール送信で問題にぶつかり、このサイトにたどり着きました。
    早速ですが、質問させていただきます。

    VBEで、Excelシートの複数のEmailアドレスへ、氏名などを本文に差し込んで順次送信した所、送信先のoutlookで迷惑メールフォルダへ仕分けられました。(テスト送信先はNifty, Gmail, so-net)

    OSバージョン:Windows10 Pro
    Officeバージョン:Microsoft Office 365 ProPlus -ja-jp
    サーバ:Exchange Online

    VBEに自己署名入りディジタル証明書をつけても、受信先で迷惑メールになります。

    送信先が1000件近くあるので、手でやるのは気が遠くなります。何か対処方法がありましたらご教授願います。

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

  90. はじめまして。きょうすけと申します。
    いつもありがとうございます。
    参考させていただいています。

    私は日々大量の日報を処理しなければならず、
    またその日報に記載された売り上げなどのデータを集計しなければなりません。

    そこで、OutlookとExcelのVBAを利用して以下のような動作をさせたいのですが、
    初心者故まったく見当がつかず困っております。

    行いたいこと:
    該当のメールとExcelを開いた状態でマクロを実行すると
    本文に記載されている氏名から該当者のシート(シート名を氏名にしています)を
    探し出し、メール内容に記載されている日付と項目を特定して記載された件数をシートに書き出す。
    という内容です。
    メールの内容は以下の通りです。
    【名前】
    ○○○○
    【勤務日】
    ○月○日(○曜日)

    【対応】
    データ移行数 :0件
    メール設定 :0件
    初期設定 :0件
    操作説明 :0件
    フィルム貼り :0件
    故障受付 :0件
    その他対応 :0件
    *その他対応の具体的内容
    プラン変更 :0件
    Apple Pay登録 :0件
    関連案内 :0件

    解約抑止
    接客数:0組
    獲得数:0件

    新規
    接客数:0組
    獲得数:0件

    ケーブル
    接客数:0組
    獲得数:0件

    売上:0円

    接客数 :0組
    名刺戻 :0件

    【実績】
    ■機器変更
    接客数:0組
    獲得数:0件
    ■クレカ
    接客数:0組
    獲得数:0組

    シートの仕様はR1C1形式でR2C2に氏名、C1にデータ移行数などの各項目、R2に日付、R3に曜日が並んでいます。
    各項目とシートはほぼ同じ並びですが件数が0の場合は項目ごと削除されて送られてくることがあります。
    長々としたコメントでもうしわけございませんがよろしくお願い申し上げます。

    • マクロを実装しようとしたのですが、ちょっと不明な点がありますので確認させてください。
      Q1. R2C2に氏名とあるのですが、R2に日付ともあります。
      氏名はシート名にもあるようですが、R1C1に氏名があるということではないのでしょうか?

      Q2. C1に各項目、R2に日付、R3に曜日ということは、例えば C1R4からC1Ryに項目名が並び、CxR2に日付、CxR3に曜日、CxR4からCxRyに各項目の数字が並ぶということでよいのでしょうか?
      イメージとしては以下の通りです。
      1 2 3
      1
      2 日付 3/1 3/2
      3 曜日 木 金
      4 データ移行数 0 0
      5 メール設定 0 0
      6 初期設定 0 0

      Q3.解約抑止、新規、ケーブル、機器変更、クレカについてはその下の接客数と獲得数がそれぞれのカテゴリごとのものと推測できるのですが、ケーブルだけ接客数と獲得数以外に売り上げと名刺戻があり、さらに接客数が二つあります。
      これは売上とその下の接客数はケーブルのカテゴリとは別という意味でしょうか?

      実際に使用されているExcelのシートのイメージがあるとよいのですが。

  91. はじめまして bantian と申します。いつも質の高い情報の提供、ありがとうございます。
    早速ですが [SPAM] に関する処理について質問させていただきます。
    Outlook2013にて、件名の先頭に “[SPAM] “(””は除く)と言う文字列があるメールを受信した時、件名の先頭の “[SPAM] ” を自動的に削除するマクロをご教示願います。削除は先頭だけで構いません。 “[SPAM] ” が2つ以上ある場合でも先頭の1つだけの削除で構いません。
    また、現在開いている Outlookのフォルダ内の全てのメールの件名から “[SPAM] ” と言う文字列を削除するマクロについてもご教示願います。こちらの場合は “[SPAM] ” が複数あればそれら全ての削除です。自動処理ではなく手動起動させたいと思います。
    色々と書きましたが、よろしくお願い致します。

  92. はじめまして、ヤシロと申します。
    1点質問がございます。

    [ファイル>オプション]にあります[Outlookのオプション]の情報ですが、こちらを別ファイル(テキストやCSV)で見ることは可能でしょうか。

    利用想定として、Outlook基本設定の[リアルタイムプレビュー表示機能を有効にする]の項目をAさんはON / BさんはOFF、セキュリティセンターの[添付ファイルのプレビューをオフにする]の項目をAさんはOFF / BさんはONとなっていることを別ファイルで見たいと考えております。

    Outlook:2010
    Windows:7 Enterprise SP1

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

  93. こんにちは。
    いつも参考にささていただきありがとうございます。

    質問よろしくお願いします。

    私は社内で365を利用していて、
    沢山のカレンダーを管理しているのですが、
    デスクトップにoutlook のカレンダーをワンクリックで開けるように以下のようなショートカットを作ってい利用しています。

    “C:\Program Files\Microsoft Office 15\root\office15\outlook.exe” /select outlook:calenders

    ただ上記の方法だと、最終利用時に、選んだカレンダーが
    そのまま次回起動時に表示されてしまいます。

    毎回リセットされた状態でカレンダーを開く方法などはありますでしょうか?

    何卒よろしくお願いします!

  94. いつもお世話になっております。
    OUTLOOKのメッセージスレッド表示についてお伺いさせてください。

    同じ件名で複数の方に個別にメッセージを送ることが多く、
    現状のスレッド表示だと「件名」だけで振り分けられてしまうので
    違う方から頂いたメールが同じスレッドに入ってしまいます。

    こちら「件名」×「送信先」という条件でスレッド表示することにできないでしょうか?
    ご確認どうぞよろしくお願い致します。

  95. いつもお世話になっております。
    マクロのセキュリティで証明書付きのマクロのみを有効にする設定でマクロを有効にする場合の証明書について教えていただけないでしょうか。当方ではPC利用環境毎に証明書が発行され認証にも使用されています。また、インストールソフトウェアの変更はポリシー上許可されておらずofficeのSELFCERT.EXEは未導入の状況です。以上のことから発行済みの証明書を使用してマクロを動作させたいと考えているのですが証明書選択画面で選択を押下しても有効な証明書はありませんと表示されます。マクロを動作させるための証明書について形式、証明書の種類、保存フォルダ等の制限についてどなたかご教示いただけないでしょうか。

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

  96. はじめて投稿させていただきます。
    吉岡と申します。
    どうぞ、よろしくお願いいたします。

    ThinkPad X230
    Intel Core i7-3520M CPU 2.90 GHz
    RAM 4.00 GB
    Windows 7 SP1 (32 bit)

    Outlook 2013

    といった環境です。

    メールの返信、全員への返信、転送、のときに、
    本文を Plain Text で編集送信できるよう、
    見様見真似で下のようなコードを書きました。

    概ねうまく動いているのですが、
    1. メール編集
    2. 送信ボタン
    3. 送信トレイで内容確認
    4. 送信ボタン

    と、やったときに、送信トレイ内のメール一覧のところで

    日付: なし

    となり、「送受信」の操作を行っても
    メールが送信されなくなってしまいます。

    ((各々のメールで送信ボタンを押しても、
    すぐにはメールが送信されない設定にして
    あります))

    どうも、下のコードの

    Private Sub oExpl_SelectionChange()

    に、問題があるらしく、

    Set oItem = oExpl.Selection.Item(1)
    にブレークポイントを入れて、止めておいた状態で

    「送受信」の操作

    を行うと、メールが送信されます。

    ここに、何か条件分岐のコードを入れれば良いように思うのですが、
    見様見真似でありますため、どうすれば良いのか、
    さっぱりわかりません。

    どうか、ご教示のほど、よろしくお願いいたします。

    /////////////ここからコード/////////////////
    Option Explicit

    ””””””””””””””””””””””””
    ‘ Public or private variables
    ””””””””””””””””””””””””

    ””””””””””””””””””””””””
    ‘ For Always Reply In Text Format
    ””””””””””””””””””””””””
    Private WithEvents oExpl As Explorer
    Private WithEvents oItem As MailItem

    Private bDiscardEvents As Boolean
    Private olFormat As OlBodyFormat

    ””””””””””””””””””””””””

    ””””””””””””””””””””””””
    ‘ Always Reply In Text Format
    ‘ Ver.01: 2017-11-25
    ””””””””””””””””””””””””
    ‘ Option Explicit

    ‘ Private WithEvents oExpl As Explorer
    ‘ Private WithEvents oItem As MailItem

    ‘ Private bDiscardEvents As Boolean
    ‘ Private olFormat As OlBodyFormat
    ””””””””””””””””””””””””

    Private Sub Application_Startup()

    Set oExpl = Application.ActiveExplorer

    bDiscardEvents = False

    olFormat = olFormatPlain ‘(*1) – reply using plain text
    ‘olFormat = olFormatHTML ‘(*2) – reply using HTML

    End Sub

    Private Sub oExpl_SelectionChange() ‘☆どうもここが問題らしいです☆

    On Error Resume Next

    Set oItem = oExpl.Selection.Item(1)

    End Sub

    Private Sub oItem_Reply(ByVal Response As Object, Cancel As Boolean)

    If bDiscardEvents Or oItem.BodyFormat = olFormat Then
    Exit Sub
    End If

    If Not vbYes = MsgBox(“Replying in plain text format?”, vbYesNo) Then
    Exit Sub
    End If

    Cancel = True

    bDiscardEvents = True

    Dim oResponse As MailItem
    Set oResponse = oItem.Reply
    oResponse.BodyFormat = olFormat
    oResponse.Display

    bDiscardEvents = False

    End Sub

    Private Sub oItem_ReplyAll(ByVal Response As Object, Cancel As Boolean)

    If bDiscardEvents Or oItem.BodyFormat = olFormat Then
    Exit Sub
    End If

    If Not vbYes = MsgBox(“Replying in plain text format?”, vbYesNo) Then
    Exit Sub
    End If

    Cancel = True

    bDiscardEvents = True

    Dim oResponse As MailItem
    Set oResponse = oItem.ReplyAll
    oResponse.BodyFormat = olFormat
    oResponse.Display

    bDiscardEvents = False

    End Sub

    Private Sub oItem_Forward(ByVal Forward As Object, Cancel As Boolean)

    If bDiscardEvents Or oItem.BodyFormat = olFormat Then
    Exit Sub
    End If

    If Not vbYes = MsgBox(“Replying in plain text format?”, vbYesNo) Then
    Exit Sub
    End If

    Cancel = True

    bDiscardEvents = True

    Dim oResponse As MailItem
    Set oResponse = oItem.Forward
    oResponse.BodyFormat = olFormat
    oResponse.Display

    bDiscardEvents = False

    End Sub

    ””””””””””””””””””””””””
    ‘ ↑ Always Reply In Text Format END
    ””””””””””””””””””””””””

    /////////////ここまでコード/////////////////

  97. いつも興味深く読ませていただいております。
    複数のメールを選択して、できればワンクリックかツークリックかスリークリックくらいで、まとめて印刷して、そのときに、長いメールであっても、すべて1ページ目のみが印刷されるようにすることは可能でしょうか。「クイック印刷」では全ページ印刷されるようで、困っています。

    • Outlook のマクロでは印刷の細かい制御ができないため、残念ながら Outlook で 1 ページのみ印刷するというような処理を簡略化する方法はなさそうです。

  98. よろしければ教えてください。
    Outlook2016のコンテキストメニューに自前のマクロを表示したいのです。
    Outlook2010で使えていた、Application_ItemContextMenuDisplay はどうも動作しないようです。。。 
    VSTOを使うしかないのでしょうか?
    宜しくお願いします。

  99. 突然のコメントを失礼いたします。
    「選択したメッセージを MSG ファイルまたは RTF ファイルとして保存するマクロ」を拝見し、
    利用させていただきたいと思うのですが、
    同様の動作で、追加で下記を実現する方法をご教示いただけないでしょうか。
    ・受信トレイの下の、任意の複数フォルダを選択し、各フォルダ直下の全てのメールを、そのフォルダ階層を保持したまま、任意の保存先に保存する。
    ・メッセージをHTML形式で保存する。
    お手数をおかけして申し訳ありませんが、お知恵を拝借いただけますと幸いです。
    以上、何卒よろしくお願いいたします。

  100. いつも参考にさせていただき感謝申し上げます。
    ルールをインポートするOutlook VBAがあればご教示いただきたく質問させていただきます。
    新規ルールを5名程度に配布したいため、ルールの作成を本サイトを参考に挑戦しました。
    残念ながら、「指定したメッセージを使用してサーバーで返信」(olRuleActionServerReply)
    がVBA未サポートのため、ルール作成できませんでした。
    そこで、自身のルールをエクスポート、インポートして配布することを検討中です。
    複数名にVBAでルールをインポートさせたいのですが可能でしょうか?

    • 残念ながら、Outlook オブジェクト モデルにはルールをインポート・エクスポートする機能がないので、VBA でルールをインポートさせることはできません。

  101. いつもお世話になります。
    会社でクライアント側(windows7 &Outlook2013) & Exchangeサーバー環境で使用しています。
    貴サイトの「複数フォルダーに格納されている特定の件名のメールの情報を Excel ファイルにエクスポートするマクロ」, 「メールの内容を Excel ファイルにかき出すマクロ」
    などで紹介されているマクロをアレンジし、カレンダーアイテムやToDoアイテムの情報をExcelに一覧表形式にして出力さるマクロを試作しました(出力させる情報にCoversation ID, Entry IDが含まれます)。

    Excelに書き出させるだけなので、情報を修正するときはOutlookに戻る必要があります。
    せめて、Message ID, Coversation ID, Entry IDなど、ユニークに割り当てられるIDでアイテムを検索して表示させたいのですが、簡単な方法はあるでしょうか(該当するアイテムがメールフォルダ、スケジュール、ToDoにあるのかわからない前提で)。

    【追伸】
    もしくは、Excelに書き出された情報(日時、内容、完了のステータス等)を修正したらそれをOutlook側に反映させることができればもっと良いです

    よろしくご教示ください

  102. akashi
    いつも参考にさせていただいております。
    予定表の空き時間について、教えていただきたく。
    複数の人の予定表から、以下のロジックで空き時間を検索したいのです。
    会議室の予約をするために、出席者が最大となるようなロジックです。
    ・対象の人(複数)は名称またはメールアドレスで検索する。できればExcel一覧から取り込みたい。
    ・期間を指定(例。2018/1/9~2018/1/31)、その期間内で指定した時間(例。1時間or2時間)連続で空いている時間帯を各人で探し、一番多くの人が空いている日時を候補時間として抽出する。
    ・指定する人には「必須出席者(複数)」がおり、この人たちが必ず空いている時間にする。必須出席者は入力Excelに情報がある。
    ・検索は業務時間内で実施(例。9:00-17:00)。ただし、昼休み(例。12:00-13:00)は除く。
    例) 1/9-1/12 で、2時間空いている時間を検索する
     対象者           空き時間
     Aさん(必須出席者)   1/10 9-11、1/11 13-15、14-16、15-17、1/12 9-11、14-16
     Bさん            1/10 13-15、1/11 14-16、1/12 9-11、10-12、13-15
     Cさん(必須出席者)   1/9 14-16、15-17、1/11 9-11、13-15、14-16、1/12 14-16
     Dさん            1/9 9-11、1/11 13-15、1/12 13-15
    の場合は、第一候補は1/11 14-16(Aさん、Bさん、Cさん出席)、第二候補は1/12 14-16(Aさん、Bさん出席)となる。
    特に各人の空き時間(連続n時間)の取得方法を調べたのですが、詳細が分からず。。。教えていただければ幸いです。
    よろしくお願いいたします。

    使用SW:Office365ProPlus

    • 申し訳ありません、書いている途中で送信してしまいました。
      第二候補の出席者は(Aさん、Cさん)です。よろしくお願いいたします。

  103. いつも参考にさせていただいております。ありがとうございます。
    予定表の会議出席依頼で、返信のオプション<新しい時間の指定を許可>を指定するための
    プロパティが分からず、ご教示いただけないでしょうか。
    何卒よろしくお願いいたします。

    • 標準のプロパティとしては返信のオプションの [新しい時間の指定を許可] に対応するものがないため、PropertyAccessor の SetProperty メソッドを使用して設定します。
      具体的には、以下のようなコードとなります。(会議出席依頼のもとになる予定アイテムを apptItem としています。)

      Const PidLidAppointmentNotAllowPropose = “http://schemas.microsoft.com/mapi/id/{00062002-0000-0000-C000-000000000046}/825A000B”
      apptItem.PropertyAccessor.SetProperty PidLidAppointmentNotAllowPropose, True

      上記は、[新しい時間の指定を許可] をオフにする記述です。

  104. 下記のようなことをやりたく、Web検索で、素晴らしい当該サイトをみつけました。よろしくお願いします。
    Niftyを初期の頃から利用し、現在2つのアドレスをWebメールで運用しています。Niftyのサービスがどんどん低下しているので、他のメールサービスに移行したいと思っています。Outlookの2010か2013か2016に、Niftyのメールを2つのNifty ID毎に、全て取り込んで、
    マクロでユニークな送信者を特定、最古発信日、最新発信日、当該送信者の発信メール数をエクセルの表にまとめ、更に、新規メールアドレスを送信するかどうかの判断を、自分がして、0か1を設定、1なら、
    新規メールアドレスへ今後は送って欲しいというメールをだせるような
    ツールがあると嬉しいのですが、
    マクロは書いたことがありません。
    勉強しながら、読むことは可能だと思います。

    • NiftyのメールをWebメールではなくPOPやIMAPというプロトコルにより取り込むことができるのであれば、Outlookでの自動処理は可能と思われます。

  105. いつも参考にさせていただいています。
    Outlook2010を使用していますが、メールの印刷についての質問です。

    相手方が返信時に「元のメッセージを残しインデントを設定する」になっているメールなのですが、印刷するとインデントが設定されている元のメッセージの部分の1行あたりの文字数が減っていきます。1往復くらいのメールならそれほど問題ないですが、5往復を超えるあたりから1行あたりの文字数が1文字になってしまいます。こういう状態を解除する方法はあるのでしょうか?
    よろしくお願いいたします。

    • 残念ながら、インデントについてはメールの本文形式やメールソフトの動作によっていろいろあるため、インデントを解除するというのは極めて困難です。

  106. メール本文画面上で選択範囲のみを綺麗に改行したく、本HPの「テキスト形式のメールを指定文字数で折り返すマクロ」
    を参考に以下のとおり活用しているのですが、①選択範囲のみではなく全体に適用されてしまう点、②半角文字があると
    そこで改行されてしまう点に悩んでいます。修正をお願いできますでしょうか。
    よろしくお願いします。

    Public Sub WrapLines()
    Const LINE_MAX = 70
    Dim strBody As String
    Dim strNewBody As String
    Dim strLine As String
    Dim c As String
    Dim pCur As Long
    Dim pWB As Long
    Dim iLen As Long
    Dim bWrap As Boolean

    strBody = ActiveInspector.CurrentItem.Body
    strBody = Replace(strBody, vbCrLf, vbLf)
    pCur = 1
    pWB = 0
    strNewBody = “”
    strLine = “”
    iLen = 0
    pc = “”
    bWrap = False
    While pCur <= Len(strBody)
    c = Mid(strBody, pCur, 1)
    If c = vbLf Then
    If Not bWrap Then
    strNewBody = strNewBody & strLine & vbLf
    End If
    strLine = ""
    iLen = 0
    pWB = 0
    bWrap = False
    ElseIf Asc(c) < 0 Or &H7F = LINE_MAX Then
    strNewBody = strNewBody & strLine & c & vbLf
    strLine = “”
    iLen = 0
    bWrap = True
    Else
    strLine = strLine & c
    bWrap = False
    End If
    pWB = Len(strLine)
    Else
    If c = ” ” Then
    pWB = Len(strLine) + 1
    bWrap = False
    End If
    iLen = iLen + 1
    If iLen >= LINE_MAX Then
    If pWB > 0 Then
    strNewBody = strNewBody & Left(strLine, pWB) & vbLf
    strLine = Mid(strLine, pWB + 1) & c
    If c = ” ” Then

    strLine = “”
    End If
    End If
    bWrap = False
    Else
    strNewBody = strNewBody & strLine & c & vbLf
    strLine = “”
    bWrap = True
    End If
    iLen = LenB(StrConv(strLine, vbFromUnicode))

    strLine = strLine & c
    bWrap = False
    End If

    pCur = pCur + 1
    Debug.Print iLen, bWrap, strLine
    Wend
    If strLine “” Then
    strNewBody = strNewBody & strLine
    End If
    ActiveInspector.CurrentItem.Body = strNewBody
    End Sub

  107. いつも当サイトで勉強させていただいています。ありがとうございます。
    outlook2010を使用しています。マイクロソフト社のパッチによりoutlookの仕訳機能でスクリプトを使ってvbaを読ませることができなくなました。対応方法としてレジストリの変更がありますが、レジストリの変更によりセキュリティに影響が出る可能性があるらしく、レジストリの変更は検討していません。そのためスクリプト以外でメール受信時にvbaを起動させる方法の有無についてご教示いただけますと幸いです。パッチ処理前は特定のメールを受信した場合に画面上にメッセージを表示させる、添付ファイルをフォルダに自動で保存させるなどの処理を行っていました。

    • 受信時にマクロを実行する方法としては Application_NewMailEx イベントを使用するというものがあります。
      このブログでも Application_NewMailEx を使用したマクロはたびたび紹介していますので、サンプルはそれらを参考にしてみてください。
      なお、Exchange 環境では Outlook が起動していない間に受信したメールについては Application_NewMailEx が呼び出されない動作となりますので、そのような環境ですべての受信メールについてマクロを実行するにはレジストリ変更以外には方法はありません。

  108. いつも参考にさせていただいています。
    Outlook2016を使用していますが、メールの送信についての質問です。

    作成したメールで「件名、本文」に特定の文字が存在している時に送信しない( or エラーメッセージ)を出す方法を探しています。

    やりたい事は以下のとおりです。
    ① メールのテンプレートで作成毎に変わる所を「○○○」とする(相手の名前、会社名、来訪日など)
    ② メールを書くときはテンプレートで新規作成をして日にちや相手に合わせて「○○○」の所を手動で変更する
    ③ 「○○○」が「件名、本文」に存在する時は、メール内容に不備があるとしてメールを送らない

    とこんな感じです。

    以前は前の文章をコピペしていましたが、見落としで会社名や人の名前、
    日付が前のままになっていて大問題になってしまったので。

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

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

    このサイトのサンプルをもとにマクロを作成させていただいております。

    さて、当方の環境
    OS:Windows 10 Enterprise(1703)
    OUTLOOK:outlook2016
    Server:Exchange2010

    ですが、最近環境が上記に変わりました。(2月中旬)
    ※それまではWin7。Exhangeは同じ2010。
    で、outlookが2010 → 2016に変わったせいか迷惑メールに自社ドメインのメールが入るようになりました。
    (ご存知だと思いますが、迷惑メールの振り分けについてはMSでは非公開とのこと)

    そこで、迷惑メールのオプションで自社メールを許可する(自社ドメインのメールを許可する)設定を行いましたが、時間がたつと、この設定が消えます。
    ※管理者には問い合わせしていますが、応答がありません。おそらく環境変更のせいで多数の問い合わせが入っており、こちらの問い合わせに応答できないものと思われます。

    なので、一定時間ごとにオプションを調べ、消えていたら自社ドメインを許可する(設定する)マクロを作成したいのですが、outlook2016ではレジストリにも書いてなさそうで、どこで設定しているか不明です。
    (ほかのoutlookのバージョンがどうかは調べてません。すいません。)

    で、お力を拝借したいのですが、可能でしょうか?
    作りたいのは、一定時間ごとに迷惑メールのオプションを調べ、消えていたら特定のドメインをオプションに追加するマクロです。(強制上書きでも構いません。)
    outlookは起動したままにしたいのですが、可能でしょうか?

    プロトコルはMAPIを使っているようです。

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

    • 残念ながら、Outlook 側の動作でこのような処理を実装することはできません。
      まず、差出人セーフリストはレジストリなどではなく、メールボックスに保存され、こちらは起動時にメモリに読み込まれています。
      そして、このメモリ上のリストをマクロなどで変更することはできません。

      また、メールボックスのセーフリストは Exchange サーバーのセーフリスト集約機能により管理されますが、セーフリスト集約機能では、Exchange サーバーに承認済みドメインとして登録されているドメインがあると、自動的に削除するという処理が行われ、これを止めることはできません。

      つまり、一定時間でセーフリストに登録しても、サーバー側で定期的に削除されるので、タイミングによってはセーフリストから消えている状況になり、あまり有効ではありません。

      この問題に対処するには、Exchange サーバー上でトランスポート ルールにより特定の差出人からのメールについては SCL として -1 を設定するというものを作る必要があります。
      管理者の方がお忙しいとのことですが、こればかりは管理者の方に対応いただく以外に方法はないので、何とか対応いただけるようお願いしてみてください。

  110. いつもこちらのサイトには大変お世話になっております。
    「メールの内容を Excel ファイルにかき出すマクロ」を参考にさせていただき、マクロを組んだのですか、
    ダイアログボックスを押す前に2通目の条件に沿ったメールを受信すると、そちら処理されない状態になってしまいます。
    マクロのダイアログの部分を消してみたりしたのですがうまくいかず…
    よろしければ条件に沿った内容のメールを短い時間の間に複数受信した場合でも処理を行える方法を教えていただければと思います。
    ぜひよろしくお願いいたします。

    • 残念ながら、受信処理を行うタイミングで別のマクロが実行されていると、新たなマクロの実行はキャンセルされてしまうようです。
      対処方法としては、マクロの実行を極力短くするというものしかありません。

  111. こんにちは。2018年の質問スレッドにコメントができないようなのですが、こちらに書き込んでもよろしいのでしょうか。

  112. こんにちは!
    超VBA初心者です。これからこちらのサイトを参考にたくさん勉強させていただこうと
    思っています。どうぞよろしくお願いいたします。
    エクセル内のハイパーリンクを
    OUTLOOK2010のメール本文にハイパーリンク設定で書き出したく、
    現在HTML形式で<A href=・・>のようなVBAコードを書いてメールを作成しています。
    ですが、HTML形式にすると送信時に半角カナが全角カナになり、リンクがおかしくなってしまい・・
    できればリッチテキスト形式のメールでハイパーリンク設定をしたいのですが、
    どのように記述すればできるでしょうか?
    (ずーっと悩んでいます)
    よろしくお願いいたします。

    • ハイパーリンク中の半角カタカナが全角カタカナになるのは、HTML 形式であることが原因なのではなく、文字コードとして JIS が使用されているためです。
      オプションの詳細設定の [送信メッセージで優先使用するエンコード方法] を [日本語 (シフト JIS)] または [Unicode (UTF-8)] とすると、半角カタカナのまま送信できるようになります。

  113. 初めまして。Outlook VBA初心者です。

    以下のようなことは可能でしょうか。

    ①メール本文内のn行目のキーワードを取得
    ②キーワードを検索値として指定のエクセルファイルからVLOOKUPで情報を取得
    ③VLOOKUPで取得した情報をメールのヘッダーに設定し、印刷

    エクセルのVBAは少し経験があるのですが、outlookはまだまだ勉強中でなかなか作業が進まず困っております。こういった操作が可能かどうかだけでもご教示いただければ幸いです。

  114. Outlook で受信したメールの一覧をエクセルに出力するマクロを使っていました。
    異動の関係で端末のバージョンが変わった為か、以下の部分がうまく動きません。

    使用しているマクロは複数のメールを選択し、選択した各々のメールの宛先、
    発信人、などの情報をエクセルに出力するものです。

    マクロの中身は複数のメールを選択し、各々のメールに対し

    For Each oSel In myOlSel

     にてループを回し、object として定義している「oSel」の中で必要な情報
    to, cc, bcc などを 「oSel.To」といった形で引き出してエクセルに出力する、という
    ものだと理解しています。

     前のOutlookの頃には動いていたのですが、現在のOutlookではうまく動きません。
    現在の Outlook のバージョンは Outlook2010, PCは Win7 professional になります。

     動かない部分を「’◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ ← ここでアラームが出ます」として
    コメントアウトしています。

     メールによって to, ccの情報を引き出せるメールと引き出せないメールがあるようです。
    引き出せないものを無視し、残りのメールについて実行出来るような改造でもよいのですが、
    うまい手はないか悩んでいます。

    少し大きくなりますが、マクロ本文を記載します。

    よろしくお願いします。

    Sub 選択メールの情報をExcel一覧化()
    Dim myOlApp As New Outlook.Application
    Dim myOlExp As Outlook.Explorer
    Dim myOlSel As Outlook.Selection
    Dim MsgTxt As String, a As String
    Dim Files As Variant, oF As Variant
    Dim myExlApp As Object, oNewWb As Object, oSel As Object
    Dim i As Integer, j As Integer
    Dim lSubject As String
    Dim lMsg As String
    Dim lSentOnBehalfOfName As String
    Dim lSenderName As String
    Dim lReceivedByName As String
    Dim lReceivedOnBehalfOfName As String
    Dim lReplyRecipientNames As String
    Dim lTo As String
    Dim lCC As String
    Dim lBCC As String
    Dim lCreationTime As String
    Dim lSize As Long
    Dim lsenderemailaddress As String
    Dim lTempFile As String

    Set myOlApp = CreateObject(“Outlook.Application”)
    Set myOlExp = myOlApp.ActiveExplorer
    Set myOlSel = myOlExp.Selection

    ‘新規ブック作成
    Set myExlApp = CreateObject(“excel.Application”)
    Set oNewWb = myExlApp.workbooks.Add
    ‘一覧整形
    myExlApp.ActiveWindow.Zoom = 85
    With oNewWb.sheets(1)
    .Cells.WrapText = True

    .Range(“A1:N1”) = Array(“件名”, “本文”, “添付ファイル”, “受信日時”, “サイズ”, “送信者表示名”, “送信者”, “受信者表示名”, “受信者”, “”, “TO”, “CC”, “BCC”, “送信者Address”)
    .Columns(“A:A”).ColumnWidth = 32
    .Columns(“B:B”).ColumnWidth = 40
    .Columns(“D:D”).ColumnWidth = 15.71
    .Columns(“K:k”).ColumnWidth = 15.71
    .Rows(“2:2”).Select
    End With
    myExlApp.ActiveWindow.FreezePanes = True
    With oNewWb.sheets(1)
    .Range(“A1”).Select
    End With

    i = 1
    ‘選択されているメールの添付ファイルを保存
    For Each oSel In myOlSel

    lSubject = oSel.Subject
    lMsg = oSel.Body
    lSentOnBehalfOfName = oSel.SentOnBehalfOfName ‘◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ ← ここでアラームが出ます①
    lSenderName = oSel.SenderName
    lReceivedByName = oSel.ReceivedByName ‘◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ ← ここでアラームが出ます②
    lReceivedOnBehalfOfName = oSel.ReceivedOnBehalfOfName ‘◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ ← ここでアラームが出ます③
    lReplyRecipientNames = oSel.ReplyRecipientNames ‘◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ ← ここでアラームが出ます④
    lTo = oSel.To ‘◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ ← ここでアラームが出ます⑤
    lCC = oSel.CC ‘◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ ← ここでアラームが出ます⑥
    lBCC = oSel.BCC ‘◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆ ← ここでアラームが出ます⑦
    lCreationTime = oSel.ReceivedTime
    lSize = oSel.Size
    lsenderemailaddress = oSel.SenderEmailAddress

    lTempFile = “”
    For Each oF In oSel.Attachments
    lTempFile = lTempFile & oF.DisplayName & Chr(10)
    j = j + 1
    Next

    i = i + 1

    oNewWb.sheets(1).Cells(i, 1).Value = lSubject
    oNewWb.sheets(1).Cells(i, 2).Value = lMsg
    oNewWb.sheets(1).Cells(i, 3).Value = lTempFile
    oNewWb.sheets(1).Cells(i, 4).Value = lCreationTime
    oNewWb.sheets(1).Cells(i, 5).Value = Format(Int(lSize / 1024), “##,###”) & “KB”
    oNewWb.sheets(1).Cells(i, 6).Value = lSentOnBehalfOfName
    oNewWb.sheets(1).Cells(i, 7).Value = lSenderName
    oNewWb.sheets(1).Cells(i, 8).Value = lReceivedByName
    oNewWb.sheets(1).Cells(i, 9).Value = lReceivedOnBehalfOfName
    oNewWb.sheets(1).Cells(i, 10).Value = lReplyRecipientNames
    oNewWb.sheets(1).Cells(i, 11).Value = lTo
    oNewWb.sheets(1).Cells(i, 12).Value = lCC
    oNewWb.sheets(1).Cells(i, 13).Value = lBCC
    oNewWb.sheets(1).Cells(i, 14).Value = lsenderemailaddress

    Next

    myExlApp.Visible = True

    p_Error:
    Set oF = Nothing
    Set oSel = Nothing
    Set myExlApp = Nothing
    Set oNewWb = Nothing
    Set myOlApp = Nothing
    Set myOlExp = Nothing
    Set myOlSel = Nothing
    MsgBox “終了しました。総数:” & i – 1
    End Sub

  115. Outlookで常に特定のメールアドレスを[Bcc:]に入れて送信するマクロを組みたいのですが、できれば加えて宛先が社外のメールのみという指定ができればと思っております。
    全送信メールに対して設定するマクロについては、検索で見つけることができ、設定して試してみたところ問題なく動作しました。
    ただ、「社外メールのみ」という部分を検索で指定すると、自分の検索方法が悪いのかもしれないのですが、見つけることができず、こちらでコメントさせて頂いた次第です。当方、マクロなど素人につき、お教えいただけたら幸いです。どうぞ、よろしくお願い致します。

    使用環境
    Windows10
    office2016

  116. お世話になってます。

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

    勤怠システムとしてVBAを利用したいと思っているんですが
    出発メールの管理を考えております。

    教えて頂けると幸いでございます。

    やりたいこと
    ①件名に「出発」という文字が含まれるメールが届いたら、届いた時にエクセルへ反映
    ②エクセルにはメール送信者アドレスと受信時間だけ反映(A2:アドレス、B2:受信時間、を縦に反映)

    これを常時自動で行ってくれるマクロはありませんでしょうか?
    ※出発という文字が含まれるメールが大量に届き追いきれない状況です。

    お知恵をお借りしたく、何卒よろしくお願いいたします。

    使用環境
    win8.1
    office2010

  117. いつも大変お世話になっております。
    1つ実現可否について教えていただきたことがあります。

    送信時の処理として、指定した時間内は送らないという処理は可能でしょうか?
    具体的には、17:00~翌朝8:00の間は、メールの送信トレイに残しっぱなしで、8:01以降は送信対象となる。という状況にしたいです。
    ただ、配信タイミングの手動設定はせずに、指定した時間になったら上記処理になるようなマクロは可能でしょうか?

  118. お世話になります。

    マクロを実行する際に、下記のコードの部分で
     「ユーザ定義型は定義されていません」とエラーが表示されるのですが
    どのように対処すればよいのでしょうか?

    エラーが表示される部分
    Dim wkBook As Workbook

    VBAで参照設定をすれば良いのかなと思いましたが、どのライブラリを
    参照設定すればよいのかわかりませんでした。

    お手数ですがご存知の方がいらっしゃいましたらよろしくお願いいたします。

    • マクロの場合、厳密な型宣言を行わなくても動作しますので、As Workbook の代わりに As Object と指定すれば動作するでしょう。
      どうしても As Workbook としたいのであれば、”Microsoft Excel 1x.0 Object Library” を参照設定で追加してください。
      なお、1x.0 の x はインストールされている Excel のバージョンで変わります。

  119. こんにちは。
    Outlook2016について質問させてください。
    プロジェクトごとのメールをまとめてmsg形式で保存したいのですが、
    VBA等まったくの素人で何から手を付けていいのかわかりません。
    普通にエクスポートするとpstの形式になるかと思います。
    何か素人でもやれることはありますか?

ちびんさん への返信 コメントをキャンセル