こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

Excel2007 VBA Copyメッソド

Excel2003で開発されたVBAをExcel2007で動くように修正しているのですが、
次のコードがExcel2007ではエラーになります。

 (1)Workbooks.Open Filename:=pthFolder & "\" & nmFile
 (2)nmSheet = Workbooks(nmFile).ActiveSheet.Name
 (3)Workbooks(WB_Name).Worksheets(S_MAIN).Copy After:=Workbooks(nmFile).Sheets(nmSheet)

(1)と(2)は実行されますが、(3)がエラーになり、(4)に飛びます。

(4) SaveError:
     MsgBox "エラー発生"
     Application.DisplayAlerts = False
     Workbooks(nmFile).Close
   End Sub

どなたか、Excel2007でエラーになる理由と解決策を教えていただけないでしょうか。

既に同じ質問が出ているかもしれませんが、VBA初心者なもので、うまく探せませんので、
ご協力をお願いいたします。

投稿日時 - 2011-11-09 22:10:34

QNo.7123768

すぐに回答ほしいです

質問者が選んだベストアンサー

色々原因は考えられるけど、2003でそれまで正常に動作していたことを考慮すると、
文法上のエラーは考えにくいですね。気になるのはコピー元とコピー先のワーク
ブックの作成したエクセルのバージョンです。
WB_Nameが2007のブックでnmFileが2003のブックだとするとエラーになりますが
これが原因? まず
>MsgBox "エラー発生"
を MsgBox Err.Number & " " & Err.Description に変更して、エラー番号と
エラーの原因を出力してみたらどうでしょう?
または、コピー先を2007で保存しなおしたファイルに変更してみては?

投稿日時 - 2011-11-09 23:25:55

お礼

大変わかりやすい対処方法を教えていただき、ありがとうございました。

今回は、コピー元がExcel2007、コピー先がExcel2002であり、MsgBoxを表示したところ「1004」のメッセージが表示されました。
また、コピー先をExcel2007に変更したところ、シートを追加することができました。

ありがとうございました。

投稿日時 - 2011-11-14 19:31:42

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.3

質問には簡略化して、要点を書くことは必要だが、やりすぎると、読者にはよくわからなくなったり、追試が出来なくなる。
2003以前で
Sub test01()
pthFolder = CurDir
MsgBox pthFolder
nmFile = "01化.xls"
Workbooks.Open Filename:=pthFolder & "\" & nmFile
nmSheet = Workbooks(nmFile).ActiveSheet.Name
MsgBox nmSheet
WB_name = "01化B.xls"
S_MAIN = "Sheet1"
Workbooks.Open Filename:=pthFolder & "\" & WB_name
Workbooks(WB_name).Worksheets(S_MAIN).Copy After:=Workbooks(nmFile).Sheets(nmSheet)
End Sub
をやるとうまく行く。
わたしの場合、 "01XX.xls"と "01XXB.xls"は存在しSheet1という名のシートも存在する例。
ーー
Workbooks.Open Filename:=pthFolder & "\" & WB_name
が必要(オープンしておくことが)のようだ(当たり前だが)。
その辺大丈夫ですか。
====
Googleで「2003 2007 シートコピー」で照会すると沢山の記事が出ます。
めぼしいものを読んでみて、思い当たる節が無いか考えてみてください。

投稿日時 - 2011-11-10 09:35:58

ANo.1

思い当たること
1.WB_Nameが.xlsxのEXCELファイル(2007用)で、
nmFileが.xlsのEXCELファイル(97-2003互換)だと、
最終行の行番号がちがうのでエラーになる。

2.(2)と(3)の間で、
Workbooks(WB_Name).Activate
を実行してみてください。
EXCEL2007はコピー元のBookをActiveにしておかないとエラーになったような。
(記憶が定かでないのと手元には2003しかなく確認できないので。)

投稿日時 - 2011-11-09 22:56:51

あなたにオススメの質問