Как преобразовать простую строку в массив байтов в VBA? - PullRequest
8 голосов
/ 16 июня 2009

Мне нужно преобразовать простую строку в массив байтов, используя Excel VBA. Затем этот байтовый массив используется в качестве тела запроса.

Как я могу это сделать?

Спасибо.

Ответы [ 3 ]

22 голосов
/ 16 июня 2009

Мэтью ответил, как преобразовать в 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-элементный массив байтов, каждая последующая пара которого описывает один символ Unicode.

8 голосов
/ 16 июня 2009

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

0 голосов
/ 17 декабря 2016
' 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
...