Функция обрезки Excel VBA или WorksheetFunction.Trim не удаляют начальные или конечные пробелы - PullRequest
0 голосов
/ 01 апреля 2019

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


Я скопировал некоторые данные с веб-сайта на листе и случайно заметил, что некоторые ячейки, кроме их ожидаемого значения, также содержат пробел. Я хотел удалить эти пробелы из-за проблем с моим кодом. Я заметил определенную ячейку с этим пробелом и попытался:

Worksheets(2).Range("D17").Value = Trim(Worksheets(2).Range("D17").Value)

но место все еще было там. Тогда я попробовал:

Worksheets(2).Range("D17").Value = WorksheetFunction.Trim(Worksheets(2).Range("D17").Value)

Все еще не повезло. Replace Функция удаляет не только начальные и конечные символы, но также пробелы внутри строки:

Worksheets(2).Range("D17").Value = Replace(Worksheets(2).Range("D17").Value," ","")

В этом случае некоторые ячейки содержали два слова, поэтому это было невозможно.

Я знал, что могу проверить последний символ на наличие пробелов и удалить его для каждой отдельной ячейки, но это не выглядело как элегантное решение, и в основном оставался главный вопрос: почему Trim функции не работают?

1 Ответ

2 голосов
/ 01 апреля 2019

Потратив много времени на поиск в сети, я обнаружил здесь , что есть еще один символ для пробела, вывод Chr(160) и по некоторым причинам Trim функции его игнорируют.Таким образом, решение в моем случае было сначала заменить все эти 'разные' пробелы , а затем значения усечения:

Worksheets(2).Range("D17").Value = Replace(Worksheets(2).Range("D17").Value, Chr(160), " ")
Worksheets(2).Range("D17").Value = Trim(Worksheets(2).Range("D17").Value)

В случае, если вы столкнетесь с подобной проблемой и выполнитев отличающийся от Chr(160) «неизвестный» символ, вы можете узнать, что это за символ, выделив его и используя функцию Asc.

...