0

ここから行を追加する前に、私がすでに持っているものを示すために質問を更新しています...

Function CleanName(strName As String) As String
'will clean part # name so it can be made into valid folder name
'may need to add more lines to get rid of other characters

    CleanName = Replace(strName, "/", "")
    CleanName = Replace(CleanName, "*", "")
    CleanName = Replace(CleanName, ".", "")
    CleanName = Replace(strName, "\", "")

End Function
4

4 に答える 4

7

複数の文字列置換ではなく、正規表現を使用できます

Function KillChars(strIn As String) As String
Dim objRegex As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.Global = True
.Pattern = "[\/\*\.\\""""]+"
KillChars = .Replace(strIn, vbNullString)
End With
End Function
于 2012-09-25T00:25:38.987 に答える
4

アップデート

マット、更新された投稿で、コードを次のように変更します。

Function CleanName(strName As String) As String
'will clean part # name so it can be made into valid folder name
'may need to add more lines to get rid of other characters

    CleanName = Replace(strName, "/", "") '-> only use strName the first time, since you are passing that string to the Function
    CleanName = Replace(CleanName, "*", "")
    CleanName = Replace(CleanName, ".", "")
    CleanName = Replace(CleanName, "\", "") '-> if you use strName here, you lose your first 3 replacments
    CleanName = Replace(CleanName, """", "") '-> this is the correct syntax to remove the "
    '-> to Sid's point, this should work too
    'CleanName = Replace(CleanName, Chr(34), "")

End Function

他の人が答えているので、コメントを答えに変更してパーティーに参加します!

試す

CleanName = Replace(CleanName, """", "")

引用符を二重引用符で囲み、VBA が自動的に認識する特殊文字ではなく、実際の実際の引用符を探したいことを VBA に伝える必要があります。 (以下のダニエル・クックのコメントもそれに触れています。)

他のユーザーのために、CleanName は不要な文字列を消去するカスタム関数です。詳細については、次のリンクを参照してください: CleanName

于 2012-09-24T18:23:17.920 に答える
3

これをモジュールに貼り付けます

Public Function CleanName(rng As Range) As Variant
    CleanName = Replace(rng.Value, Chr(34), "")
End Function

ファローアップ

Option Explicit

Public Function CleanName(rng As Range) As Variant
    On Error GoTo Whoa

    Dim vVal As Variant

    vVal = rng.Value
    vVal = Replace(vVal, Chr(34), "") ' "
    vVal = Replace(vVal, Chr(42), "") ' *
    vVal = Replace(vVal, Chr(46), "") ' .
    vVal = Replace(vVal, Chr(47), "") ' /
    vVal = Replace(vVal, Chr(92), "") ' \

    CleanName = vVal
Whoa:
End Function
于 2012-09-24T18:18:05.800 に答える
3

ここに代替案があります:)

Option Explicit

    Function CleanName(ByRef str As String) As String
    Dim removeChars As String
    Dim i As Long
        removeChars = "/*."""

        For i = 1 To Len(removeChars)
            str = Replace(str, Mid(removeChars, i, 1), vbNullString)
        Next i
        CleanName = str

    End Function

そしてテストする

Sub Test()
Dim messyString As String

    messyString = "/*It Works!""."
    Debug.Print CleanName(messyString)

End Sub
于 2012-09-24T19:21:45.977 に答える