Я подозреваю, что некоторые из того, что вы называете символами новой строки, являются символами возврата каретки ASCII 13. Когда вы вводите символ возврата каретки в ячейку, Excel вручную преобразует его в символ новой строки (ASCII 10). Прочитав ваш вопрос, я проверил это, введя формулу «= CHAR (13)» в ячейку A1, а затем скопировал и вставил ее значение на место. Я ввел формулу «= КОД (A1)» в ячейку A2, чтобы оценить код ASCII символа в ячейке A1 (на данный момент 13). Затем я дважды щелкнул A1 и нажал Enter и (угадайте, что?) Символ был изменен на символ новой строки (ASCII 10). Я подозревал, что то же самое произойдет с CHAR (11), но это не так.
Чтобы решить вашу проблему, я предлагаю вам сначала преобразовать все вхождения Chr(13)
в Chr(10)
, используя что-то вроде
MyString = Replace(MyString, Chr(13), Chr(10))
' and if it were me, I would also add (just in case)
MyString = Replace(MyString, Chr(11), Chr(10))
По моему опыту, некоторым программам (например, отчетам о доступе, если я не ошибаюсь) требуется последовательность Chr(10) & Chr(13)
(или наоборот) для физического отображения новой строки в отчетах и, следовательно, если вы потянете абзац, который выглядит как 2 символа новой строки, тогда фактическая строка для достижения этого будет Chr(10) & Chr(13) & Chr(10) & Chr(13)
, а в excel вы получите 4 символа новой строки. Надеюсь, это поможет.
Изменить:
Если это не исчезнет, я бы использовал способ отладки ситуации, распечатав все символы с их значениями и прочитав код символа в том месте, которое вызывает проблема с чем-то вроде этого (код не проверялся):
Dim s As String
Dim i as Integer
For i = 1 to Len(MyString)
s = Mid$(MyString, i, 1)
Debug.Print s & ", " & Asc(s) 'Or perhaps AscW(s) for unicode
Next i