![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
前回の”教えて”で、ファイルの更新をメールで自動通知の閉じた後の処理で
解決したと思っていましたがファイルの内容が更新して無く、閉じただけでも
メール送信が処理されてしまいます。
タイトル通りの「ファイルを閉じてダイアログで保存した時だけ処理」の場合
このコード修正点を教えて頂ければと思っております。
よろしくお願いいたします。
_______________________________
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ファイルの表示について
-
Javascript で INI の読み書き
-
CSVファイルへの保存の際、デー...
-
テキストファイルの最終行を削...
-
ドラッグアンドドロップでファ...
-
マウスポインタの変更
-
Cでのネットワークファイルの読...
-
マッチング処理
-
FileOpen 関数で既にファイル...
-
static な c 関数の unit-test ...
-
【C#】リソースファイルの埋め...
-
shellで16桁の数字が含まれるフ...
-
Access2010の最適化設定について
-
VBAでcsvファイルを読み込み、...
-
Excelマクロでの再読込み方法
-
SGファイルって何ですか?
-
パワーポイントの画面表示が点...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ファイル名の先頭にアンダース...
-
csvファイルを開かずに文字を検...
-
大きいサイズのテキストファイ...
-
テキストファイルの最終行を削...
-
ドラッグアンドドロップでファ...
-
分割コンパイルの#defineについて
-
バッチで118項目のCSVを処理し...
-
CSVファイルへの保存の際、デー...
-
グローバル変数のよくない使い...
-
C言語のfopenについて教えてく...
-
SGファイルって何ですか?
-
VBに、Cのincludeのようなもの...
-
ファイルの結合
-
fopenできる上限の変更
-
「VBScript」ADODB.Streamにお...
-
iniファイルに追記がしたいです。
-
XMLファイルの表示について
-
Excelマクロでの再読込み方法
-
VBAにてEXCEL以外のファイル(テ...
おすすめ情報