(cache) ECXEL VBA - Selectメソッドの失敗 | OKWave

ECXEL VBA - Selectメソッドの失敗

FAQ(よくある質問)

法人向けサービス

解決済みの質問

ECXEL VBA - Selectメソッドの失敗

Rangeを指定するのに、
Workbooks("abc").Sheets("Sheet1").Range("A1").Select

と言う風に指定したいのですが、これを行なうと

--------------------------------------------
実行時エラー '1004':
RangeクラスのSelectメソッドが失敗しました。
--------------------------------------------

となってしまう為、いつもわざわざ下記のようにしています。

Workbooks("abc").Activate
Sheets("Sheet1").Select
Range("A1").Select

Selectだけでなく、Copyの貼り付け等の時も同様で
かなりの手間と、コードの長さになってしまっています。

どこかの設定を変えると出来たりするのでしょうか?

又、他に良い方法がありましたらお教え下さい。
よろしくお願いします。

投稿日時 - 2005-10-19 16:27:10

連想キーワード:

QNo.1722099

困ってます

質問者が選んだベストアンサー

こんにちは。Wendy02です。

>Workbooks("abc").Sheets("Sheet1").Range("A1").Select

こうしたコンテナタイプの書き方は、本来は有効なのですが、ここで示されているRangeプロパティは、Worksheet オブジェクトの配下になっている関係で、Activateされていない場所のものは、Selectできないのです。

Application.Goto Workbooks("abc.xls").Sheets("Sheet1").Range("A1")

とすればよいことですが、しかし、こういう場面に出会うということは、そんなに多いものではないのです。実際、Select すること自体は、最終のシートやセルをActive にさせる以外は必要がないのです。

>Selectだけでなく、Copyの貼り付け等の時も同様で
>かなりの手間と、コードの長さになってしまっています。

Copy の時は、Destination をあわせるだけでよいのですが、コンテナタイプの書き方をすれば、

ActiveSheet.Range("A1").Copy Workbooks("abc.xls").Sheets("Sheet1").Range("A1")

でよいわけです。

投稿日時 - 2005-10-19 16:45:25

お礼

Wendy02さん、こんにちは!いつもありがとうございます!!
お礼が遅くなってしまい、申し訳ありません。

>こうしたコンテナタイプの書き方は、本来は有効なのですが、
>ここで示されているRangeプロパティは、Worksheet オブジェクトの配下になっている関係で、
>Activateされていない場所のものは、Selectできないのです。

へぇー、そうだったんですね!またまた1つ賢くなりました。

>ActiveSheet.Range("A1").Copy Workbooks("abc.xls").Sheets("Sheet1").Range("A1")

これを、有難く有効に使わせて頂くことにしました。
本当にいつもいつも助かっています。
ありがとうございました!

投稿日時 - 2005-10-21 15:25:11

ANo.1

3人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

ベストアンサー以外の回答(1件中 1~1件目)

ANo.2

こんにちは。KenKen_SP です。

【Wendy02 さんのコメントより引用】
> 実際、Select すること自体は、最終のシートやセルをActive
> させる以外は必要がないのです。

私も同感です。Select や Activate が本当に必要なケースは
ごくわずかです。

例えば、A1セルに数字の値を入力したいなら、

  Workbooks("abc").Activate
  Sheets("Sheet1").Select
  Range("A1").Select
  ActiveCell.Value = 10

みたいなコードになるわけですが、#1 で Wendy02 さんが解説され
た理由で Select に失敗するのであれば、

  Workbooks("abc").Sheets("Sheet1").Range("A1").Value = 10

と書いても求める結果は一緒です。Select メソッドで失敗するなら、
Select しなければ良い、、、といったところでしょうか。

無論 Select してからでないと失敗するメソッドがあり、それらは
例外となりますが。


> ...かなりの手間と、コードの長さになってしまっています。

そのために Set ステートメントや With ステートメントがあります。

例)

Dim SH as Worksheet
Set SH = Wrokbooks("abc").Sheets("Sheet1")

で、以降 SH.Range("A1") と書けば、

Wrokbooks("abc").Sheets("Sheet1")..Range("A1")

と同意になります。

投稿日時 - 2005-10-20 00:37:59

お礼

KenKen_SPさん、早速ご回答ありがとうございました!
お礼が遅くなってしまい、申し訳ありません。

>Select メソッドで失敗するなら、
>Select しなければ良い、、、といったところでしょうか。

そうなんですよね、私もSelectしない方が処理も早くなるし
Selectせずに進めたいのですが、なかなかうまく行かない時があったりして、頭を悩ませています。。。

それが

>無論 Select してからでないと失敗するメソッドがあり、それらは
>例外となりますが。

の時なのでしょうかね?!


>そのために Set ステートメントや With ステートメントがあります。

>(中略)

>Dim SH as Worksheet
>Set SH = Wrokbooks("abc").Sheets("Sheet1")

>で、以降 SH.Range("A1") と書けば、

>Wrokbooks("abc").Sheets("Sheet1")..Range("A1")

>と同意になります。

ありがとうございます!
この辺りは初心者の私でもなんとか知っている範囲でしたので
できるだけ使うようにしているのですが
まだまだ、効率の悪いコードになっていることであろうと
情けなく思っています。

これから色々勉強して行きたいと思っています。

ありがとうございました!

投稿日時 - 2005-10-21 15:35:43

あわせてチェックしたい

  • Excel'97で 実行時エラー '1004' が出る...
  • VBAエラー '1004' について...
  • VBA マクロ実行時エラー’1004RangeクラスのPasteSpecialメソッドが失敗...

PR

プロフィール画像選択機能追加![ 詳細 ]

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら

【教えてプロポーズ!】

結婚・プロポーズのQ&A特集はこちら