我不得不solve a little problem today(即PDF轉換器已經加入到每一個細胞一個MS Word文檔中修剪尾隨空白)工作,我很快發現,這種使用是不可能的在每個單元結束TRIM()不表
Sub TrimCellSpaces()
Dim itable As Table
Dim C As Cell
For Each itable In ThisDocument.Tables
For Each C In itable.Range.Cells
C.Range.Text = Trim(C.Range.Text)
Next
Next
End Sub
我很驚訝,這不僅無法刪除尾隨空白,它甚至還添加段落標記:標準Word界面,所以寫了一個小VBA腳本。所以我嘗試了一個正則表達式的方法:
Sub TrimCellSpaces()
Dim myRE As New RegExp
Dim itable As Table
Dim C As Cell
myRE.Pattern = "\s+$"
For Each itable In ThisDocument.Tables
For Each C In itable.Range.Cells
With myRE
C.Range.Text = .Replace(C.Range.Text, "")
End With
Next
Next
End Sub
相同的結果。我添加了一個斷點,將C.Range.Text
(替換前)的值複製到十六進制編輯器中,並發現它以十六進制序列0D 0D 07
(07
是ASCII Bell字符(!))結束。
我改變了正則表達式來\s+(?!.*\w)
,和腳本完美無缺。替換操作後,C.Range.Text
的值僅在0D 07
(少一個0D
)處結束。
我也有一個新創建的表試過,沒有一個通過Word的PDF進口商產生的 - 相同的結果。
這是怎麼回事? Word是否使用0D 0D 07
作爲「細胞末端」標記?或者是0D 07
?爲什麼\s+
只刪除一個0D
?
結尾字符不是空格字符 - 它可能只是出現這種方式,因爲您的系統無法正確顯示它。 'Trim $()'只會刪除字符串的* start *和* end *處的空白字符 - 如果鈴聲字符出現在字符串的末尾,那麼'Trim $()'不起作用。 –
是的,當然 - 我的問題是*爲什麼*首先有一個響鈴字符。創建一個新的Word文檔,創建一個表格,在該表格中輸入任何值並通過VBA獲取該單元格的內容,最後有'0D0D07'。爲什麼? –
aaah,我明白了 - 您的問題閱讀的方式我認爲PDF軟件對響鈴字符負責,並且您想知道爲什麼沒有將空白字符刪除。道歉! –