電子書籍の厳選無料作品が豊富!

下記のマクロをVBAコードで設定していますが、
何故か、同じマクロが2回程度実行されます。
このマクロを作業中に「1回」だけ実行するように出来る方法があれば、教えてください。
コード
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
On Error Resume Next
If Not Intersect(Target, Range("$K$5").Text) Is Nothing Then
If Range("K$5").Value = "手続き必要" Then
Call 省エネ方法
End If
End If
End Sub
マクロ
Sub 省エネ方法()
Dim alert
n = Application.InputBox("省エネ方法を番号で入力で入力してください。" & vbCr & " " & vbLf & "1: 省エネ適判" & vbLf & "2: 仕様基準", Title:="省エネ提出方法確認", Type:=1)
If n = 1 Then
Call 省エネ適判
ElseIf n = 2 Then
Call 仕様基準
End If

End Sub
以上となります。
よろしくお願いします。

A 回答 (1件)

同じマクロが2回実行される原因として、以下のようなケースが考えられます。



イベントの再トリガー
Worksheet_Changeイベント内でセルの値を変更したりすると、その変更が再びWorksheet_Changeイベントをトリガーする可能性があります。

意図しない条件一致
IntersectやRange("$K$5")の参照が正しくない場合、意図せず複数回実行されることがあります。


対策例

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
' 再帰的なトリガーを防ぐためにイベントを一時停止
Application.EnableEvents = False

' 対象セルの変更を確認
If Not Intersect(Target, Range("$K$5")) Is Nothing Then
If Range("$K$5").Value = "手続き必要" Then
' 省エネ方法を一度だけ呼び出す
Call 省エネ方法
End If
End If

' イベントを再度有効化
Application.EnableEvents = True
End Sub
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
早速試してみます。

お礼日時:2025/01/21 16:58

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

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A