- ベストアンサー
VBAのCopyメソッドが中断する
- VBAで作成したマクロで、INPUTファイルのシートをコピーしてOUTPUTファイルを作成し、シートの内容を編集して保存する処理を行っています。しかし、Copyメソッドの途中で処理が中断してしまう現象が発生しました。同僚やマイクロソフトのサポートページを調べた結果、原因や回避策がわかりませんでした。この現象の原因や回避策について知っている方がいらっしゃれば、ご教示いただきたいです。
- 回避策として、Copyメソッドを使用せずにセル全体を選択し、コピーして新しいブックに貼り付ける方法を考えています。しかし、この方法だとコピー元のファイルに設定しているセル名が引き継がれません。セル名を引き継ぎつつコピーする方法があるのかどうか知りたいです。
- バージョンはExcel97とofficeXPです。この現象の原因を特定することができず、困っています。どなたかご存知の方がいらっしゃれば、ぜひ教えていただきたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
経験則なので当てはまるか不明ですが、、 Excel97だと下記のようにシートにActiveXコントロールのCommandButtonを置いてそこから実行している場合失敗します。 Private Sub CommandButton1_Click() Worksheets(1).Copy End Sub ヘルプの「シートで ActiveX コントロールを使用する」によれば「ActiveX コントロールをアクティブにすると、使用不能になる Visual Basic のメソッドやプロパティがあります。たとえば、Sort メソッドは、コントロールをアクティブにすると使用できません。」とあり、回避策として下記のようにコントロールからフォーカスを奪ってやると成功します。 Private Sub CommandButton1_Click() ActiveCell.Activate Worksheets(1).Copy End Sub また、Excel97だと下記のようにシートを最初のコピー元からではなく、コピーからコピーを作るやり方をして同一ブックに納めていくとそのうち失敗します。 Sub Test() '失敗する For i = 0 To 50 ActiveSheet.Copy after:=ActiveSheet Next i End Sub これはワークシートのオブジェクト名が「Sheet1111111111」のようになってしまうのが原因で絶えず最初のシートからコピーをすると回避出来ます。 Sub Test1() '成功する For i = 0 To 50 Worksheets(1).Copy after:=ActiveSheet Next i End Sub 参考になれば。