2009-06-15 2 views

ответ

8

Если вам нужны только символы ANSI, вы можете использовать функцию StrConv() as is done here.

+0

Оба ответа работают хорошо, но для этого требуется меньше кодирования и времени. – Ubalo

18

Мэтью ответил, как преобразовать в ANSI, но если вы хотите, результирующий массив байтов еще представляют собой исходную строку Unicode, вы бы просто назначить его непосредственно:

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 

Это все есть на него. В итоге вы получаете 16-элементный байт-массив, каждая последующая пара, описывающая один символ Юникода.

+1

BTW, чтобы ваши комментарии были выделены правильно в образцах кода VB, добавьте еще один апостроф 'в конец каждой строки кода – MarkJ

+1

Есть ли руководство к этому где-нибудь? Я обнаружил, что ввод кода очень утомительно. –

-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 
Смежные вопросы