[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オブジェクトが必要です、のエラー』(バーバラ)
またお世話になります。WinXP,Excel2007です。
下記のコードのココの部分で次のエラーがでます。 「実行時エラー424.オブジェクトが必要です」 Rowのオブジェクトがないと言っているのでしょうか? どこを修正すればよいか教えていただけないでしょうか。
Sub Sample()
Dim Wb1 As Variant, Wb2 As Workbook Wb1 = "C:\AAA\BBB\・・・\CCC.xls" Set Wb2 = ThisWorkbook
Dim lastRow As Long, lastRow2 As Long lastRow = Cells(Rows.Count, "D").End(xlUp).Row lastRow2 = Wb1.Worksheets("CCC").Range("A2").End(xlDown).Offset(-1, 0).Row-->ココ
Wb2.Range("A2:A" & lastRow).Value = Wb1.Worksheets("CCC").Range("D2:D" & lastRow2).Value
End Sub
Wb1 は文字列なのでそれではアクセスできません。 Set Wb1 = Workbooks.Open("C:\AAA\BBB\・・・\CCC.xls") としてください。 (Mook)
こんにちは。
コードを読むときは、「.」は「の」と読み替え、「=」は「は」と読み替えます。 するとだいたい意味がとれます。
このコードだと > lastRow2 = Wb1.Worksheets("CCC").Range("A2").End(xlDown).Offset(-1, 0).Row-->ココ lastRow2 = lastRow2は Wb1. Wb1(というブック)の Worksheets("CCC"). CCCシートの Range("A2"). A2セルの End(xlDown). End(xlDown) (Ctrlキー+↓キーで移動するセル)の Offset(-1, 0). いっこ上の Row 行番号
こうなるはずのところ、Wb1が「"C:\AAA\BBB\・・・\CCC.xls"」という文字列なので (つまり "あいうえお"の中のCCCシートのA2セルの、と書いているのとおなじこと) エクセル君は「Wb1という文字列の中にCCCというシートオブジェクトがありません」と返事をしたのが このエラーメッセージです。
> どこを修正すればよいか Wb1をWorkbook型で宣言し、Workbookを代入する。 コードで書けば Dim Wb1 As Workbook Set Wb1 = Workbooks.Open"C:\AAA\BBB\・・・\CCC.xls"
ちなみに、Wb1をちゃんとWorkbook型で宣言していれば、 うっりsetをつけ忘れ(文字列の代入になる) ても、その行でエラーがでるので、 原因が特定しやすい。 Variant型での宣言は出来る限り避けるべきです。
Mookさん ご回答ありがとうございました。できました! メソッドがくっついているWorkbookを変数にできるんですね。。
Wb2.Range("A2:A" & lastRow).Value →ココでエラーが出ましたが、Worksheetsが抜けていました。 これは自力で見つけることができた。。。
お名前わかりませんが、 >Variant型での宣言は出来る限り避けるべきです。 そうですねー。今後は気をつけます。
> エクセル君は「Wb1という文字列の中にCCCというシートオブジェクトがありません」 >と返事をしたのがこのエラーメッセージです。 そっちでしたか。Rowではなかったのですね。 ありがとうございました。よくわかりました。 (バーバラ)
せっかくきちんと説明されているのですから、マナーを守って名前を書きませんか。 どんなに一生懸命に見えても、ハンドルがなかったり初心者を名乗る方は、 無責任な発言に見えてしまいます。
だからという突込みではないですが、 Set Wb1 = Workbooks.Open"C:\AAA\BBB\・・・\CCC.xls" は Set Wb1 = Workbooks.Open("C:\AAA\BBB\・・・\CCC.xls") としないと動かないですね。 (Mook)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.