プロが教えるわが家の防犯対策術!

すみません
(1)Workbooks(p_addr_Name).Worksheets(sheet_check).Range(Cells(7, 2), Cells(19, 2)).Copy
(2)Workbooks(p_SH_weekly).Worksheets("Sheet1").Range(Cells(7, i), Cells(19, i)).PasteSpecial Paste:=xlPasteAll
その際(2)で「実行時エラー'1004'」が出ました、教えてください。
*上記引数は全部入りました

宜しくお願いします

A 回答 (4件)

こんにちは。



エラー1004 ですよね。ぱっと見で、Range 引数内の親オブジェクト装飾ミス
かなと思います。もちろん、#3 ご回答の可能性もあります。

こちらは NG ソース。

Sub test1_NG()

  Worksheets("Sheet1").Range(Cells(1, 1), Cells(5, 3)).Copy
  Worksheets("Sheet2").Range("A1").Paste

End Sub

1. Range の親オブジェクトとして Worksheets("Sheet1")が装飾されている
2. 一方で Range の引数 Cells(1, 1), Cells(5, 3) には親オブジェクトの
  装飾がされていない。したがって、現在 Active なシートが親オブジェクト
  として自動補完される
  
つまり、現在 Sheet2 がアクティブで、上記ソースが実行された場合、

  Worksheets("Sheet1").Range(Cells(1, 1), Cells(5, 3)).Copy

は、

  Worksheets("Sheet1").Range(Worksheets("Sheet2").Cells(1, 1), _
                Worksheets("Sheet2").Cells(5, 3)).Copy

と同意となる。Range で装飾されたシートと Range の引数内で指示している
セルのシートが異なる不整合が原因です。

VBA では、親オブジェクトを省略した場合、大抵の場合で現在 Active なもの
が親オブジェクトとして補完されます。したがって、親オブジェクトの装飾を
意識的にしないと、このようなエラーに悩まされてしまいます。

こちらは修正ソース。

Sub test2_OK()

  With Worksheets("Sheet1")
    Range(.Cells(1, 1), .Cells(5, 3)).Copy
  End With
  Worksheets("Sheet2").Range("A1").PasteSpecial Paste:=xlPasteAll

End Sub

With で Range の引数内の親オブジェクトを装飾しています。

Range の引数内でシートが異なる等の不整合が無い場合は、特に Range に
親オブジェクトを装飾する必要はありません。
    • good
    • 9

確認してませんが…



コピー元とコピー先で、セルの結合の形式が違っているということはありませんか?
    • good
    • 4

#1です。



ミスしました。

Workbooks(p_SH_weekly).Worksheets("Sheet1").Cells(7, i).PasteSpecial Paste:=xlPasteAll
です。
    • good
    • 1

Workbooks(p_SH_weekly).Worksheets("Sheet1").Cells(19, i).PasteSpecial Paste:=xlPasteAll


とか?
    • good
    • 5

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