- ベストアンサー
エクセルマクロのchangeイベントについて
- エクセルマクロのchangeイベントについての質問です。マクロを作成しましたが、動作しません。
- 質問者は「Private Sub Worksheet_Change」イベントを使用してマクロを作成しましたが、うまくいきません。
- アドバイスをいただきたいと思います。なぜ動かないのか理由がわかりません。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Private Sub Worksheet_Change(ByVal Target As Range) Dim i As Long dim w as workbook if Target.address <> "$B$4" then exit sub set w = Workbooks.Open(Filename:="c:\osaruPKsarch\sarch.xls") with w.worksheets("シート名") 'またはシート番号。試す前に正確に直すこと ' For i = 51 To 55 ' .cells(3, i) = .cells(7, i) ' Next i .range("AY3:BC3").value = .range("AY7:BC7").value end with End Sub 言わずもがなですが,起動させたいシートのシート名タブを右クリックしてコードの表示を選んで現れたシートに書かなければダメです。
その他の回答 (2)
- Azzz___
- ベストアンサー率40% (9/22)
こんにちは。 No1さんの回答にもありますが、イベントが発生していないのは 恐らく該当するアクションがシート上で行われてないからだと思います。 もしくは、(今回は可能性が低いと思いますが)イベント自体は発生しているが、 途中で止まっていることも考えられると思います。 このような場合は、コードに仕掛けを入れることで、問題がどの部分で起こっているのか 突きとめる方法がいくつかあります。 ・ブレークポイントを入れる エディタ画面のコードに例えば「Private Sub Worksheet_Change(ByVal Target As Range)」に カーソルを置いて「F9」を押します。 この状態でプログラムが動くか確認します。 ・MsgBoxを入れる。 任意の場所にMsgBoxを入れます。例えば「MsgBox "ここまで処理"」などと入れておくと いいです。後はそれをずらしていけば、どこに問題があるのか分かります。 ・STOPを入れる 上記と同じで、コードの中に「STOP」文を入れます。 これも処理が流れていればSTOPの部分で止まりますので、どこまで処理が進んでいるか 分かります。 上記の方法で探すとどこに原因があるか分かると思います。 慣れてなければ、標準モジュールに簡単なプロシージャを作成し、それで試すと 上記がどのような働きを持っているのか分かると思います。 (説明を理解するより実際に試してみた方が直感的に分かると思います) 文法エラーは「実行時エラー」と表示されるので、問題はすぐに発見できますが、 質問者さんのような場合、いわゆる論理エラーの場合は上記の方法を使うことで より短い時間でどこに問題(バグ)があるのか発見できて、やりやすいです。
お礼
ありがとうございます^^ atopやMsgBoxは入れてみたんですが、動きがおかしくどこが悪いか見つからなかったですToT >慣れてなければ、標準モジュールに簡単なプロシージャを作成し、それで試すと これを試してみますね^^b ありがとうござました!
- imogasi
- ベストアンサー率27% (4737/17069)
質問異は、何がしたいのか文章ではっきり書くこと。初心者の場合突拍子もない方法(コードややり方)でやるときがあるので。例 Set Target = Range("b4") がそれらしい。 質問には、コードしか挙げてない。 多分「B4セルの値が変わったら何々したい」だろう。その場合 If Target。Address="$B$4" Then ・・・ End If End Sub この方式を使う場合$やBを追う文字にすることに気をつけて。
お礼
たしかに^^; 書き方下手で申し訳ありません^^; なるほど$をちゃんと指定しないといけないんですね! やってみます! ありがとうございます!
お礼
fmfm~ ちょっと使い方がわからない構文がいくつかあるので、示していただいたコードを解析する所からやってみます^^ ありがとうございます~^^