2015-05-11 11 views
5

mam komórkę w tabeli, która brzmi:debugowanie spacje w VBA

64123 gdzie istnieje jakieś białe miejsca po 3. Myślałem, że to puste miejsce, więc w moim kodu VBA, mam wypróbowano wiele sposobów uzyskania tego pustego miejsca poza ciągiem znaków, ale nie działało ani ani .

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 

Jest zdecydowanie spacja na końcu - Widzę go, kiedy podświetlić komórkę w programie Excel, a Application.Trim zawsze pracował dla mnie. Co jeszcze może być innego niż puste miejsce? Jeśli jest to tabulacja lub powrót karetki, jaka jest składnia tych wierszy?

+0

odnośnika tablicę ASCII i użyj funkcji zamiany z Chr (#), gdzie # jest wartością liczbową tabulatora lub linii. – Sorceri

+0

Awesome - thank you! Mam to, że postać jest ascii # 149. Nie jestem pewien jak to zakodować na zamiennik –

+1

Wymień (, chr (149), "") – Sorceri

Odpowiedz

4

uruchomić ten i powie to wszystkie wartości ASCII Twojego ciąg

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

za jedyne 7 char

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

Tak, robi - więc to zadziałało, a ty jesteś moim bohaterem. To naprawdę fajny kod. Dziwaczna postać 160! –

4

Aby dodać kilka punktów do Sorceri za odpowiedź:

Tam jest kilka odmian znaków przestrzeni, które mogą sprawić, że rzeczy bardziej skomplikowane, takie jak Thin Space, Zero Width Space, Non-breaking Space, and more.

Trim nie będzie ich przechwytywał (i prawdopodobnie nie powinien usuwać chronionej przestrzeni , # 160).
Niektóre z nich są znakami Unicode, które mogą zwrócić znak zapytania (kod ASCII 63) z Asc.
AscW/ChrW może być użyty do znaków Unicode (i pracować ze znakami ASCII).

Spróbuj tego:

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

Trudne puste przestrzenie są często CHAR(160) jak znaleźć, zobaczyć Remove leading or trailing spaces in an entire column of data

W twoim przypadku można usunąć je z kodem z

ActiveSheet.UsedRange.Replace Chr(160), vbNullString 
+1

to jest również świetne! Z pewnością uwzględnię to w mojej logice. Nie zdawałem sobie sprawy, że mogę użyć vbNullString jako wartości zastępczej. Słodkie! –