2017-02-17 2 views
3

Я создал макрос для удаления всех пробелов в строке, в частности, адрес электронной почты. Однако он удаляет только около 95% пробелов и оставляет несколько.Удаление всех пространств в строке

Мой код:

Sub NoSpaces() 
    Dim w As Range 

    For Each w In Selection.Cells 
     w = Replace(w, " ", "") 
    Next 
End Sub 

Вещи, которые я пытался решить эту проблему включают:

~ Подтвержденные пространства действительно пространства с функцией кода, это символ 32 (пробел)
~ Используется заменяющий макрос в сочетании с макросом замены
~ У вас есть дополнительный макрос, использующий функцию Trim для удаления начального и конечного пробелов.
~ Сделал отдельный макрос для проверки неразрывных пробелов (символ 160)
~ Используется функция поиска и замены для поиска и замены пробелов ничем. Подтвержденная работа.

У меня есть только одна ячейка, выбранная при запуске макроса. Он выбирает и проходит через все ячейки из-за части Selection.Cells кода.

Несколько примеров:

1 STAR MOVING @ ATT.NET 
322 [email protected] 
[email protected] COM. 

Они содержат только регулярные пропуски, но пропускаются.

+0

['w = WorksheetFunction.Clean (w)'] (https://msdn.microsoft.com/en-us/library/office/ff837762.aspx) – Slai

+2

Можете ли вы предоставить строку, в которой она не работает для? Это поможет в воспроизведении проблемы. – Kyle

+0

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

ответ

2

Просто используйте регулярное выражение:

'Add a reference to Microsoft VBScript Regular Expressions 5.5 
Public Function RemoveWhiteSpace(target As String) As String 
    With New RegExp 
     .Pattern = "\s" 
     .MultiLine = True 
     .Global = True 
     RemoveWhiteSpace = .Replace(target, vbNullString) 
    End With 
End Function 

Называйте это как это:

Sub NoSpaces() 
    Dim w As Range 

    For Each w In Selection.Cells 
     w.Value = RemoveWhiteSpace(w.Value) 
    Next 
End Sub 
+0

Я пробовал ваше решение и получил тот же результат. В нескольких письмах по-прежнему есть пробелы. – PatrykChristopher

+0

@PatrykChristopher - Он заменяет их, если вы явно ссылаетесь на ячейку, в которой они находятся? То есть 'Range (« A1 »). Value = RemoveWhiteSpace (Range (« A1 »). Value)'? Где вы устанавливаете 'Selection'? – Comintern

+0

Я пошел вперед и запустил функцию отдельно = RemoveWhiteSpace (_CellNumber_), и она отлично работала. Однако при запуске макроса он по какой-то причине не удаляет пробелы. – PatrykChristopher

0

Используйте "Substitute" Пример ... = подставим (C1: C18,» "" ")

0

Поскольку вы предполагаете, что Selection.Cells содержит все ячейки на листе.

Cells.Replace " ", "" 
1

Попробуйте это:

Sub NoSpaces() 
Selection.Replace " ", "" 
End Sub 
+1

Это сработало отлично! Я думаю, что это была проблема с выбором ячеек. Большое спасибо! – PatrykChristopher

0

И добавить к отличным советам от всех великих авторов, попробуйте

TRIM или LTRIM или RTRIM, и вы можете прочитать больше об этих функциях здесь:

https://msdn.microsoft.com/en-us/library/office/gg278916.aspx

Теперь это делает не удалять внедренные пространства (пробелы между буквами), но он удаляет любые ведущие и конечные пробелы.

Надеюсь, это поможет.

+0

Да, у меня есть макрос Trim, который заботится о ведущих и конечных пространствах, спасибо за ваш вклад! – PatrykChristopher

Смежные вопросы