Текст в ячейке Excel меняется при двойном щелчке по ячейке - PullRequest
0 голосов
/ 09 июля 2020
• 1000 Для дальнейшего объяснения у меня есть макрос, который извлекает строки переменного размера абзаца и помещает их в каждую ячейку в пределах заданного диапазона. Следующее, что я пытаюсь сделать, это использовать другой макрос для вновь созданного диапазона, чтобы удалить лишние новые строки (2+ последовательных новых строки). По какой-то причине макрос не работает и, похоже, не интерпретирует символы новой строки. Как только я вручную дважды щелкну внутри ячейки, но там, где появляется текстовый курсор, затем оставлю эту ячейку для запуска макроса новой строки, тогда он сможет обнаруживать новые строки.

Что здесь происходит? У символов есть разные значения uni-code или что-то еще до двойного щелчка по ячейке? У меня есть аналогичные проблемы при попытке проанализировать символы ячейки для других слов, только когда текст ячейки был сгенерирован из макроса.

1 Ответ

2 голосов
/ 09 июля 2020

Я подозреваю, что некоторые из того, что вы называете символами новой строки, являются символами возврата каретки 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...