The answer is No, you cannot just assign a Variant Array to a Byte Array without using a loop. A Byte occupies 1 byte in memory as the name suggests and a Variant holding a Byte will ocupy 16 bytes (x32) or 24 bytes (x64). The alignment in the SAFEARRAY (structure holding the array in COM) will not allow for a simple memory copy. Not to mention that the Variant can hold values outside the 0-255 range of a Byte.
I would suggest to use an auxiliary function to achieve your goal:
Public Function ArrayByte(ParamArray values() As Variant) As Byte()
Dim b() As Byte
Dim v As Variant
Dim i As Long
'
ReDim b(LBound(values) To UBound(values))
i = LBound(b)
For Each v In values
b(i) = CByte(v) 'This can throw an error. You might want to implement some checks in order to raise a custom error
i = i + 1
Next v
ArrayByte = b
End Function
This way, your code would become:
Sub Demo()
Dim en As ASCIIEncoding
Dim myArr() As Byte
Set en = New ASCIIEncoding
myArr = ArrayByte(89, 97, 115, 115, 101, 114)
Debug.Print en.GetString(myArr)
End Sub