
現在、下記コードにて「ファイルを閉じて保存した際にメールを送信」を実行しております。
実行(処理)をするセル範囲除外を付け加えたいと思っております。(その範囲の更新はメールが飛ばない)
変数宣言?でPrivate Target As Range
If Not Intersect(Target, Range("A1:A100")) Is Nothing Then
End If
を加えればよいかと思いましたが出来ません。
ご教授頂きたいと思っております。
よろしくお願いいたします。
【元コード】
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.3ベストアンサー
- 回答日時:
Option Explicit
Private SavedFlg As Boolean
Private ChangeFlg As Boolean ' ← 追加
' ↓ 追加
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Intersect(Target, Sh.Range("A1:A100")) Is Nothing Then Exit Sub
ChangeFlg = True
End Sub
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 ChangeFlg Then Exit Sub ' ← 追加
If Not SavedFlg Then Exit Sub
<以下略>
よろずやkinchan 様
度々のご回答ありがとうございました。
確認させて頂き思う通りの作動を確認致しました。
今回も含め、勉強させて頂き本当にありがとうございました!
No.2
- 回答日時:
こんばんは
ちゃちゃを入れるようで申し訳ないですが・・
ご提示の方式だと(BeforeCloseなので)、ちょこっと修正してそのまま閉じる(確認ダイアログの「保存」で更新保存する)と、修正していてもスルーされてしまいそうな気がしますけれど・・
ご回答ありがとうございます。
そうですね。
指定範囲の更新のみ処理がしたいのですが。。。
現状、追加してもスルーされてしまうので回避したいのですが。
範囲指定が無くても満足な作動しているのですが運用していく段階で
必要に迫られました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Excel(エクセル) 2つのVBAを一緒にしたら機能しなくなりました(エクセル) 7 2022/06/02 12:41
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
pythonプログラム
-
別のサーバーのPHPへ書きこむには
-
AccessのDoCmd.SendObjectについて
-
ジオプラスでメールフォームをP...
-
mb_send_mailで複数宛てにtoで送信
-
Windows2003Server 再起動時に...
-
ダイアルアップ接続時のSMT...
-
時刻指定メールのプログラムを...
-
submitボタンの二重送信について
-
存在しないメールアドレスかど...
-
PHPのif文でその処理を途中で抜...
-
FTPコマンドでディレクトリごと...
-
PHPについて質問です!!
-
Subversionのリポジトリの削除
-
phplot.phpに関して
-
php.iniのエンコーディングの設...
-
$thisとコンストラクタについて
-
phpでテキストファイルへ書き込み
-
PHPでメールフォームの作る方法...
-
POST
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6にてメールを送信する方法
-
VBでメールを送る時のSMT...
-
ループの中で mailItemObj.Disp...
-
PHPでメール送信する際の送信数...
-
submitボタンの二重送信について
-
問い合わせ完了ページでの二重...
-
HPの更新をしたら自動でメール...
-
ブラウザの更新ボタン
-
【エクセルVBA】メール送信前に...
-
コマンドプロンプトで添付ファ...
-
【追加】ファイルを閉じてダイ...
-
空メール送信~メールアドレス取得
-
<a href=
-
SendMailがエラーを返さない
-
windowsXP XAMPP(PHP、apache、...
-
コマンドの内容を教えてください。
-
★エクセルVBAでOutlookのメール...
-
この文字化け文字を解読できますか
-
送信日時を指定してメールを送...
-
AJAXMAILのカスタマイズについて
おすすめ情報