ExcelVBAの互換性−VBAから「マクロ有効ブック」として保存する

Excel2007からマクロを含むブック、含まないブックで拡張子が変わってしまった。
2003VBAで書いたブックをExcel2007で使用する際、VBAからブックを保存させるにあたり不具合が生じていた。
単にGetSaveAsFilenameメソッドの中でFileFilterに.xlsmと明示するだけでは保存できなかった。結果的にはSaveAsメソッドでFileFormatを明示することで解決。
Kazzzの日記『Office 2007で問題になるマクロの後方互換性』(参照)を参考に。

通常Excel 2007で使うXlFileFormat列挙体の定数

51 = xlOpenXMLWorkbook (without macro's in 2007, xlsx)
52 = xlOpenXMLWorkbookMacroEnabled (with or without macro's in 2007, xlsm)
50 = xlExcel12 (Excel Binary Workbook in 2007 with or without macro’s, xlsb)
56 = xlExcel8 (97-2003 format in Excel 2007, xls)

ここで
FileFormat:=XlFileFormat.xlOpenXMLWorkbookMacroEnabled
とするとExcel2003とかだとコンパイルエラーになるので、定数で。
Excelのバージョンチェックの返り値は文字列だそうで、勝手に数値にしてくれるだろうと思いきや2003ではよかったもののExcel2000では判定できず。型は整えたほうが無難。

Sub Save()

If CInt(Application.Version) < 12 Then
XPath = Application.GetSaveAsFilename(, "Excelファイル(*.xls),*.xls")
If XPath = "False" Then Exit Sub
ThisWorkbook.SaveAs Filename:=XPath

Else
XPath = Application.GetSaveAsFilename(, "Excel マクロ有効ブック(*.xlsm),*.xlsm")
If XPath = "False" Then Exit Sub
ThisWorkbook.SaveAs Filename:=XPath, FileFormat:=52

End If

End Sub