|
こんなので善いのかな?
TextBox1は、不正な文字を"_"に置き換えます
TextBox2は、不正な文字を反転表示し、警告を出します
Option Explicit
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
With TextBox1
If .Text <> "" Then
.Text = NameLetter(.Text)
End If
End With
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
Dim lngPos As Long
With TextBox2
If .Text <> "" Then
lngPos = LetterCheck(.Text)
If lngPos > 0 Then
Cancel = True
.SelStart = lngPos - 1
.SelLength = 1
MsgBox Mid(.Text, lngPos, 1) & "の文字が不正です", vbInformation
End If
End If
End With
End Sub
Private Function NameLetter(ByVal strName As String) As String
' ファイル名のチェック
Dim i As Long
Dim vntLetter As Variant
Dim lngPos As Long
'ファイル名として使用不可能な文字の一覧を作成
vntLetter = Array(":", "\", "?", "[", "]", "/", "*")
'一覧全てに就いて
For i = 0 To UBound(vntLetter, 1)
'引数の文字列に一覧の文字が含まれるか探索
lngPos = InStr(1, strName, vntLetter(i), vbTextCompare)
'引数の文字列に一覧の文字が無くなるまで繰り返し
Do Until lngPos = 0
'有る場合、"_"に置換
strName = Left(strName, lngPos - 1) _
& "_" & Mid(strName, lngPos + 1)
'引数の文字列に一覧の文字が含まれるか探索
lngPos = InStr(1, strName, vntLetter(i), vbTextCompare)
Loop
Next i
'戻り値として、置換後の文字列を返す
NameLetter = strName
End Function
Private Function LetterCheck(strName As String) As Long
Dim i As Long
Dim vntLetter As Variant
Dim lngPos As Long
'ファイル名として使用不可能な文字の一覧を作成
vntLetter = Array(":", "\", "?", "[", "]", "/", "*")
'一覧全てに就いて
For i = 0 To UBound(vntLetter, 1)
'引数の文字列に一覧の文字が含まれるか探索
lngPos = InStr(1, strName, vntLetter(i), vbTextCompare)
If lngPos > 0 Then
Exit For
End If
Next i
'戻り値として、不正文字の位置を返す
LetterCheck = lngPos
End Function
|
|