[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『Range クラスの Select メソッドが失敗しました。とは?』(マクロ勉強中)
Sheet1 の A2 セルを変えたら同シートの一部範囲を
コピーし、Sheet2 のあるセルを選ぶ、という単純な
マクロを作ってみました。
−−−−−−−−−−−−−−−−−−−−−
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column <> 1 Then Exit Sub If Target.Row <> 2 Then Exit Sub
Dim myR As Long
myR = Range("A9").Value Range("C8:I8").Copy
Sheets("Sheet2").Select Cells(myR, 6).Select
End Sub
−−−−−−−−−−−−−−−−−−−−−
が、最後の段階で
実行時エラー '1004':
Range クラスの Select メソッドが失敗しました。
とのメッセージが出ます。
どこを修正すれば良いでしょうか?
どうぞよろしくお願いいたします。
< 使用 Excel:Excel2019、使用 OS:unknown >
エラーの理由はわかりますか? そのコードは Sheet1のシートモジュールに書いているので、 Cells(myR, 6).Selectのようにシートを省略すると、Sheet1を指定したことになるのです。 その直前で別のシートをアクティブにしており、 Sheet1がアクティブでないのでエラーとなります。
Sheets("Sheet2").Select Sheets("Sheet2").Cells(myR, 6).Select とするか Application.Goto Sheets("Sheet2").Cells(myR, 6) とします。
(xyz) 2024/11/18(月) 15:10:24
シートを指定せずにセルを選択したとき、 ・標準モジュールに書かれたプロシージャの場合は、 そのときアクティブなシートを指定したと見做され、 ・シートモジュールの場合は、 そのときのアクティブシートに関わらず、コードが書かれたシートを指定したと見做される
という仕様です。これは仕様なので、理屈というよりも、そのように決めたものと理解してください。 (xyz) 2024/11/18(月) 15:14:42
・シートモジュールの場合は、 そのときのアクティブシートに関わらず、コードが書かれたシートを指定したと見做される
存じませんでしたぁ。
当該行を
Sheets("Sheet2").Cells(myR, 6).Select
とし、回避しました♪
本当にありがとうございました。
(マクロ勉強中) 2024/11/18(月) 15:35:47
Application.Goto Sheets("Sheet2").Cells(myR, 6) と書くと、Sheets("Sheet2").Selectは不要です。(分かりにくかったけれど) (xyz) 2024/11/18(月) 16:07:56
分かりにくかったけれど → などと滅相もない。
大変勉強になりました。
改めて … ありがとうございました!
(マクロ勉強中) 2024/11/19(火) 10:43:51
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.