前回の”教えて”で、ファイルの更新をメールで自動通知の閉じた後の処理で
解決したと思っていましたがファイルの内容が更新して無く、閉じただけでも
メール送信が処理されてしまいます。
タイトル通りの「ファイルを閉じてダイアログで保存した時だけ処理」の場合
このコード修正点を教えて頂ければと思っております。
よろしくお願いいたします。
_______________________________
Option Explicit
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Saved = True
End Sub
--
Private Sub Workbook_BeforeClose(Cancel As Boolean) ←ここ
If Not Saved Then Exit Sub
On Error GoTo ErrorHandler
Dim objOutlook As Outlook.Application
Dim objMail As Outlook.MailItem
Set objOutlook = New Outlook.Application
Set objMail = objOutlook.CreateItem(olMailItem)
With objOutlook.CreateItem(olMailItem)
.To = "メルアド"
.CC = ""
.BCC = ""
.Subject = "【テスト】(自動送信)"
.Body = "このメールはファイル更新で自動送信されています。"
.BodyFormat = olFormatPlain
.Send
End With
Finally:
Set objOutlook = Nothing
Exit Sub
ErrorHandler:
MsgBox "メールの送信に失敗しました", vbOKOnly + vbCritical
Resume Finally
End Sub
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
No.3ベストアンサー
- 回答日時:
Option Explicit
Private SavedFlg As Boolean
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
SavedFlg = True
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Const olMailItem = 0
Const olFormatPlain = 1
If Not Saved Then
Select Case MsgBox("'" & ThisWorkbook.Name & "' の変更内容を保存しますか?", vbExclamation + vbYesNoCancel)
Case vbYes
Application.EnableEvents = False
ThisWorkbook.Save
Application.EnableEvents = True
SavedFlg = True
Case vbNo
ThisWorkbook.Saved = True
Case vbCancel
Cancel = True
Exit Sub
End Select
End If
If Not SavedFlg Then Exit Sub
On Error GoTo ErrorHandler
Dim objOutlook As Object
Set objOutlook = CreateObject("Outlook.Application")
With objOutlook.CreateItem(olMailItem)
.To = "test@"
.CC = ""
.BCC = ""
.Subject = "【テスト】自動送信"
.Body = "このメールは自動テストメールです"
.BodyFormat = olFormatPlain
.Send
End With
Finally:
Set objOutlook = Nothing
Exit Sub
ErrorHandler:
MsgBox "メールの送信に失敗しました", vbOKOnly + vbCritical
Resume Finally
End Sub
アウトルックの参照設定が要らないバージョンになってます。
修正コートのご提供ありがとうございました。
無事、作動を確認し感動致しました。
この度は何度もご回答、ご教授頂きありがとうございました。
No.2
- 回答日時:
前回削除してしまった変数宣言を復活して修正してください。
ご回答ありがとうございます。
>前回削除してしまった変数宣言を復活して修正してください。
復活させ、Saved → SavedFlg 3か所を修正しましたが
ファイルを修正(更新)し閉じる際のダイアログでの「保存する」ボタンだけではメールが飛ばなく、上書きしてから☓で閉じるとメールが飛んできます。
修正点はございますでしょうか?
何度もお付き合いありがとうございます。
No.1
- 回答日時:
Saved の宣言を削除してしまった為に動きが違っています。
削除ではなく、
Saved
↓
SavedFlg
に変更してください。
3か所あります。
ご回答ありがとうございます。
矢印の2か所しか見つけれれませんでした。
この2か所ではエラーになります。
_______________________________
Option Explicit
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
Saved = True ←ここ
End Sub
--
Private Sub Workbook_BeforeClose(Cancel As Boolean)
If Not Saved Then Exit Sub ←ここ
On Error GoTo ErrorHandler
Dim objOutlook As Outlook.Application
Dim objMail As Outlook.MailItem
Set objOutlook = New Outlook.Application
Set objMail = objOutlook.CreateItem(olMailItem)
With objOutlook.CreateItem(olMailItem)
.To = "メルアド"
.CC = ""
.BCC = ""
.Subject = "【テスト】(自動送信)"
.Body = "このメールはファイル更新で自動送信されています。"
.BodyFormat = olFormatPlain
.Send
End With
Finally:
Set objOutlook = Nothing
Exit Sub
ErrorHandler:
MsgBox "メールの送信に失敗しました", vbOKOnly + vbCritical
Resume Finally
End Sub
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) excel VBAでメールを送る方法について 2 2021/11/03 15:34
- Visual Basic(VBA) VBA EXCELからメールを送る方法について 5 2021/11/04 06:30
- Word(ワード) word_VBA_フォームからダイアログそこからの復帰について 2 2021/12/13 23:44
- Visual Basic(VBA) VBA 添付ファイルをつけてメールを送る方法について 1 2021/10/29 08:48
- Visual Basic(VBA) VBA excelからメールを送る方法について 1 2021/11/03 11:30
- Visual Basic(VBA) EXCEL VBA シート貼り付け 3 2021/11/15 12:33
- Visual Basic(VBA) シート名をフォルダ名に変更 1 2021/12/01 15:59
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
大きいサイズのテキストファイ...
-
csvファイルを開かずに文字を検...
-
XMLファイルの表示について
-
2つのファイルを比較するC言語...
-
COBOLでの可変長定義について
-
fprintfで文字化け
-
この問題のファイルを読み込ん...
-
ハッシュの計算時間について
-
CSVファイルへの保存の際、デー...
-
COM相互運用機能のON,OFFによる...
-
UTL_FILEにて既存のExcelに追加...
-
C言語について
-
ドラッグアンドドロップでファ...
-
処理負荷特定で考えられる要因...
-
同じ名前のファイルを作った場...
-
FileOpen 関数で既にファイル...
-
Thunderbirdでemlファイルを開...
-
ファイル読み書き方法について...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
バッチで118項目のCSVを処理し...
-
テキストファイルの最終行を削...
-
CSVファイルへの保存の際、デー...
-
SGファイルって何ですか?
-
大きいサイズのテキストファイ...
-
ドラッグアンドドロップでファ...
-
分割コンパイルの#defineについて
-
グローバル変数のよくない使い...
-
iniファイルに追記がしたいです。
-
Excelマクロでの再読込み方法
-
C言語のfopenについて教えてく...
-
ハッシュの計算時間について
-
VBAにてEXCEL以外のファイル(テ...
-
Javascript で INI の読み書き
-
同じ名前のファイルを作った場...
-
ASP .NETでファイル選択ダイア...
-
VBに、Cのincludeのようなもの...
おすすめ情報