Функция обрезки и WorksheetFunction.Обрезка не удаляет начальные или конечные пробелы

#excel #vba #trim

#excel #vba #обрезка

Вопрос:

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

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

 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:

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

Комментарии:

1. Ascii 160 — это неразрывный пробел.

2. И вы не первый, кто сталкивается с этим с разочарованием, dukelupus.wordpress.com/2008/03/14 /…

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