- ベストアンサー
エクセルのシートのコピー方法について
- エクセルのシートのコピーをVBAで行いたいがエラーが発生してしまう。どこが間違っているのか教えてください。
- 貼り付けというブックにはマクロが組まれており、データのブックにあるシート名が貼り付けのブックのリストのシートに記載されています。リストのシートに書かれたシートを貼り付けのブックにコピーしたいです。
- VBAのサブルーチン「シートコピー」を使って、リストに書かれたシートを貼り付けのブックにコピーすることができます。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
こういうコードをあたしゃあまり書かないので。 コードは短きゃいいってもんじゃないと思ってるから・・・。 ということで、多分 Workbooks("データ.xls").Activate Sheet(コピー元).Activate Cells.Copy Workbooks("貼り付け.xls").Activate Sheets.Add After:=Sheets(Sheets.Count) Cells.Select ActiveSheet.Paste と、素直に分解すれば動くんじゃないかしら。 多分Copyコマンドでそのままブックを渡った処理が 出来ないんじゃないかと思うので。逆にこれで動かな けりゃ、ステップ実行すればどこで止まったかわかるし。
その他の回答 (2)
- FEX2053
- ベストアンサー率37% (7991/21371)
「実行エラー438」で検索すればこんなのが出て来ます。 http://officetanaka.net/excel/vba/error/execution_error/error_438.htm 要は、そんなコードは無いって話で、書いてあるコードの どれかが「実際には無い」ものだった・・・って話です。 私の書いたコードで、同じエラーが出れば「Do Until」が 直接原因ですが、多分原因はそっちじゃないでしょう。 もっとも「Do Until」にも問題があるのは自明ですが、 それではこのエラーは出ないと思いますので。 エラーするなら、コードは分解して、1ステップずつチェック。 これ、コーディングの原則ですよ。
お礼
返事が遅くなってしまってすみません。 >エラーするなら、コードは分解して、1ステップずつチェック。 これ、コーディングの原則ですよ。 おっしゃる通りです。 問題の箇所を見直したところ、動いてくれました。 ありがとうございました。
- x-1919
- ベストアンサー率52% (91/173)
コードがものすごくわかりづらいけれど、 > Do Until IsEmpty(Cells(行数, 3).Value) たぶんこれが原因だと思う。 ここで言っている "Cells" がどのブックのどのシートの "Cells" として処理されるかご存知か? おそらくあなたがイメージしているブック & シートとは違うところにあるセルを読み込もうとしているのだと思う。 その結果、コピー対象となるシート名じゃない値が変数 "コピー元" に入ってしまい、存在しない名前のシートをコピーしようとしてエラーになる、と。
お礼
回答ありがとうございます。 分からないことが多々あるので、もう一度基礎から勉強しないといけないと改めて思いました。 Do Until IsEmpty(Cells(行数, 3).Value) 指摘をうけたこの部分ですが、一度消して繰り返しなしで、cells(2,3)のシート名がコピー出来るかテストしたところ、別の箇所でとまりました。 コピー元 = Workbooks("貼り付け.xls").Worksheet("リスト").Cells(行数, 3) ここで実行エラー438と出ました。 変数に出来ないのでしょうか?ちなみにエクセル2000です。 よろしくお願いします。
お礼
回答ありがとうございます。 短ければいいというものではないのですね。 今度からは気をつけます。 コピー元 = Workbooks("貼り付け.xls").Worksheet("リスト").Cells(行数, 3) この部分で実行エラーになってしまうのですが、間違った書き方してますでしょうか? よろしくお願いします。