[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『vbaの記述について』(もも)
vbaの記述についてご質問です。
セルの値を参照し、その文字をファイル名にして、指定した場所に保存するというマクロを組んでいます。
式は下記です。
Sub 指示書()
ActiveWorkbook.SaveAs Filename:="\\TS-HTGL512\share\指示待ち\01.見積\" & Range("M50").Value & ".xls"
End Sub
この式で問題なく動作しているのですが、保存したデータを開いたとき、「ファイル形式と拡張子が一致しません・・・・」のアナウンスが毎回出ます。
xlsで保存しているせいかと思います。
xlsxで保存すればアナウンスが出ないのかと思いますが、最後の拡張子をxlsxに変えるとコンパイルエラーになります。
どのような記述にすればいいか、ご教授ください。
< 使用 Excel:Excel2016、使用 OS:Windows10 >
(マナ) 2018/06/26(火) 18:05
(マナ) 2018/06/26(火) 19:50
ありゃ。 言われてみれば、今まで拡張子無しのFileFormatだけ指定でSaveAsしてました。わたくし。 普通に手動で[名前を付けて保存]する時(Excelに限らず)と同じ感覚で。 何の疑いもなく...
一般的ではないですかね? (何か不都合なパターンとかあるのかな?) みなさんどうされてます?
(白茶) 2018/06/26(火) 21:22
(もこな2) 2018/06/27(水) 01:10
(隠居じーさん) 2018/06/27(水) 11:11
私は基本的に作成依頼に応じるつもりがないのでヒントと擬似コードだけ。
【ヒント】
http://officetanaka.net/excel/vba/file/file09.htm
https://kokodane.com/macro20.htm
【擬似コード】
マクロスタート 保存したいブック.名前をつけて保存する命令 _ Filename:=保存先+ブック名(フルパス), _ FileFormat:=xlExcel8 マクロ終了
(もこな2) 2018/06/27(水) 11:23
ごめんなさい。えらく間を空けてしまいました。
もこな2さん、お返事ありがとうございます。 >よくやりますね。 ってことで安心しました^^;
ももさん、質問そっちのけで勝手にスレお借りしてしまう結果になってしまい、申し訳ありませんです。 既に今更?って感じなので、これ以上は必要ないとは存じますが、一応FileFormatについてだけ、
xlFileFormat列挙型 _名前_________________________|_値_|_ファイル形式(拡張子)__________ xlOpenXMLWorkbook | 51 | Excel ブック(*.xlsx) xlOpenXMLWorkbookMacroEnabled | 52 | Excel マクロ有効ブック(*.xlsm) xlExcel12 | 50 | バイナリファイル形式(*.xlsb) xlExcel8 | 56 | Excel 97-2003 ブック(*.xls)
たちまちは、こんだけ把握しておけば大丈夫なんじゃないかな? と思います。
(白茶) 2018/06/27(水) 17:20
Sub 実験() Const 保存フォルダ As String = "D:\てすと\"
Application.DisplayAlerts = False
ThisWorkbook.SaveAs _ Filename:=保存フォルダ & "フォーマット指定なし"
ThisWorkbook.SaveAs _ Filename:=保存フォルダ & "▲4143", _ FileFormat:=xlWorkbookNormal
ThisWorkbook.SaveAs _ Filename:=保存フォルダ & "51", _ FileFormat:=xlWorkbookDefault
ThisWorkbook.SaveAs _ Filename:=保存フォルダ & "52", _ FileFormat:=xlOpenXMLWorkbookMacroEnabled
Application.DisplayAlerts = True
End Sub
そうしたところ、
フォーマット指定なし.xlsx・・・・・マクロなし ▲4143.xls・・・・・・・・・・・・・マクロあり 51.xlsx・・・・・・・・・・・・・・マクロなし 52.xlsm・・・・・・・・・・・・・・マクロあり
となりました。
ですので、保存対象となるブックに記述したマクロが要らない(そもそもブックにマクロがついてない)なら「FileFormat」を指定しなくても、拡張子を省略さえすればデフォルトの形式(変更してなければxlsx)で保存されるみたいですね。
逆に、マクロも保存する必要があるなら、FileFormatでちゃんとマクロが保存できる形式を指定してあげないとダメってことのようです。
ちなみに、よく質問をみるとxlsxにしたらコンパイルエラーになったっておっしゃってるのがちょっと不思議です、
「ファイル形式と拡張子が一致しません」はそのまま、xlsx形式で保存されてるのに、拡張子がxlsになってるからでしょうけど、保存時に拡張子と保存形式が一致してないと構文エラーになるという仕組みはないとおもうので、拡張子をxlsxにしたらコンパイルエラーになったってのはよくわからないですね。
(最初に提示された「FileFormat」が省略されたコードであれば、エラーになるとしたら、xlsx形式で保存しようとして、マクロ消えちゃうけどいい?ってExcel君が聞いてきて、ユーザーがダメって返したときに、saveAsメソッドが失敗して実行時エラーが発生するタイミングじゃないかとおもいます。
そうなると、マクロが動くってことは構文はおかしくないので、コンパイルエラーってなんでかなぁと・・・)
この辺のことは私のスキルだと解らないのでさらなる識者をおまちください。
白茶さんがよく使う保存形式を提示されてますが、一覧があったほうがいいかなとおもったのでリンク貼っておきます。
【参考】
https://msdn.microsoft.com/ja-jp/vba/excel-vba/articles/xlfileformat-enumeration-excel
擬似コードも、ちょっと修正です。
【擬似コード】(修正)
マクロスタート Application.DisplayAlerts = False
保存したいブック.上書保存する命令 _ Filename:=保存したいフォルダ+ブック名(←拡張子は付けない), _ FileFormat:=〜〜〜〜
Application.DisplayAlerts = True マクロ終了
(xlCSV、xlWorkbookDefault、xlOpenXMLWorkbookMacroEnabledくらいしか普段使わないので気にしてなくて、xlWorkbookNormalがxls形式って今日初めて知りました。
良い勉強の機会になりました。ありがとうございます。)
(もこな2) 2018/06/27(水) 21:00
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.