Case EVT_DATA
buf = (StrokeReader1.Read(Text)) 'Use BINARY to receive a byte array
Debug.Print buf
Вы получаете байтовый массив, который с точки зрения VBA неотличим от строки - это единственная причина, по которой Debug.Print buf
не выдает ошибку несоответствия типов - потому что любая другая У массива просто нет возможности представить себя в виде строки, поэтому вы не можете отладить-распечатать массив.
Вам нужно итерировать байты в массиве, использовать функцию Hex
, чтобы получить шестнадцатеричное представление каждого байта, и объединить их в четкую строку.
Примерно так:
Private Function ToHexString(ByRef buffer As Variant) As String
'note: buffer array is wrapped in a Variant, could be passed ByVal
'first allocate/size a dynamic array to hold our results;
'by sizing from LBound(buffer) to UBound(buffer), we get
'an array that's sized exactly the same as the buffer array.
ReDim bytes(LBound(buffer) To UBound(buffer))
'now iterate all items in the array
Dim i As Long
For i = LBound(buffer) To UBound(buffer)
'store the hex representation of the byte at index i into our hex-bytes array
bytes(i) = Hex(buffer(i))
Next
'return the joined hex-bytes array, using a space to separate the individual hex-bytes
ToHexString = Strings.Join(bytes, " ")
End Function
Теперь вы можете сделать Debug.Print ToHexString(buf)
, и это должно дать ожидаемый результат.
Если вы хотите получить этот вывод в ячейку, вам нужно получить объект Range
от определенного Worksheet
. Например, если вы хотите записать в ячейку A1 любой активный лист:
ActiveSheet.Range("A1").Value = ToHexString(buf)
или
ActiveSheet.Cells(1, 1).Value = ToHexString(buf)