質問: intersect(target, range("a4:g10"))でエラーが出ます。 (エラーは出ずとも延々と(無限ではない回数)thisworkbookモジュールを繰り返したコードもありました。) よろしくお願いします。
回答: 補足: >今考えうる「全て」は、値、フォントの色、セル背景色、罫線です。 もし、フォントの色、セルの背景色、罫線のイベントで取ろうとしたら、インスタンスを作らないといけないので、かなり長いコードになるし、まったく発想が違います。今の延長上ではありませんから、これ以上の方法を願うのでしたら、「作業グループ」を取ってください。 例: worksheets(array("sheet1", "sheet2")).select そうでなかったら、worksheet_activate() などで、特定の範囲をコピーしたほうが楽です。 以前も、同じような質問が出ていましたが、同期と言っても、二つのwindowを開くなら別ですが、そうでなければ、見えないシートに対しては、開けるまでは、正確にはどうなっているかはわからないのですから。(値は、参照式があるので別ですが。) >(3)は、thisworkbookモジュールで(2)を行った時にsheet2のシートモジュールが動いて欲しかったのですが、 それをするなら、もともと、sheet イベントは不必要です。 サブルーチン・マクロを呼び出せばよいのです。 'thisworkbook モジュール private sub workbook_sheetchange(byval sh as object, byval target as range) application.enableevents = false if strcomp(sh.name, "sheet1") = 0 and not intersect(target, range("a4:g10")) is nothing then worksheets("sheet2").range(target.address).value = target.value call worksheetschange(target.address) elseif strcomp(sh.name, "sheet2") = 0 and not intersect(target, range("a4:g10")) is nothing then worksheets("sheet1").range(target.address).value = target.value call worksheetschange(target.address) end if application.enableevents = true end sub '標準モジュール 'プロシージャ名は、紛らわしい名前をあえてつけた sub worksheetschange(mytarget as string) dim sh as worksheet for each sh in worksheets(array("sheet1", "sheet2")) with sh if .range(mytarget).column = 1 then if .range(mytarget).cells(1).value <> "" then .range(mytarget).offset(, 2).interior.colorindex = 5 else .range(mytarget).offset(, 2).interior.colorindex = xlcolorindexnone end if end if end with next sh end sub