VBA如何修复字符串的错误以特殊字符开头

时间:2017-08-11 13:38:28

标签: excel vba excel-vba

我在VBA中相当新,我正在开展一个项目,我面临的问题很小。我将newLastCmtTypeCol,newLastCmtCol,newLastNoteCol,oldLastCmtTypeCol,oldLastCmtCol,oldLastNoteCol作为字符串,我只在这部分代码中调用它们。所以当其中一个字符串以特殊字符开头时发生错误。我正在从工作表中获取大量数据。我绝对无法一直查看所有数据。我只是想忽略字符串以特殊字符开头,所以我不会看到任何错误。这是代码的一部分。

Dim newLastCmtTypeCol As String

Dim newLastCmtCol As String
Dim newLastNoteCol As String

Dim oldLastCmtTypeCol As String
Dim oldLastCmtCol As String
Dim oldLastNoteCol As String

newLastCmtTypeCol = "N"
newLastCmtCol = "O"
newLastNoteCol = "P"
oldLastCmtTypeCol = "Q"
oldLastCmtCol = "R"
oldLastNoteCol = "S"

For j = 0 To indexNew(i, 4)
    If (StrComp(ws1.Range(newLastCmtTypeCol & i + j), ws1.Range(oldLastCmtTypeCol & i + j)) = 0) And _
       (StrComp(ws1.Range(newLastCmtCol & i + j), ws1.Range(oldLastCmtCol & i + j)) = 0) And _
       (StrComp(ws1.Range(newLastNoteCol & i + j), ws1.Range(oldLastNoteCol & i + j)) = 0) And categoryCode = 1 Then

        categoryCode = 1
    ElseIf IsEmpty(ws1.Range(oldLastCmtTypeCol & i + j)) And IsEmpty(ws1.Range(oldLastCmtCol & i + j)) And IsEmpty(ws1.Range(oldLastNoteCol & i + j)) Then
        categoryCode = 3
        Exit For
    Else
        categoryCode = 2
    End If
Next j

任何解决方案?

1 个答案:

答案 0 :(得分:1)

Public Function DelInvalidCharacters(InputString As String) As String
    Dim ModString As String, InvalidChars As String, Char As String
    Dim i As Integer
    InvalidChars = "\/:*?""<>|';#,()%&$+- "
    ModString = vbNullString
    For i = 1 To Len(InputString)
        Char = Mid(InputString, i, 1)

        If InStr(1, InvalidChars, Char) = 0 Then
            ModString = ModString & Char
        End If
    Next i
    DelInvalidCharacters = ModString
End Function

只需为要从

中删除坏字符的每个变量调用此函数

像这样调用

Dim this As String
this = "*this"
this = DelInvalidCharacters(this)