|
▼Hirofumi さん:
>こんなので善いのかな?
>TextBox1は、不正な文字を"_"に置き換えます
>TextBox2は、不正な文字を反転表示し、警告を出します
教えて頂いたロジックを参考に実行しました。
思った通りの処理になりましたが、私のVBA理解レベルではメンテナンス発生時に苦労しそうです。
もう少し理解・知識を深めたらこのロジックを使ってみたいと思います。
ありがとうございました。
>
>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
|
|