2017-02-17 98 views
3

我創建了一個宏,用於刪除字符串中的所有空格,特別是電子郵件地址。然而,它只消除了大約95%的空白,並留下了一些。刪除字符串中的所有空格

我的代碼:

Sub NoSpaces() 
    Dim w As Range 

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

事情我曾試圖解決這一問題包括:

〜證實了空間確實與代碼功能空間,它是字符32(空格)
〜使用與替換宏相結合的替代宏
〜有額外的宏利用修剪功能刪除前導和尾隨空白
〜製作一個單獨的宏以測試非中斷空格(字符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)'?你在哪裏設置「選擇」? – Comintern

+0

我繼續前進,並單獨運行該功能= RemoveWhiteSpace(_CellNumber_),它的工作完美。但是,運行宏時,由於某些原因它不會刪除空白。 – PatrykChristopher

0

使用 「替代」 例... =替換(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