[[20150303155919]] 『VBA シートのコピーでエラー』(SAYO) ページの最後に飛ぶ

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

 

『VBA シートのコピーでエラー』(SAYO)

VBA初心者です。
次の構文で、
★部 Sheets("Sheet2").Range(Cells(1, "A"), Cells(5, "B")).Copy
がエラーになるのは、何故でしょうか?

Sub TEST()

    Sheets("Sheet1").Select
    Sheets("Sheet1").Range(Cells(1, "A"), Cells(5, "B")).Copy
 ★ Sheets("Sheet2").Range(Cells(1, "A"), Cells(5, "B")).Copy
End Sub

< 使用 Excel:Excel2010、使用 OS:Windows7 >


 Cells(1, "A")
 という書き方ではセルの親のシートを省略した書き方となる。
 VBAでセルの親が省略されている場合、シートモジュールの場合はそのシート、標準モジュールやWorkSheetモジュールの場合は
 その時にアクティブなシートが親とみなされる。

 なのでSheet1のシートモジュールに記入されている場合、標準モジュールでSheet1がアクティブシートの場合、
 Sheets("Sheet2").Range(Cells(1, "A"), Cells(5, "B")).Copy
 は
 Sheets("Sheet2").Range(Sheets("Sheet1").Cells(1, "A"), Sheets("Sheet1").Cells(5, "B")).Copy
 とみなされてシートとセルが矛盾するためにエラーとなる。

 Sheets("Sheet2").Range(Sheets("Sheet2").Cells(1, "A"), Sheets("Sheet2").Cells(5, "B")).Copy 
 または
 With  Sheets("Sheet2")
    .Range(.Cells(1, "A"), .Cells(5, "B")).Copy
 End With
 として見てくれ。
(ねむねむ) 2015/03/03(火) 16:13

 横から失礼します。

 「シートモジュールの場合はそのシート、標準モジュールやWorkSheetモジュールの場合は
 その時にアクティブなシートが親とみなされる。」

 これは

 「シートモジュールの場合はそのシート、標準モジュールやユーザーフォームモジュールの場合は
 その時にアクティブなシートが親とみなされる。」

 ですかね?

(β) 2015/03/03(火) 17:53


 おっと大きな間違いをしてた。

 >WorkSheetモジュール
 これはThisWorkbookモジュールの間違いだった。
 すまない。

 ユーザーフォームモジュールも考えると「シートモジュール以外」でいいのかもしれない。
(ねむねむ) 2015/03/03(火) 19:06

色々と勉強になりました。
有難う御座いました。
(SAYO) 2015/03/04(水) 09:50

コメント返信:

[ 一覧(最新更新順) ]


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