VBA: функция замены не работает на строке...?

Я действительно запутался.. этот скрипт должен анализировать выбранную почту построчно. Эти письма, конечно, не всегда в виде простого текста, но иногда форматированного текста. Скрипт работал с простыми текстовыми файлами, но с почтой замена не работает. Зачем?

Данные в почте разделяются пробелами (от 1 до 5), т.е.

     24 month
5/1 5/2 5/3 5/4
20    50    30    20

Однако, когда я перебираю код, замена не имеет никакого эффекта, и длина строки остается той же.

Вот часть моего сценария синтаксического анализа:

Dim varCurrentLine As Variant
Dim strCurrentLine As String
Dim astrLines() As String
Dim astrCurrentLine() As String

astrLines = Split(myMail.Body, vbCrLf)

For Each varCurrentLine In astrLines
    strCurrentLine = CStr(varCurrentLine)

    If (InStr(1, strCurrentLine, "24 Month")) Then boolStartParsing = True

    If (boolStartParsing) Then
        strCurrentLine = Replace(strCurrentLine, "         ", " ")
        strCurrentLine = Replace(strCurrentLine, "        ", " ")
        strCurrentLine = Replace(strCurrentLine, "       ", " ")
        strCurrentLine = Replace(strCurrentLine, "      ", " ")
        strCurrentLine = Replace(strCurrentLine, "     ", " ")
        strCurrentLine = Replace(strCurrentLine, "    ", " ")
        strCurrentLine = Replace(strCurrentLine, "   ", " ")
        strCurrentLine = Replace(strCurrentLine, "  ", " ")

        If (Len(strCurrentLine) > 0) Then
            astrCurrentLine = Split(strCurrentLine, " ")

            'Parsin code omitted

        End If
    End If
Next varCurrentLine

2 ответа

Это, конечно, заставляет меня думать, что пробелы, которые вы использовали для сравнения пробелов в тексте письма, не совпадают.

Нашел эту ссылку в Google:

http://dmcritchie.mvps.org/excel/join.htm

Есть вероятность, что ваши "пробелы" могут быть "неразрывными пробелами", которые CHR(160) в VBA.

Вы также можете использовать while цикл для очистки вашего кода:

While InStr(strCurrentLine, Chr(32) & Chr(32)) > 0 _
    Or InStr(strCurrentLine, Chr(160) & Chr(160)) > 0

    strCurrentLine = Replace(strCurrentLine, Chr(32) & Chr(32), Chr(32))
    strCurrentLine = Replace(strCurrentLine, Chr(160) & Chr(160), Chr(32))
Wend
Другие вопросы по тегам