- 締切済み
VBAで別ブックからの貼付
XP、EXCEL2007を使用しています。 元ファイル(A)からVBAで他のブック(B)を開き、A~CK列データをコピー後 ファイル(A)のA~CK列に貼り付けるコードを作りました。 しかし下記の★がついている2行がエラーでうまくいきません。 改善するにはどうすれば良いかご教授下さい。 色々調べながらくっつけたコードですので、 だいぶ問題があると思います。 エラーコードは 「オートーメーションエラーです。」 「致命的なエラーです。」 Sub DATEOPEN() Dim OpenFileName As Variant With CreateObject("WScript.Shell") .CurrentDirectory = "\\Landisk\disk\テスト\" End With OpenFileName = Application.GetOpenFilename("xlsファイル (*.xls),*.xls", 1, "ファイルを選択") If OpenFileName <> "False" Then If Trim(Dir(OpenFileName)) = "" Then Call MsgBox("ファイルが見つかりません", vbOKOnly, "確認") Else Workbooks.Open OpenFileName ★ActiveSheet.Range("A:CK").Copy _ ★ThisWorkbook.Worksheets("データ貼付").Range("A:CK") ActiveWorkbook.Close Range("A:CK").Select ActiveSheet.Paste ActiveWorkbook.Saved = True Application.CutCopyMode = False End If End If End Sub
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- queuerev2
- ベストアンサー率78% (96/122)
実験してみたところ、コードを置く場所(モジュール)によって結果が異なるようで、エラーが出る条件はあるのですが質問者様と同じエラーは再現できませんでした。 環境はWindows XP SP3, Excel 2003です。 (当方はネットワークストレージを持っていないので "\\Landisk\disk\テスト\" → "."としました。) まず標準モジュールで実行したところ、★のところではエラーが出ずに後の方の「ActiveSheet.Paste」でエラーが出ました。そこでその行はコメントアウトしました。(以降この行はコメントアウトしたままです) 次にシート「データ貼り付け」(Sheet1)移してみました。すると、シート「データ貼り付け」がアクティブな状態で実行すると正常に終了するのですが、Sheet2がアクティブだと 「実行時エラー '1004': アプリケーション定義またはオブジェクト定義のエラーです」 と出て中断モードにも入らず停止しました。このエラーは「Range("A:CK").Select」のところで出ていることがわかったので、この行もコメントアウトしたところSheet2がアクティブでも正常に動作しました。 コードをSheet2に移しても、Sheet2がアクティブでない場合に上記と同じく停止しました。 (ちなみにThisworkbookに移すと、開いたファイルからは何もコピーされずにマクロのあるブック内部でのコピーになりましたが、これはコードの変更で対応可能です。) もし質問者様がコードをシートに置いているなら、試しに標準モジュールに移してみてはいかがでしょうか。
お礼
早々にご回答頂きありがとうございます。 コード自体は、標準モジュールに記載しているのですが、 思った様に希望のシートがアクティブになってくれないみたいです。 もう少し調べてみようと思います。