[[20241118143713]] 『Range クラスの Select メソッドが失敗しました。』(マクロ勉強中) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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

(xyz)様
早速のご教示を頂きありがとうございました。

・シートモジュールの場合は、 そのときのアクティブシートに関わらず、コードが書かれたシートを指定したと見做される

存じませんでしたぁ。

当該行を
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

(xyz)様

分かりにくかったけれど → などと滅相もない。
大変勉強になりました。
改めて … ありがとうございました!
(マクロ勉強中) 2024/11/19(火) 10:43:51

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.