VBAでExcel/Accessのバージョンやファイル形式を取得するには
先日、Accessのセミナー講師としてお声がけいただきまして、東京へ行ってまいりました。その終了後の質疑応答にて、複数のPCやファイルでバージョンやファイル形式が違う場合はどのように見分けたら…、という質問をいただいたのですが、こんなふうにできるのでは、という想像でしかお答えできなくて大変申し訳なかったので、ここへ書き残しておきます。
参考
- VBAでExcelのバージョン番号を取得する | Time to live forever
- エクセルファイルのバージョン確認方法は? | 教えて!goo
- 参照設定を行わないでAccessを扱う | あんとんさんち 覚え書き
- C# で mdb のバージョンを調べる : リード開発メモ
- CurrentProject オブジェクト (Access) | Microsoft Docs
これまで、バージョンは2003以前2007以後でざっくり、ファイル形式は拡張子で見分けていたのですが、もっと詳細に調べる方法があるんですね。
ExcelVBAから操作
Excel/Accessのバージョン
'Excelのバージョン MsgBox Application.Version 'バージョンの表示 'Accessのバージョン Dim AcApp As Object Set AcApp = CreateObject("Access.Application") MsgBox AcApp.Version 'バージョンの表示 Set AcApp = Nothing
ファイルの形式
'Excelファイル(現在開いているもの)の形式 MsgBox ThisWorkbook.FileFormat 'ファイル形式の表示 'Excelファイル(指定)の形式 Dim wb As Workbook Set wb = Workbooks.Open("C:\XXX\xxx.xlsm") 'ファイルの指定 MsgBox wb.FileFormat 'ファイル形式の表示 wb.Close 'Accessファイルの形式 Dim AcApp As Object Set AcApp = CreateObject("Access.Application") AcApp.OpenCurrentDatabase "C:\XXX\xxx.accdb" 'ファイルの指定 MsgBox AcApp.CurrentProject.FileFormat 'ファイル形式の表示 Set AcApp = Nothing
AccessVBAから操作
Excel/Accessのバージョン
'Accessのバージョン MsgBox Application.Version 'バージョンの表示 'Excelのバージョン Dim XlApp As Object Set XlApp = CreateObject("Excel.Application") MsgBox XlApp.Version 'バージョンの表示 Set XlApp = Nothing
ファイルの形式
'Accessファイル(現在開いているもの)の形式 MsgBox CurrentProject.FileFormat 'ファイル形式の表示 'Accessファイル(指定)の形式 Dim AcApp As Object Set AcApp = New Access.Application AcApp.OpenCurrentDatabase "C:\XXX\xxx.accdb" 'ファイルの指定 MsgBox AcApp.CurrentProject.FileFormat 'ファイル形式の表示 Set AcApp = Nothing 'Excelファイルの形式 Dim XlApp As Object Set XlApp = CreateObject("Excel.Application") Dim wb As Object Set wb = XlApp.WorkBooks.Open("C:\XXX\xxx.xlsm") 'ファイルの指定 MsgBox wb.FileFormat 'ファイル形式の表示 wb.Close Set XlApp = Nothing
返り値
文字列として返ってきますので、数値として扱いたい場合はCInt
などの型変換が必要です。
Excel/Accessのバージョン
対象 | バージョン |
---|---|
Office 365 | 16.0 |
Office 2019 | 16.0 |
Office 2016 | 16.0 |
Office 2013 | 15.0 |
Office 2010 | 14.0 |
Excelファイルの形式
定数 | 値 |
---|---|
xlExcel7 | 39 |
xlExcel9795 | 43 |
xlExcel8 | 56 |
xlOpenXMLWorkbook | 51 |
xlOpenXMLWorkbookMacroEnabled | 52 |
試してみたところ、昔作って残っていたxlsファイルは56、現在のxlsxは51、xlsmは52でした。ここに引用してるのは一部ですので、ほかはVBEのオブジェクトブラウザで調べられます。
Accessファイルの形式
定数 | 値 |
---|---|
acFileFormatAccess2 | 2 |
acFileFormatAccess95 | 7 |
acFileFormatAccess97 | 8 |
acFileFormatAccess2000 | 9 |
acFileFormatAccess2002 | 10 |
acFileFormatAccess2007 | 12 |
こちらもVBEのオブジェクトブラウザで調べられます。手持ちのファイルでmdbは9、accdbは12でした。(Access2000のときに作ったやつだったんだなー)
以上です! いつも似ている業務、似ているアプリを作っているとなかなか自分ではチャレンジできない視点というものもありまして、こういう機会があって私も勉強になります。
当日は激しい雨だったにもかかわらず足をお運びくださった方、ありがとうございました!
ExcelVBAに興味をお持ちの方は、こちらの記事もどうぞ!
- これからExcelのマクロを始めたいという方に!簡単な練習問題作りました。
- 私がExcelVBAでよく使う便利なコード・スニペットまとめ
- プログラム初心者さんへ贈る、エラーが起きたら試してみて欲しいこと
- ExcelVBAのクラスモジュールって何?という人向けの使い方まとめ
書籍を執筆しています。
コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)
YouTubeでQ&Aコンテンツを企画しています
運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。