アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在、下記コードにて「ファイルを閉じて保存した際にメールを送信」を実行しております。
実行(処理)をするセル範囲除外を付け加えたいと思っております。(その範囲の更新はメールが飛ばない)

変数宣言?で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

A 回答 (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
<以下略>
    • good
    • 1
この回答へのお礼

よろずやkinchan 様
度々のご回答ありがとうございました。

確認させて頂き思う通りの作動を確認致しました。
今回も含め、勉強させて頂き本当にありがとうございました!

お礼日時:2022/03/23 21:28

こんばんは



ちゃちゃを入れるようで申し訳ないですが・・

ご提示の方式だと(BeforeCloseなので)、ちょこっと修正してそのまま閉じる(確認ダイアログの「保存」で更新保存する)と、修正していてもスルーされてしまいそうな気がしますけれど・・
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。

そうですね。
指定範囲の更新のみ処理がしたいのですが。。。
現状、追加してもスルーされてしまうので回避したいのですが。
範囲指定が無くても満足な作動しているのですが運用していく段階で
必要に迫られました。

お礼日時:2022/03/23 18:53

「A1:A100 の範囲が更新された場合のみ送信」でいいですか?


対象シートは限定しますか?
    • good
    • 1
この回答へのお礼

いつもありがとうございます。
現在の作動に加える形で、

>「A1:A100 の範囲が更新された場合のみ送信」でいいですか?
はい!

>対象シートは限定しますか?
現在の作動と同じくすべてのSheetです。

よろしくお願い致します。

お礼日時:2022/03/23 17:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!