VBAでOutlookを操作してメールを送信する際に、「この添付ファイルの形式でこのアクションを実行することができません」
というエラーが発生するときはありませんか?
今回は「この添付ファイルの形式でこのアクションを実行することができません」エラーの考えられる原因とその対処法について解説します。
もくじ
エラーの主な原因
このエラーが発生する主な原因は、VBAでOutlookのメールにファイルを添付しようとした際、以下のいずれかの理由で添付が拒否されることが考えられます。
-
1.添付ファイルの拡張子がブロックされている
- Outlookにはセキュリティ対策として、特定の拡張子(.exe、.bat、.js
など)の添付を禁止する仕組みがありVBAでこれらのファイルを添付しようとするとエラーが発生します。
- Outlookにはセキュリティ対策として、特定の拡張子(.exe、.bat、.js
- 2.ファイルのパスが正しくない
- VBAコード内で指定したファイルパスが間違っている、または存在しない場合にエラーが発生します。
-
3.ファイルが使用中
- 添付しようとしているファイルが他のプログラムで開かれていると、添付できない場合があります。
-
4.Outlookのセキュリティ設定が影響している
- Outlookのセキュリティポリシーによって、VBAからのファイル添付が制限されている場合があります。
-
5.VBAのコードの書き方に問題がある
.Attachments.Add
の使い方が誤っている可能性があります。
解決策
1. 添付ファイルの拡張子を確認する
添付しようとしているファイルが、Outlookでブロックされる拡張子かどうかを確認してください。
- ブロックされる拡張子の一例
- 対処法:
- 一般的には該当の拡張子である場合はZIPファイルに圧縮して送ります。
- 次にファイル名の拡張子を一時的に変更し、受信者に変更方法を伝えます。
- 無難なのはクラウドストレージ(OneDriveやGoogle
Drive)にアップロードし、リンクを共有する方法です。
2. ファイルパスを正しく指定する
VBAでファイルパスを指定する際に、フルパスを使用するようにしましょう。
以下コードを実行すると、事前にファイルパスの有無を確認できます。
Dim filePath As String
filePath = "C:\Users\Username\Documents\test.xlsx"
If Dir(filePath) = "" Then
MsgBox "ファイルが存在しません: " & filePath
Exit Sub
End If
3. ファイルが使用中かどうかを確認する
他のプログラム(ExcelやWordなど)で開かれているファイルは添付できないことがあります。
対策
VBAでファイルが開かれているかを確認し、閉じる処理を行いましょう。
以下のコードでファイルが開かれているか否かチェックすることができます。
On Error Resume Next
Open filePath For Binary Access Read Write Lock Read Write As #1
Close #1
If Err.Number <> 0 Then
MsgBox "ファイルが使用中です。閉じてから再試行してください。"
Exit Sub
End If
On Error GoTo 0
4. Outlookのセキュリティ設定を変更する
VBAによるメールの自動送信や添付ファイルの追加をブロックする設定が適用されている場合があります。
対処法
- 「セキュリティセンター」から設定を変更
- Outlookを開く
- 「ファイル」→「オプション」→「セキュリティセンター」→「セキュリティセンターの設定」
- 「プログラムによる Outlookの自動操作」項目をチェックし、適切な設定にする
-
管理者のポリシーによる制限
- 組織のポリシーで制限されている場合、管理者に問い合わせる。
5. VBAコードの書き方を修正
添付処理に問題がある場合、コードの見直しを行います。
修正例
Sub SendMailWithAttachment()
Dim OutApp As Object
Dim OutMail As Object
Dim filePath As String
' Outlookアプリケーションを起動
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
' 添付するファイルのパス
filePath = "C:\Users\Username\Documents\test.xlsx"
' ファイルが存在するか確認
If Dir(filePath) = "" Then
MsgBox "添付ファイルが見つかりません: " & filePath, vbExclamation
Exit Sub
End If
' メール作成
With OutMail
.To = "test@example.com"
.CC = ""
.BCC = ""
.Subject = "VBAからのテストメール"
.Body = "このメールはVBAで送信されました。"
' 添付ファイル追加
On Error Resume Next
.Attachments.Add filePath
If Err.Number <> 0 Then
MsgBox "添付ファイルを追加できませんでした。" & vbCrLf & Err.Description, vbCritical
Err.Clear
Exit Sub
End If
On Error GoTo 0
' メール送信
.Send
End With
' 後処理
Set OutMail = Nothing
Set OutApp = Nothing
MsgBox "メールが送信されました!", vbInformation
End Sub
このコードでは、ファイルが存在しない場合のエラーハンドリングOn Error Resume Nextを追加していて、
エラー発生時にメッセージ表示を表示させるようにしています。
まとめ
原因 | 対処法 |
---|---|
添付ファイルの拡張子がブロックされている | ZIP圧縮、拡張子変更、クラウド共有 |
ファイルパスが正しくない | フルパスを確認・修正 |
ファイルが使用中 | ファイルを閉じてから実行 |
Outlookのセキュリティ設定 | セキュリティセンターの設定を変更 |
VBAのコードが誤っている | .Attachments.Add の使い方を確認し修正 |
今回は「この添付ファイルの形式でこのアクションを実行することができません」エラーの考えられる原因とその対処法について説明をしました。
エラーの原因に応じて適切な対処をすれば、スムーズにVBAでOutlookのメールにファイルを添付できるようになりまので、ぜひご参考ください。
コメントを残す