プロが教える店舗&オフィスのセキュリティ対策術

doc_wbkというブックのSheets(2)の内容をdoc_wbk2のActiveSheetにコピーしようとしています。
以下のコードの5行目で「アプリケーション定義またはオブジェクト定義エラー」が出てしまいます。ブックやシートまで指定しないといけないのかと思い doc_wbk.Sheets(2) を5行目行頭に追加しましたが変わりません。逆に5行目行頭の . を外してやるとアクティブシートの内容をコピーしてしまいます。Sheets(2)の内容をコピーしてやるにはどうしたらよいでしょうか?よろしくお願いします。

Set doc_wbk = Workbooks.Open(doc_dir + doc_file, 0)
With Sheets(2)
If .Range("A4").Value <> "" Then
row_num = .Range("a65536").End(xlUp).Row
.Range(Cells(4, 1), Cells(row_num, 11)).Copy doc_wbk2.ActiveSheet.Cells(row_num2 + 1, 1)
End If
End With

A 回答 (1件)

CellsとRangeが別々のシートを見ているためです



単に Cellsと書いてしまうと Withから外れてしまいます
.Range( Cells(4,1), Cells(row_num,11) )
と記述すると RangeはSheets(2) Cells(4,1)とCells(row_num,11)はActiveSheetになります
これでは Excelは困ってしまうわけです

.Range( .Cells(4,1), .Cells(row_num,11) )
とWithが掛かるように『.Cells』と記述しましょう
    • good
    • 0
この回答へのお礼

ありがとうございます。
エクセルオブジェクトは扱うのが難しいですね。
VBAコマンド解説等のサイト見てもこのような規則について説明してあるところがないですからね。

お礼日時:2008/10/02 13:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!