|
いちおう正規表現でチェックする方法なら、こんな感じになります。
Sub RegExp_Test()
Dim strJuyoka As String
strJuyoka = "My>data*test?"
With CreateObject("VBScript.RegExp")
.Pattern = "(\:|\\|\?|\[|\]|\/|\*)"
.Global = True
If .Test(strJuyoka) Then
MsgBox "ファイル名として正しくない文字があります", 48
Else
MsgBox "OK !"
End If
End With
End Sub
チェックするだけなら以上のように Testプロパティ だけで出来ますが、
見つかった文字をどうしたいか、によって If 構文の中身を増加する
必要があります。具体的には Set Matches = .Excute(strJuyoka)
として見つかった文字を配列に入れ、ループして置換していきます。
残念ながら私は RegExpオブジェクトの Replaceメソッドを使いこなせないので
VBAの Replace関数を使って、以下のようなコードを作ってみました。
Patternプロパティに設定した文字列を、全て削除しています。
Sub RegExp_Test2()
Dim strJuyoka As String, Newstr As String
Dim Matches As Object, Match As Object
Dim SCnt As Integer
strJuyoka = "My*data?tes/t"
With CreateObject("VBScript.RegExp")
.Pattern = "\:|\\|\?|\[|\]|\*|\/"
.Global = True
If .Test(strJuyoka) Then
MsgBox "ファイル名として正しくない文字があります", 48
Set Matches = .Execute(strJuyoka)
SCnt = Matches.Count
For Each Match In Matches
If SCnt = Matches.Count Then
Newstr = Replace(strJuyoka, Match.Value, "")
SCnt = SCnt - 1
Else
Newstr = Replace(Newstr, Match.Value, "")
End If
Next
MsgBox Newstr: Set Matches = Nothing
Else
MsgBox "OK !"
End If
End With
End Sub
ただし「文字を削除するだけ」でいいなら、Replace関数で簡単に出来ます。
即ち・・
Sub Test_Replace()
Dim strJuyoka As String
Dim SAry As Variant
strJuyoka = "My*?da?ta?tes/t"
SAry = Array(":", "\", "?", "[", "]", "*", "/")
For i = 0 To 6
strJuyoka = Replace(strJuyoka, SAry(i), "")
Next i
MsgBox strJuyoka
End Sub
などとするだけです。
|
|