- ベストアンサー
Excel2007VBAシートコピーとマクロ保存
- Excel2007VBAを使用して、複数のシートのファイルから最終シートのみをコピーし、標準モジュールも含んだファイルを保存する方法について教えてください。
- 質問者はVBA初心者であり、マクロの保存がうまくいかない問題に直面しています。質問者が手作業で最終ページを開いた状態で保存を実行していること、拡張子を.xlsxにすると最終シートだけがコピーできるがマクロが保存できないこと、.xlsmにするとエラーが発生すること、.xlsにすると全てのシートがコピーされるがマクロが保存できないことを述べています。
- 回答者は質問者に対して、最終ページを手作業で開かなくても最終シートをコピーする方法を提案しています。また、マクロの保存に関しては、ファイルの保存形式や設定を確認する必要があることを指摘しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
dradra33 様 こんなのでどうでしょう? 特に質問に記載がなかったので「『マクロを実行するブック』の最終ページ(一番右端と解釈しました)を標準モジュール付きで別名保存する」こととして回答します。 それと、結局ファイルの拡張子を何にするのか良く分からなかったのでxlsxにするようにしています。 Sub Tset() Dim s As Worksheet, flname As String '保存ファイル名を取得 flname = "D:\医療週報\VBA試作\" & Format(Date, "yyyy年mm月") 'シート削除時のメッセージを非表示 Application.DisplayAlerts = False '全シートをループ For Each s In ThisWorkbook.Worksheets '一番右のシート番号でなければ削除 If s.Index <> ThisWorkbook.Worksheets.Count Then s.Delete End If Next Application.DisplayAlerts = True '保存 ActiveWorkbook.SaveAs Filename:=flname, FileFormat:=xlNormal 'xlsmが良ければ、FileFormat:=xlOpenXMLWorkbookMacroEnabled とする End Sub
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
>標準モジュールも含んだファイルを保存するには があるため(マクロをコピーしてくるようなことはVBAの初級中級のものが、やる課題で無いと思うので) #1のお答えに賛成。 (1)ブックをコピー (2)コピーで出来たブックの名前を望みのものに設定 (3)最終のシートを1つ残して削除 (4)残った1シートのセル内容を消す(必要なら) ーー 引っかかったのは >最終シート ですシートタブが一番右のシートで良いのか(下記例はこの方)、シート名の名前の上で、日付(の一部)などがシート名の一部についていて、その日付の最終のものなどとなると、コードも増える(変に年を略した月日などにしていると来年分と前後が区別できない)。 心配要らないのかな? >マクロの保存ができません この意味は?。マクロのコードモジュールの別ブックへのコピー法がわからないということか。それを聞いているような質問が昨日今日あったが。 ーー やっていることは サブコードccをつけてコピー保存 ソンブックを開いて最後のシート以外は削除 最後のシートとモジュールは残っていることを確認 した。 これで不都合な点はあるだろうか。相当ケースでテストをしてチェックしてください。 Sub test01() Application.ScreenUpdating = False Application.DisplayAlerts = False Filename = ThisWorkbook.Name MsgBox Filename flnm = Split(Filename, ".")(0) MsgBox flnm & "cc" & ".xls" ActiveWorkbook.SaveCopyAs Filename:=flnm & "cc" & ".xls" Workbooks.Open flnm & "cc" & ".xls" For Each sh In Worksheets MsgBox sh.Name If sh.Index <> Sheets.Count Then MsgBox sh.Name sh.Delete End If Next Application.ScreenUpdating = True Application.DisplayAlerts = True End Sub
お礼
imogasi様 いつもご回答ありがとうございます。 NO.1のご回答と同じくimogasi様の発想方法を 使ってコードを書き直すと私が思っていたことが できるようになりました。
- maverik1226
- ベストアンサー率75% (9/12)
temtecomai2様 No1の回答を見ず、横ヤリ入れたような形になってしまいました。 申し訳ないです。
- temtecomai2
- ベストアンサー率61% (656/1071)
そういうアプローチではなく、 1. ファイル自体を別名でコピーする。 2. 別名でコピーされたファイルを開く。 3. 最終シート以外のワークシートを削除する。 4. 保存して閉じる。 でいいかと。
お礼
temtecomai2様 ご回答ありがとうございます。 ご回答の発想方法を使ってコードを書き直すと 私が思っていたことができるようになりました。
お礼
maverik1226様 ご回答ありがとうございます。 maverik1226様のコードをそのまま使うと 質問に対する答えがそのまま出てきました。 大変助かりました。