前提
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****]"」の部分もこれでいいのか並行して調べています。
「*」の部分は注文書番号によって変わるため、ワイルドカードとして使っているのですが、調べてみるとルールも違うように見えて、、、
こちらについても分かる方がいましたらお教えいただけますと幸いです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/02 07:55