最終項目のみワークシートに出力されない。他1点 | |
---|---|
[195313] 最終項目のみワークシートに出力されない。他1点- ■親トピック/記事引用/メール受信=OFF■ □投稿者/ はやし -(2022/10/17(01:01)) □U R L/ どなた様かお知恵をお貸しください。 当方VBA初心者です。初めて投稿いたします。 Outlookで受信し、特定のフォルダに格納されているメールを 項目ごとにワークシートへ転記するコードを作成しています。 抽出項目は、受信日時、問合番号、電話番号、ドライバーコード 希望日、時間帯、住所の7項目です。 いくつかのサイトを参考にし下記コードを書いたのですが、 以下の2点で躓いてしまいました。 ---------------- 1 7項目目の住所の出力が思うようにできません。実行すると 「実行エラー5 プロシージャの呼び出し、または引数が不正です。」とダイアログ表示がでます。 デバッグを選択すると” GetText = Trim(Mid(strBody, ls, le - ls)) '”が蛍光マーカー表示になります。 ”strAdd = GetText("住所 :", oneItem.Body) .Cells(i + 1, 8).Value = strAdd” を削除すると実行・出力できることから、抽出元メール文の最終行に 改行がないことが原因なのではないかと考えているのですが、 どのように書き換えれば良いかわからず途方に暮れております。 2 項目別に抽出する際に項目を並び替えて転記することはできるのでしょうか。 現在の問合番号、電話番号、ドライバーコード、希望日、時間帯、住所は 抽出元のメールにある順番と同じです。 こちらを受信日時、住所、問合番号…と順序を変えることができたら その後の作業がより楽になるので…。 (上から順番に実行されるため難しいですよね?) 最後になりますが、作業環境はWin11 Excel2021になります。 読みずらいコードで申し訳ありませんがご教示いただけますと幸いです。 よろしくお願いいたします。 ----------------------------------------- Option Explicit Sub JOBLIST() Dim objOutlook As Outlook.Application Dim myInbox As Outlook.Folder Dim myNamespace As Outlook.Namespace Dim mySubfolder As Outlook.Folder Dim i As Long Dim oneItem As Outlook.MailItem Dim strInquiry As String Dim strTel As String Dim strDrcode As String Dim strDdd As String Dim strDtz As String Dim strAdd As String ' Outlook の Application オブジェクトを取得 Set objOutlook = New Outlook.Application Set myNamespace = objOutlook.GetNamespace("MAPI") Set myInbox = myNamespace.GetDefaultFolder(olFolderInbox) Set mySubfolder = myInbox.Folders.Item("JOBLIST") ' フォルダー内のアイテムをすべて処理 For i = 1 To mySubfolder.Items.Count Set oneItem = mySubfolder.Items(i) ' アイテムの情報を Excel のワークシートにコピー With ThisWorkbook.Worksheets("Sheet3") .Cells(i + 1, 1).Value = oneItem.SentOn .Cells(i + 1, 2).Value = oneItem.Subject strInquiry = GetText("問い合わせ番号 :", oneItem.Body) .Cells(i + 1, 3).Value = strInquiry strTel = GetText("電話番号 :", oneItem.Body) .Cells(i + 1, 4).Value = strTel strDrcode = GetText("ドライバーコード :", oneItem.Body) .Cells(i + 1, 5).Value = strDrcode strDdd = GetText("希望日 :", oneItem.Body) .Cells(i + 1, 6).Value = strDdd strDtz = GetText("時間帯 :", oneItem.Body) .Cells(i + 1, 7).Value = strDtz strAdd = GetText("住所 :", oneItem.Body) .Cells(i + 1, 8).Value = strAdd End With Next i End Sub Private Function GetText(strName As String, strBody As String) As String Dim ls As Long Dim le As Long ls = InStr(strBody, strName) ' If ls > 0 Then ls = ls + Len(strName) ' le = InStr(ls, strBody, vbCrLf) ' 'case no vbCrLf ( in last row) GetText = Trim(Mid(strBody, ls, le - ls)) ' Else GetText = "" End If End Function この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 ++++++++++++++++++++ OS ⇒OTHER Version⇒OTHER ++++++++++++++++++++ |
[195314] Re[1]: 最終項目のみワークシートに出力されない。他1点- ■記事引用/メール受信=OFF■ □投稿者/ はやし -(2022/10/17(01:06)) □U R L/ すみません。 件名を取得するコードが残ったままで投稿してしまいました。 実際のコードは.Cells(i + 1, 2).Value = oneItem.Subjectはなく 数字は繰り上げています。 こちらに再度書くのも忍びないので、このままお教えいただきたく存じます。 ご迷惑をお掛けします。 ++++++++++++++++++++ OS ⇒OTHER Version⇒OTHER ++++++++++++++++++++ |
[195315] Re[2]: 最終項目のみワークシートに出力されない。他1点- ■記事引用/メール受信=OFF■ □投稿者/ マナ -(2022/10/18(18:52)) □U R L/ こうしては? Private Function GetText(strName As String, strBody As String) As String Dim ss, s ss = Split(strBody, vbCrLf) s = Filter(ss, strName) If UBound(s) > -1 Then GetText = s(0) End Function この記事にはVBAのコードが含まれています。 緑の太文字→注釈 茶色の太文字→条件分岐 赤の太文字→ループ 青の太文字→その他 |
[195316] Re[3]: 最終項目のみワークシートに出力されない。他1点- ■記事引用/メール受信=OFF■ □投稿者/ マナ -(2022/10/18(18:58)) □U R L/ >こちらを受信日時、住所、問合番号…と順序を変えることができたら .Cells(i + 1, 1).Value ^^~ ここの数字が列番号なのでは? |
[195319] Re[4]: 最終項目のみワークシートに出力されない。他1点- ■ / 記事引用/メール受信=OFF■ □投稿者/ ばやし -(2022/10/19(19:45)) □U R L/ マナ様 ご返信ありがとうございます。 早速修正いたしました。 ご教示いただきありがとうございました! |
このトピックに書きこむ |
---|