2009-06-15 4 views

risposta

8

Se sono necessari solo caratteri ANSI, è possibile utilizzare la funzione StrConv() as is done here.

+0

Entrambe le risposte funzionano bene ma questo richiede meno tempo e programmazione. – Ubalo

18

Matthew ha risposto come convertire ANSI, ma se si voleva l'array di byte risultante a rappresentare ancora la stringa Unicode originale, devi semplicemente assegnare direttamente:

Public Sub Main() 
    Dim b() As Byte 
    Dim s As String 
    s = "Whatever" 
    b = s 'Assign Unicode string to bytes.' 
    s = b 'Works in reverse, too!' 
    Debug.Print s 
End Sub 

Questo è tutto ciò che devi fare. Si finisce con un array Byte a 16 elementi, ogni coppia successiva che descrive un carattere Unicode.

+1

BTW per ottenere i commenti correttamente evidenziati negli esempi di codice VB, aggiungere un altro apostrofo 'alla fine di ogni riga di codice – MarkJ

+1

Esiste una guida a questo, da qualche parte? Ho trovato l'inserimento del codice per essere straordinariamente noioso. –

-1
' a bit of an example 
' had some strings down column G 
' nothing in columns "F" or "H" so that current works 
' Think about it.. there are many many columns 
' so leave blank columns on each side of setsof dats 
' then currentregion works ... IFF no blank rows in the data 
' 
' problem to solve some text was Fred3 John2 Blue3 
' others were Bert 3 Green 2 ... which was the require format 
' the ASC char 1 ..255 are the odd or even 
' numbered bytes if array is 1 based or 0 based 
' 
Private Sub CommandButton1_Click() 
    Dim RV$, Ra As Range, Ri&, AL%, WSA() As Byte 
    Dim Ci%, WS$, LV As Byte 

    Set Ra = Range("g8").CurrentRegion 
    For Ri = 1 To Ra.Rows.Count 
     WSA = CStr(Ra(Ri, 1).value) 
     AL = UBound(WSA) 
     LV = WSA(AL - 1) ' last char byte value 
     If LV > 47 And LV < 58 Then ' 0 to 9 
      If WSA(AL - 3) <> 32 Then ' no space " " 
       ReDim Preserve WSA(AL + 2) ' allow 1 more char 
       WSA(AL - 3) = 32 ' put in space 
       WSA(AL - 1) = LV ' return char 
       WS = WSA ' back to a string 
       Ra(Ri, 1) = WS ' back to the cell 
      End If 
     End If 
    Next Ri 
End Sub 

' of course the normal VBAcommands Instr len Mid replace & 
' would do the job ... but my brain is lazy and needed some exercise