[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA Change イベントで、callについて』(mask)
初めまして
どうしても自分で解決できず、過去ログ検索でも解決にたどり着けなかった為、お知恵をお借りしたく書き込みました
シートモジュール
Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("A1") Then
Call テスト Else Exit Sub End If
End Sub
標準モジュール1
Sub テスト()
ThisWorkbook.Activate
If Range("A1").Value = "" Then ★ Range("B1") = ""
Else Range("B1") = "☆" End If
End Sub
もしA1に何か入力・変更されたらプロシージャテストが実行されて
A1が空欄に変更されたらB1は空欄、そうでなければB1には既定値を…
というようにしたかったのですが、ステップ実行をやってみると
A1が空欄の時、★の行に来た時シートモジュールの最初の行に戻ってしまいます
「理由」も「対策」もわからず途方にくれております・・・
アドバイス頂ければ嬉しいです
どうぞよろしくお願い致します
< 使用 Excel:Excel2007、使用 OS:Windows10 >
自分で自分を呼び出しているからだろうと 思います ⬇この辺をヘルプで調べてみてください
Application.EnableEvents = False Application.EnableEvents = True (SoulMan) 2018/02/21(水) 22:30
Private Sub Worksheet_Change(ByVal Target As Range) のほうで、
変更されたのがA1じゃなきゃ、何もせず終了 っていうようにしてもいいかも。。。
(もこな2) 2018/02/21(水) 23:13
'TargetがA1じゃなければ、プロシージャを抜ける If Target.Address <> "$A$1" Then Exit Sub '〜〜処理〜〜
'TargetがA1なら処理をする If Target.Address(RowAbsolute:=False, ColumnAbsolute:=False) = "A1" Then '〜〜処理〜〜 End If
'TargetにA1が含まれていないなら、プロシージャを抜ける If Application.Intersect(Range("A1"), Target) Is Nothing Then Exit Sub '〜〜処理〜〜
'TargetにA1が含まれるなら処理をする If Not Application.Intersect(Range("A1"), Target) Is Nothing Then '〜〜処理〜〜 End If
たぶん、どれでもOKな気がします。
※Addressプロパティ使う場合、引数省略すると絶対参照で返してくることには注意した方がよさげです。
※相対参照にしたい場合は、引数をちゃんと付けてあげる必要があります。
※(説明のため、名前付き引数にしましたが、Address(0,0)でもたぶんOK)
(もこな2) 2018/02/22(木) 10:55
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.