[[20170213123059]] 『xlsbファイルで保存したい』(りく) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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 >


ファイル形式を指定しないと駄目ですよ。Workbook.SaveAsメソッドのヘルプを読みましょう。
または、マクロの自動記録で、手作業で保存する手順を記録させると、FileFormat:=xlExcel12 という指定があることが判るでしょう。
(???) 2017/02/13(月) 13:04

???様、ありがとうございます。

その場合、式のどの部分に
FileFormat=xlExcel12
を入れればいいのでしょうか?

無知で申し訳ありません。。
(りく) 2017/02/13(月) 15:10


 ???さんの助言の
 >Workbook.SaveAsメソッドのヘルプを読みましょう。
 はやってみたか?
(ねむねむ) 2017/02/13(月) 15:55

知らない事は罪ではありませんが、自分で調べないのは罪ですよ。 調べ方を書いたのですが、試しましたか?
コメントより前に、カンマを付けてから記述してみてください。

やってみたけれどうまくいかない、とかならば、ファイル名のフルパスが正しいか、ステップ実行と変数内容確認で調べてみてください。\ が抜けていたりしませんか? こういうデバッグ作業は、間違いが見つかるまで自分でやるものですよ。
(???) 2017/02/13(月) 15:56


ちゃんと調べましたし試しました。
>Workbook.SaveAsメソッドのヘルプ
まだ始めたばかりで知識が乏しく、調べても記載されている内容が理解できませんでした。
上記の式のあらゆるところにいれましたが全てエラーでした。
何度も試してうまくいかなかったので質問したんです。

お手間取らせて申し訳ありませんでした。
もう少し勉強して、自力で頑張ります。
(りく) 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.