Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 11 Pro : Microsoft 365)
VBAが止まります。
投稿日時: 22/08/31 14:33:21
投稿者: 坊たん

皆さん、いつもありがとうございます。
下から14行目の『 objMail.Attachments.Add asrs1』で止まってしまします。
asrs1をadrs1へ修正したりしましたが、改善されません。
昨日まで動いたいたのですが、
修正方法を教えていただけますでしdょうか。
 
-------------------------------------------------------
Sub メール作成()
    Dim objOutlook As Outlook.Application
    Dim objMail As Outlook.MailItem
    Dim wsMail As Worksheet
    Dim filead As String
    Dim tenp1 As String
    Dim tenp2 As String
     
    'メール立ち上げ
    Set objOutlook = New Outlook.Application
    Set wsMail = ThisWorkbook.Sheets("リスト")
     
    '添付ファイルのアドレスを変数にする
    filead = Worksheets("リスト").Range("B3").Value
     
    '共通添付データのアドレスを読む
    tenp1 = filead & "\" & Worksheets("リスト").Range("B4")
    tenp2 = filead & "\" & Worksheets("リスト").Range("B5")
     
    Dim kobetsumail1 As String
    Dim kobetsumail2 As String
    Dim adrs1 As String
    Dim asrs2 As String
     
    '変数iを設定。最初は1
    Dim i As Long
    i = 1
     
    '送付前の確認メッセージ
    Dim rc As Long
    rc = MsgBox("記載に誤りが無いことを確認しましたか?", vbYesNo + vbQuestion, "確認")
     
    If rc = vbNo Then
    MsgBox "中断しました"
    End
    End If
     
    '基準となるセルを選択
    Worksheets("リスト").Select
    Range("B7").Select
     
    '取引先名が書かれているB列が空欄になるまで続ける
    Do Until ActiveCell.Offset(i, 0).Value = ""
     
    '送付チェック欄が○なら作業を続ける
    If ActiveCell.Offset(i, 2).Value = "○" Then
     
    Set objMail = objOutlook.CreateItem(olMailTtem)
     
    '個別メールのデータ名称を読む
    Dim CC12(1) As String
    CC12(0) = ActiveCell.Offset(i, 6).Value
    CC12(1) = ActiveCell.Offset(i, 8).Value
     
    'メールを作成する
    With wsMail
        objMail.to = ActiveCell.Offset(i, 4).Value
        objMail.CC = Join(CC12, ";")
        objMail.Subject = Range("B1").Value
        objMail.Bodyformat = olFormatPlain
        objMail.body = Range("B7").Offset(i, 0) & vbCrLf & Range("E7").Offset(i, 0) & "様" & vbCrLf & vbCrLf & Range("B2").Value & vbCrLf & vbCrLf
         
        kobetsumail1 = ActiveCell.Offset(i, 9).Value
        asrs1 = filead & "\" & kobetsumail1
         
        kobetsumail2 = ActiveCell.Offset(i, 10).Value
        asrs2 = filead & "\" & kobetsumail2
         
        If Range("B4").Value <> "" Then
        objMail.Attachments.Add tenp1
        End If
         
        If Range("B5").Value <> "" Then
        objMail.Attachments.Add tenp2
        End If
         
        If ActiveCell.Offset(i, 9).Value <> "" Then
        objMail.Attachments.Add asrs1
        End If
        
        If ActiveCell.Offset(i, 10).Value <> "" Then
        objMail.Attachments.Add asrs2
        End If
         
        objMail.Display
        objMail.Save
         
    End With
     
    End If
     
    i = i + 1
     
    Loop
     
    Set objOutlook = Nothing
     
    MsgBox "下書きに保管しました"
End Sub

回答
投稿日時: 22/08/31 15:56:23
投稿者: Suzu

引用:
下から14行目の『 objMail.Attachments.Add asrs1』で止まってしまします。
asrs1をadrs1へ修正したりしましたが、改善されません。

 
 
とりあえず、直接関係しそうな部分として
 
 
    '添付ファイルのアドレスを変数にする
    filead = Worksheets("リスト").Range("B3").Value
     
    '共通添付データのアドレスを読む
    tenp1 = filead & "\" & Worksheets("リスト").Range("B4")
     
    Dim adrs1 As String
 
        kobetsumail1 = ActiveCell.Offset(i, 9).Value
        asrs1 = filead & "\" & kobetsumail1
         
        If ActiveCell.Offset(i, 9).Value <> "" Then
        objMail.Attachments.Add asrs1  ←ここでエラーとなる
        End If
 
1)エラーメッセージは何ですか? そこに、ヒントがある事があります。
 
2)エラーになった時点で、
  この行の asrs1 のうえにマウスカーソルを移動させる
  または、VBE画面の ローカルウィンド で、実行中の変数の中身
  が確認できます。 この値を確認しましょう。
 
  ここでは、メールに添付ファイルを添付するのに、ファイルのフルパスを指定する必要があります。
  asrs1 に指定された、ファイルパスが存在しないのではありませんか?
 
3)この asrs1 はどこで生成されているか
        asrs1 = filead & "\" & kobetsumail1
  ここで指定されています。
  と言うことは、ここの fiead または kobetsumail1 の変数の中身に問題がある可能性がある。
  それぞれを、 2) の方法で確認します。
 
   と言っても、fiead を使用しているその前の部分ではエラーとなっていませんから
  kobetsumail1 に問題がある可能性が高く
 
   kobetsumail1 = ActiveCell.Offset(i, 9).Value
  ここで代入を行っています。 ここでも、Value あたりにマウスカーソルを持ってくると
  その値を確認できますから、確認してみてください。
 
直接の確認はここまで。
 
 
 
 
アドバイスとして
    
Dim adrs1 As String

  adrs1 と宣言しているが、使用しているのは
        
asrs1 = filead & "\" & kobetsumail1

 変数名が違います。
 エラーの原因となり得ますので
 
モジュールの先頭に 「Option Explicit」 を入れておき、変数の宣言を強制する様にしましょう。
 
VBE メニューの ツール - オプション の編集 の「変数の宣言を強制する」にチェックを入れると
新たに作成したモジュールの先頭に、「Option Explicit」が自動で入る様になります。

投稿日時: 22/08/31 19:31:49
投稿者: 坊たん

すず様
こんにちは。
早速のご返信いただき有り難うございました。
また細かな説明ありがとうございます。
明日確認してみます。

トピックに返信