VBAなんだかんだ その3 新しく作ったブックにシートをコピーして保存して閉じる
やりたいこと
「Workbooks.Add」で新規に作ることができ、
vba-belle-equipe.hatenablog.com
vba-belle-equipe.hatenablog.com
ができるようになったので、そこまでを通しでいってみましょう。
つなげて書いてみる
Sub test() Workbooks.Add Workbooks("コピー元.xlsx").Worksheets(1).Copy After:=Workbooks("Book2").Worksheets(1) Workbooks("Book2").SaveAs Filename:="C:\test\test.xlsx" Workbooks("Book2").Close End Sub
どうでしょうか。
テスト
インデックスが有効範囲にありません。
おや。例のやつですね。
よく見ると、新規に作ったブックが「Book1」になっています。
2回目に作ったら「Book2」になるようですが、書き方を考えないといけませんね。
新規作成したブックを指定する
「workbooks.addしたブックの名前を取得」あたりで検索しましょう。
Dim wb As Workbook Set wb = Workbooks.Add 'ブックの名前= wb.name
作成すると同時に変数に入れるか
Dim wbName As String Workbooks.Add wbName = ActiveWorkbook.Name 'ブックの名前= wbName
作成されたものを「ActiveWorkbook」で指定することもできるみたいですね。
やり直し
Sub test() Dim wb As Workbook Set wb = Workbooks.Add Workbooks("コピー元.xlsx").Worksheets(1).Copy After:=Workbooks(wb.name).Worksheets(1) Workbooks(wb.name).SaveAs Filename:="C:\test\test.xlsx" Workbooks(wb.name).Close End Sub
と、
Sub test() Workbooks.Add Workbooks("コピー元.xlsx").Worksheets(1).Copy After:=ActiveWorkbook.Worksheets(1) ActiveWorkbook.SaveAs Filename:="C:\test\test.xlsx" ActiveWorkbook.Close End Sub
どっちもいけますね。
シートの位置が気になる
いけました、が、
ファイルの名前 | シート | |||
---|---|---|---|---|
test.xlsx | Sheet1 | コピー元1 | Sheet2 | Sheet3 |
なんとなくシートが入る位置に違和感がありますね。
Worksheets(1).Copy After:=Worksheets(0)
インデックスが有効範囲にありません。
さすがにダメですか。
完成
ということで、
Sub test() Workbooks.Add Workbooks("コピー元.xlsx").Worksheets(1).Copy Before:=ActiveWorkbook.Worksheets(1) ActiveWorkbook.SaveAs Filename:="C:\test\test.xlsx" ActiveWorkbook.Close End Sub
「新しく作ったブックにシートをコピーして保存して閉じる」をクリアです。