2015-05-11 23 views
5

ho una cella di una tabella che recita:debug spazi bianchi in VBA

64123 in cui v'è una sorta di spazio bianco dopo 3. Ho pensato che fosse uno spazio vuoto, così nel mio codice VBA, ho provato più modi per ottenere questo spazio vuoto FUORI dalla stringa, ma né application.trimreplace funzionano.

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 

C'è sicuramente uno spazio vuoto alla fine - posso vederlo quando evidenzio la cella in Excel, e Application.Trim ha sempre lavorato per me. Cos'altro potrebbe essere diverso da uno spazio vuoto? Se è una scheda o un ritorno a capo, qual è la sintassi replace per quelli?

+0

cercare l'tabella ASCII e utilizzare la funzione di sostituzione con Chr (#) dove # è il valore numerico per tabulazione o avanzamento riga. – Sorceri

+0

Fantastico - grazie! Ho capito che il carattere è ASCII # 149. Non so come codificarlo in una sostituzione anche se –

+1

Sostituisci (, chr (149), "") – Sorceri

risposta

4

periodo questo e vi dirà tutti i valori ASCII della stringa di

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

solo per il 7 ° char

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

Sì, lo fa - così ha funzionato, e tu sei il mio eroe. È davvero un bel codice. Freaking character 160! –

4

di aggiungere alcuni punti per la risposta di Sorceri:

Ci sono un paio di varianti di spazio caratteri che possono rendere le cose più complicate, come Thin Space, Zero Width Space, Non-breaking Space, and more.

Trim non catturerà tutti questi (e probabilmente non dovrebbe rimuovere uno spazio protetto, # 160) protetto .
Alcuni di questi sono caratteri unicode, che possono restituire un punto interrogativo (codice ascii 63) con Asc.
AscW/ChrW può essere utilizzato per caratteri unicode (e funziona anche con caratteri ascii).

Prova questo:

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

difficili spazi vuoti sono spesso CHAR(160) come l'avete trovato, vedere Remove leading or trailing spaces in an entire column of data

Nel tuo caso è possibile rimuoverli con codice con

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

anche questo è fantastico! Lo incorporerò sicuramente nella mia logica. Non mi ero reso conto che potevo usare vbNullString come valore di sostituzione. dolce! –