#557 ファイル名に使えない文字が含まれていないかチェックする VBA

Windowsには、ファイル名として使えないいくつかの文字があります。エクスプローラでは、そのような文字を入力しようとした時点でチェックが働いて、入力さえできません。
エクスプローラで使えない文字を入力しようとしたとき

しかし、Accessでたとえばユーザーがインプットボックスなどでその都度ファイル名を指定してエクスポートなどを行う場合、インプットボックスの時点では当然チェックされず、エクスポートを実行する時点でエラーが起ります。

そのようなとき、ユーザーによって指定されたファイル名の文字列を事前にチェックするための、ファイル名として使えない文字が含まれていないかどうかを調べるサンプルプロシージャを紹介します。

次の例では、引数としてファイル名を渡します。使えない文字が含まれていたらFalse(NG)を、含まれていなければTrue(OK)を返します。

Public Function ChkFileNameChar(strFileName As String) As Boolean

  Dim avarExcept As Variant
  Dim iintLoop As Integer

  '使用不可の文字を配列に代入
  avarExcept = Array("\", "/", ":", "*", "?", """", "<", ">", "|")

  '配列の文字をひとつずつチェックするループ
  For iintLoop = 0 To UBound(avarExcept)
    'バイナリで配列の文字と照合
    If InStr(1, strFileName, avarExcept(iintLoop), vbBinaryCompare) > 0 Then
      '含まれていたらFalseを返す
      ChkFileNameChar = False
      Exit Function
    End If
  Next iintLoop

  '含まれていなければTrueを返す
  ChkFileNameChar = True

End Function


実行例:
イミディエイトウィンドウでの実行例
「Export.txt」は問題ないのでTrueが返ります。「Export\.txt」には「\」が、また「E/xport.txt」には「/」が含まれているのでFalseが返ります。「E/xport.txt」には「/」が含まれていますが、これは全角なのでファイル名として使えますので、Trueが返ります。


※InStr関数においては、”vbBinaryCompare”を指定する必要があります。これを指定しないと半角・全角の違いがチェックされませんので、「/」も「/」も同じであると判断され、ともにFalseとなってしまいます。
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved