调试VBA中的空格

时间:2015-05-11 19:45:53

标签: excel vba excel-vba

我在表格中有一个单元格,内容为:

64123 3之后有一些空白区域。我认为这是一个空白区域,所以在我的vba代码中,我尝试了多种方法来获取字符串中的空白区域,但application.trimreplace都不起作用。

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语法是什么?

3 个答案:

答案 0 :(得分:4)

运行它,它会告诉你字符串的所有ascii值

Sub tellMeWhatCharValues(h As String)
Dim i
    For i = 1 To Len(h)
        MsgBox Asc(Mid(h, i, 1))
    Next i
End Sub

仅适用于第7个字符

Sub tellMeWhatCharValues(h As String)
Dim i
    MsgBox Asc(Mid(h, 7, 1))
End Sub

答案 1 :(得分:4)

为Sorceri的回答添加一些要点:

space 字符的几种变体可能会使事情变得更复杂,例如Thin SpaceZero Width SpaceNon-breaking Spaceand more

Trim无法捕获所有这些内容(并且可能不应删除受保护的空间,#160)。
其中一些是unicode字符,可能会返回Asc的问号(ascii代码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

答案 2 :(得分:2)

您发现的空格通常为CHAR(160),请参阅Remove leading or trailing spaces in an entire column of data

在您的情况下,您可以使用

代码删除它们
ActiveSheet.UsedRange.Replace Chr(160), vbNullString