在VBA中debugging空白
我在表格中有一个单元格,内容如下:
64123
其中有一些空白空间之后的某种forms。我以为这是一个空白,所以在我的VBA代码,我已经尝试了多种方式获得这个空白空间的string,但既不application.trim
也不replace
工作。
With Cells(c.Row, 16) .NumberFormat = "General" v = Application.Trim(.Text) v = Replace(v, " ", "") Debug.Print v .Clear .NumberFormat = "General" .Value = Application.Trim(v) End With
最后肯定有一个空白的空间 – 我可以看到它,当我在Excel中突出显示单元格时, Application.Trim
总是为我工作。 除了空白之外,还有什么可能呢? 如果它是一个制表符或回车,这些replace
语法是什么?
运行这个,它会告诉你所有的string的ascii值
Sub tellMeWhatCharValues(h As String) Dim i For i = 1 To Len(h) MsgBox Asc(Mid(h, i, 1)) Next i End Sub
只是第七个字符
Sub tellMeWhatCharValues(h As String) Dim i MsgBox Asc(Mid(h, 7, 1)) End Sub
给Sorceri的答案补充一点:
有太空人物的一些变化,可以使事情更复杂,如薄空间 , 零宽度空间 , 不间断空间 , 等等 。
Trim
不会抓住所有这些(也许不应该删除一个受保护的空间,#160)。
其中一些是unicode字符,可以用Asc
返回一个问号(ascii code 63)。
AscW
/ ChrW
可以用于unicode字符(也可以用ascii字符)。
尝试这个:
Public Sub test() Dim s As String s = "12345z" & Chr(160) & "x" Analyze s Debug.Print "---------" s = "12345z" & ChrW(8239) & "x" ' #8239 = narrow no-break space Analyze s End Sub Public Sub Analyze(s) Dim c As String Dim i As Integer For i = 1 To Len(s) c = Mid(s, i, 1) Debug.Print c & " => " & AscW(c) Next End Sub
查找时遇到困难的空白常常是CHAR(160)
,请参阅删除整列数据中的前导或尾随空格
在你的情况下,你可以用代码删除它们
ActiveSheet.UsedRange.Replace Chr(160), vbNullString