質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

1111閲覧

マクロ実行画面に( sub/ユーザーフォームの実行ボタン)に作成したマクロが表示されない。

RK6652

総合スコア1

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Outlook

Microsoft OutlookはMicrosoft Officeの一部として組み込まれている、のユーザー管理とメーラーの機能を持ち合わせたソフトウェアです。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2022/04/21 07:57

前提

VBAは初心者です。

実現したいこと

OutLookからメールをメールを受信した際に、件名に特定の文字列であれば、その本文をローカルのExcelに転記するというマクロを作成しようと思っています。以下にちょうどいいサイトがあったので、早速利用させて頂こうと思いました。
【参考サイト】
https://outlooklab.wordpress.com/2019/06/01/%E6%B1%BA%E3%81%BE%E3%81%A3%E3%81%9F%E4%BB%B6%E5%90%8D%E3%81%AE%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E5%8F%97%E4%BF%A1%E3%81%97%E3%81%9F%E3%82%89%E3%80%81%E3%83%87%E3%83%BC%E3%82%BF-3/

発生している問題・エラーメッセージ

いざ、貼り付けてみるとマクロ実行画面に( sub/ユーザーフォームの実行ボタン)に作成したマクロが表示されません。調べると、この方法で実行できるのは引数のないSubプロシージャと、同じく引数のないFunctionプロシージャのみということで、それが原因なのかと思っているのですが、具体的にどこを修正すればいいのかが分かりません。周りにも聞ける人が全くいないので、知見のある方ご教示いただけますと幸いです。

該当のソースコード

VBA

1Option Explicit 2 3Public Sub Application_NewMailEx(ByVal EntryIDCollection As String) 4 SaveToExcel EntryIDCollection 5End Sub 6 7Public Sub SaveToExcel(ByVal EntryIDCollection As String) 8 ' 自動処理するメールの件名 9 Const AUTO_SAVE_TITLE = "注文書メール-[0000****]" 10 ' 保存する Excel ファイルの名前 11 Const EXCEL_FILE = "C:\Users\??????\TEST.xlsx" 12 Dim i As Integer 13 Dim myMsg 14 ' メッセージの取得 15 Set myMsg = Session.GetItemFromID(EntryIDCollection) 16 ' 指定の件名のメールのみ処理を実行 17 If myMsg.Subject = AUTO_SAVE_TITLE Then 18 Dim objBook 19 Dim objSheet 20 Dim r As Integer 21 Dim strCode 22 Dim strName 23 Dim strQuantity 24 ' Excel ファイルを開く 25 Set objBook = GetObject(EXCEL_FILE) 26 objBook.Windows(1).Activate 27 Set objSheet = objBook.Sheets(1) 28 ' 1 行目はタイトルとして使用し、2 行目からデータ 29 r = 2 30 ' データがない行まで移動 31 While objSheet.Cells(r, 1) <> "" 32 r = r + 1 33 Wend 34 ' 本文から取り出したデータを Excel ファイルに転記 35 With objSheet 36 .Cells(r, 1) = GetText("番号:", myMsg.Body) 37 .Cells(r, 2) = GetText("氏名:", myMsg.Body) 38 .Cells(r, 3) = GetText("依頼内容:", myMsg.Body) 39 End With 40 ' Excel ファイルを閉じる 41 objBook.Close True 42 End If 43End Sub 44 45' 本文からデータを取得する関数 46Public Function GetText(strName As String, strBody As String) As String 47 Dim ls As Long 48 Dim le As Long 49 ls = InStr(strBody, strName) ' 指定されたフィールド名を検索 50 If ls > 0 Then 51 ls = ls + Len(strName) ' フィールド名の次の文字から 52 le = InStr(ls, strBody, vbCrLf) ' 改行コードまでを取得 53 GetText = Trim(Mid(strBody, ls, le - ls)) ' 前後の空白を削除 54 Else 55 GetText = "" 56 End If 57End Function 58

試したこと

以下のサイトのマクロは実行することが出来ました。
http://pineplanter.moo.jp/non-it-salaryman/2021/06/08/outlook-to-excel-2/

補足情報

質問に質問を重ねてしまい、申し訳ございませんが、
「"注文書メール-[0000****]"」の部分もこれでいいのか並行して調べています。
「*」の部分は注文書番号によって変わるため、ワイルドカードとして使っているのですが、調べてみるとルールも違うように見えて、、、
こちらについても分かる方がいましたらお教えいただけますと幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Application_NewMailExはイベントと呼ばれるもので、ユーザーが実行するものではなくOutlookがメールを受信したときに自動的に実行するものです。
そのため、手動実行するマクロとしては表示されません。
やりたいことは任意のメールに対してマクロを実行したいということなのでしょうか?
それとも、メールを受信したときに自動でマクロを実行させたいということなのでしょうか?

「"注文書メール-[0000****]"」の部分もこれでいいのか並行して調べています。
「*」の部分は注文書番号によって変わるため、ワイルドカードとして使っているのですが、調べてみるとルールも違うように見えて、、、

こちらについてですが、もし以下のようにしているのだとしたら想定されているような動作にはなりません。

VBA

1If myMsg.Subject = "注文書メール-[0000****]" Then

"*"をワイルドカードとして使用したいなら以下のようにLIKE演算子を使用する必要があります。

VBA

1If myMsg.Subject = "注文書メール-[[]0000*]" Then

なお、LIKE 演算子では"[]"も特殊な文字として扱われるので、"["自体を検索したい場合は"[[]"と記述する必要があります。

投稿2022/04/24 06:51

millefeuille

総合スコア221

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RK6652

2022/05/02 07:55

ご回答いただきありがとうございます! ’’Application_NewMailExはイベントと呼ばれるもので、ユーザーが実行するものではなくOutlookがメールを受信したときに自動的に実行するものです。そのため、手動実行するマクロとしては表示されません。’’ →こちらが分かっておりませんでした; やりたいことは任意のメールを受信したときに自動でマクロを実行させたいということなので、テストメールを送ってみて試してみようと思います! またワイルドカードについてもご指摘いただきありがとうございました!
guest

0

下記が参考になりませんか。

Application_NewMailExイベントが発動しない

投稿2022/04/22 02:04

hatena19

総合スコア33699

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

RK6652

2022/05/02 08:11

ご指摘ありがとうございます!上記の回答と合わせて、更に標準モジュールでやっていたので、ThisOutLookSessionに変えたら実行されました!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問