[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『xlsbファイルで保存したい』(りく)
こんにちは。
初心者なのですが、掲示板等を拝見しながら下記のような式にて
各シートを新しいブックに保存しています。
Sub 各シートをブックに保存()
junnbi = MsgBox("各シートをブックにしますか?")
If junnbi = vbCancel Then 'キャンセルの場合 MsgBox "キャンセルしました" Exit Sub 'マクロを終了します End If
Const path As String = "D:\作業用\" '\まで記述
Dim bk As Workbook
Set bk = ActiveWorkbook
Dim st As Worksheet
For Each st In bk.Sheets
Workbooks.Add
st.Copy Before:=ActiveWorkbook.Sheets(1)
ActiveWorkbook.SaveAs path & st.Name & ".xlsx" 'シート名でブック保存
ActiveWorkbook.Close
Next
MsgBox "ブック作成が完了しました"
End Sub
これをxlsxではなくxlsbのバイナリーブック形式で保存したいのですが
単純にxlsxの部分を変えてもエラーになってしまいます。
何か不足しているのか、この式の中でxlsxに指定してしまっているのでしょうか?
ちなみに元ファイルはxlsxとxlsbと2つバージョンがあります。
どちらの拡張子にも対応できるようになりますでしょうか?
< 使用 Excel:Excel2010、使用 OS:Windows7 >
その場合、式のどの部分に
FileFormat=xlExcel12
を入れればいいのでしょうか?
無知で申し訳ありません。。
(りく) 2017/02/13(月) 15:10
???さんの助言の >Workbook.SaveAsメソッドのヘルプを読みましょう。 はやってみたか? (ねむねむ) 2017/02/13(月) 15:55
やってみたけれどうまくいかない、とかならば、ファイル名のフルパスが正しいか、ステップ実行と変数内容確認で調べてみてください。\ が抜けていたりしませんか? こういうデバッグ作業は、間違いが見つかるまで自分でやるものですよ。
(???) 2017/02/13(月) 15:56
お手間取らせて申し訳ありませんでした。
もう少し勉強して、自力で頑張ります。
(りく) 2017/02/13(月) 16:15
実際にどのようにしたかをコピーして貼り付けてみてくれ。 (ねむねむ) 2017/02/13(月) 16:24
ありがとうございます。別サイトを参考に、下記にて成功しました。
お手数をおかけしました。
Sub 各シートを各ブックに保存()
junnbi = MsgBox("各シートをブックにしますか?")
If junnbi = vbCancel Then 'キャンセルの場合 MsgBox "キャンセルしました" Exit Sub 'マクロを終了します
End If 'if文終わり
Const path As String = "D:\作業用\" '\まで記述
Dim bk As Workbook
Set bk = ActiveWorkbook
Dim st As Worksheet
For Each st In bk.Sheets
Workbooks.Add
st.Copy Before:=ActiveWorkbook.Sheets(1)
ActiveWorkbook.SaveAs path & st.Name & ".xlsb", FileFormat:=xlExcel12 ' FileFormat:=xlExcel12はバイナリーブック
ActiveWorkbook.Close
Next
MsgBox "ブック作成が完了しました"
End Sub
(りく) 2017/02/13(月) 16:33
> ActiveWorkbook.SaveAs path & st.Name & ".xlsb", FileFormat:=xlExcel12 ' FileFormat:=xlExcel12はバイナリーブック どこで遠回りしたのか判りませんが、結果的には私が書いたように、「コメントより前に、カンマを付けてから記述」したようですね。
引数の指定の仕方を説明しておきます。まず、Workbook.SaveAsメソッドのヘルプには、以下のように構文説明されています。
式.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)
これは、1つ目の引数はFileNameで、2つ目がFileFormat、以下3つ目、4つ目…という事を示しています。
次に、マクロの自動記録を行ってから「名前を付けて保存」でxlsbを選んだ場合、以下のようなコードが生成されます。
ActiveWorkbook.SaveAs Filename:="C:\Users\ユーザー名\Documents\Book1.xlsb", _ FileFormat:=xlExcel12, CreateBackup:=False
1番目、2番目ではなく、コロンで区切って引数の名前で代入もできるという事が判ります。
引数の何番目、という書き方で今回のコードを書くと、以下になります。
ActiveWorkbook.SaveAs path & st.Name & ".xlsb", xlExcel12,,,, False
バックアップを作るかどうかは標準のままで良いでしょうから省略すると、以下でOK。
ActiveWorkbook.SaveAs path & st.Name & ".xlsb", xlExcel12
自動記録結果のように、引数名で指定するならば、以下。
ActiveWorkbook.SaveAs Filename:=path & st.Name & ".xlsb", _ FileFormat:=xlExcel12, CreateBackup:=False
最初に混ぜる指定を教えておいて何ですが、どちらかに統一したコーディングにするのが、美しいと言えます。他のVBA命令も同様ですので、覚えておきましょう。
(???) 2017/02/13(月) 18:22
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.