VBAエラー '1004' について(Office系ソフトのQ&A)

回答受付中の質問

VBAエラー '1004' について

VBA初心者です。
下のプログラムの★部分で
「実行時エラー'1004'
アプリケーション定義またはオブジェクト定義のエラーです。」
というエラーが発生します。
どなたか原因を教えていただけないでしょうか??

Dim aRange As Range
Dim bRange As Range

Set aRange = Range(Sheets("シートA").Range("A3"), Sheets("シートB").Range("A3").End(xlDown)) ★

Set bRange = Range(Sheets("シートB").Range("A3"), Sheets("シートB").Range("A3").End(xlDown))

下のシートBの範囲取得と同じことをしているつもりなのですが、うまくいきません。
どうぞよろしくお願い致します。

投稿日時 - 2007-09-19 18:21:13

連想キーワード:

QNo.3359179

すぐに回答ほしいです

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

[  前へ  |  次へ ]

回答(3件中 1~3件目)

ANo.3

>Set aRange = Range(Sheets("シートA").Range("A3"), Sheets("シートB").Range("A3").End(xlDown
範囲を定義しているのはわかりますが、Rangeのカッコ内の
Sheets("シートA").Range("A3")
Sheets("シートB").Range("A3").End(xlDown))
は、指定セルに、どんな内容が入っていますか。
ーー
私が試してみると、B1にA1、B2にA3が入っているとき
Sub test01()
' Range("A1:A3").Select
Range(Range(Range("B1")), Range(Range("B2"))).Select
End Sub
の上と下が同じになりますが、下の型とも違う。
Range(A1, A3).Selectはエラーになります(1004エラー)
Range(Range("A1"), Range("A5")).SelectはOK。
ーー
RangeはRange("A1")とか
Range(Cells(i,j),Cells(K,l))
とかの型で使いますが、質問のコードは、どちらの型にも当てはまらないようなのだが。
それと
Sheets("シートA")やSheets("シートB")のように複数シートの参照が出てきたとき、
Set aRange = Range()のRangeの前にも、明示的にシート名を入れるべき経験をしたように思います。
しかしsh2.Range(sh1.Cells(1, 2) & ":" & sh1.Cells(2, 2)).Select
はダメでした。
それで
Sub test01()
Dim sh1 As Worksheet
Dim sh2 As Worksheet
Set sh1 = Worksheets("Sheet1")
Set sh2 = Worksheets("Sheet2")
sh2.Activate
Range(sh1.Cells(1, 2) & ":" & sh1.Cells(2, 2)).Select
End Sub
でSheet1のB1にA1、B2にA5の場合Sheet2のA1:A5を範囲選択に成功しました。
SelectはActiveなシートの範囲を指定しないとだめだたように思います。
以上参考になれば。

投稿日時 - 2007-09-19 23:05:30

ANo.2

こんばんは。

「実行時エラー'1004'アプリケーション定義またはオブジェクト定義のエラーです。」

そのエラーは、オブジェクト・エラーのようですね。

一度、F2 を押して、オブジェクトブラウザを見ていただけるとよいのですが、Range オブジェクトの親オブジェクトにあたるものは、一般では、Worksheet とApplication オブジェクトです。

今、そのコードが置かれている場所は、[シートモジュール]だと思います。

そうすると、親オブジェクトは、そのままの状態では、その書かれたモジュールのワークシート・オブジェクトだと、VBAでは理解してしまいます。そうすると、Range の親オブジェクトと中で指し示すシート・オブジェクトが違ってしまい、オブジェクト・エラーが出てしまいます。

まず、Excel VBAでは、特別なことがない限りは、「標準モジュール」を使ってください。
記録マクロで、書き込まれる場所です。

With Worksheets("シートA")
 Set aRange = .Range(.Range("A3"), .Range("A3").End(xlDown))
End With

With Worksheets("シートB")
 Set bRange = .Range(.Range("A3"), .Range("A3").End(xlDown))
End With

このようにして、囲みます。Rangeの手前に、点(.)がつけてあります。そうすると、入力の手間が減り、ミスも少なくなります。
= の後の Range にも、シートオブジェクトの下に入り、整合性が取れるようになります。

投稿日時 - 2007-09-19 20:36:04

ANo.1

>Sheets("シートA").Range("A3"), Sheets("シートB").Range("A3")

二つのシートを跨いで範囲設定しているせいでは?

Sheets("シートA").Range("A3"), Sheets("シートA").Range("A3")

投稿日時 - 2007-09-19 18:43:03

この質問に関連するQ&A
  • マクロ 実行エラー1004
  • エクセル2000を使用しています。 以下のマクロを作り、19行目の”AAA”を探し、29行目で1つ前の列までロックしようとしています。 新規のエクセルで使用すると、動作しますが、肝心の組み込みたいエ...
  • VBA Setステートメント
  • エクセル2002使用です。 B列に本日の日付が入るようにワークシートに関数(DAY関数)が入っています。 そのB列を検索して、同じ日付け(数字)がなければ、今日の日付を入力するVBAを組もうと思っ...
  • EXCELでSheetにデータを蓄積したい
  • Sheet1に入力シートを作成し、Sheet2に蓄積シートを作成しました。 Sheet1で作成されたデータをSheet2に蓄積させておきたい。 Sheet1のA2の値が入力された場合に実行するとすると...
合わせてチェックしたい
PR

OKWaveのオススメ