こんにちは、Ryoです。
ファイルを判別する際の1つの手段として「拡張子」がありますので、今回は指定フォルダからファイル一覧を取得し、GetExtensionNameメソッドを利用した拡張子取得や判別などについてサンプルを交えて書いていこうと思います。
1.サンプル概要
サンプルとして準備したフォルダに「txt/xlsx/xlsm/docx/pptx/pdf」の拡張子を持つファイルを準備しています。
ここでのパス情報は「D:\デスクトップ\サンプルフォルダ」になります。

サンプルコードは一例としての動作ですが、指定したフォルダ内のファイル一覧から拡張子を取得しマクロ有効ファイル(xlsm)の有無を判定させています。含まれている場合は警告メッセージを表示させて終了します。

マクロ有効ファイルが含まれていない場合は取得した拡張子一覧をメッセージボックスで表示させます。

以上がサンプル概要になります。
2.サンプルコード
Sub Sample1()
Dim buf, msg As String
Dim cnt As Long
Dim FSO As Object
'ファイルシステムオブジェクトを作成し、
'変数へ代入する
Set FSO = _
CreateObject("Scripting.FileSystemObject")
'対象フォルダのパスを定数指定
Const Path As String = _
"D:\デスクトップ\サンプルフォルダ\"
'Dir関数を利用して指定フォルダ内の
'ファイル名一覧を取得する
buf = Dir(Path)
Do While buf <> ""
cnt = cnt + 1
'取得したファイル名から拡張子を取得し、
'変数msgに書込みを行う
msg = msg + FSO.GetExtensionName _
(Path & buf) + vbLf
buf = Dir()
Loop
'取得したファイル名拡張子一覧の中に
'マクロ有効ファイル(xlsm)が含まれる場合は
'警告メッセージ表示&処理終了
If InStr(msg, "xlsm") <> 0 Then
MsgBox "マクロ有効ファイルが存在します" _
, vbCritical
Exit Sub
End If
'xlsmが検出されない場合はメッセージボックスに
'取得した拡張子一覧を表示する
MsgBox "指定フォルダ内の拡張子一覧" & _
vbLf & msg, vbInformation
End Sub
今回扱うGetExtensionNameメソッドはファイルシステムオブジェクトを利用して行いますので、先ずはSet FSO = CreateObject(“Scripting.FileSystemObject”)としてファイルシステムオブジェクトの作成と変数への代入を実施します。
指定フォルダは定数として変数Pathにセットし、そのPathに対してDir関数でフォルダ内のファイル取得とGetExtensionNameを利用した拡張子の取得を全ファイルに対して行っています。
取得した拡張子は変数msgに改行しながら書き込んでありますので、この変数msgに対してInStr関数で”xlsm”の有無判定を行い、それぞれ処理を分岐させています。(有:警告メッセージ&処理終了/無:拡張子一覧メッセージ表示)
このようにファイルの拡張子を取得するにはGetExtensionNameメソッドを利用します。
構文:オブジェクト.GetExtensionName(path)
GetExtensionNameメソッドは引数pathに指定したパスからファイルの拡張子を取得するものですので、本サンプルではFSO.GetExtensionName (Path & buf)としてDir関数で取得したファイル毎に拡張子を得る形としています。
拡張子によってファイルの種類を判別できるので、用途に応じて選別対応や本例のようにマクロ有無チェックに利用することも可能です。
3.まとめ
拡張子を取得する手段としてはファイル名を取得してからReplace関数を利用して拡張子以外を取り除く方法などもありますので、今回の内容以外の手段でも十分対応は可能です。
処理内容や用途に応じて適した手段は変わっていくものなので、GetExtensionNameメソッドについても知っておくと有用なことも多いですから何か利用機会があればご検討くださいませ。
ちなみにPC側の設定で拡張子を表示しない設定でも、本メソッドを実行することで拡張子を取得することができますので、ご参考までに。
以上、ファイルの拡張子を取得する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo

