Una manera simple de convertir entre long, RGBA
Option Explicit
Private Type DummyLong
DummyLong As Long
End Type
Private Type RGBA
Red As Byte
Green As Byte
Blue As Byte
Alpha As Byte
End Type
Private Function AddAlpha(ByVal lColor As Long, bAlpha As Byte) As Long
Dim tRGBA As RGBA
tRGBA = LongToRGBA(lColor)
tRGBA.Alpha = bAlpha
AddAlpha = RGBAToLong(tRGBA)
End Function
Private Function RemoveAlpha(ByVal lColor As Long) As Long
Dim tRGBA As RGBA
tRGBA = LongToRGBA(lColor)
tRGBA.Alpha = 0
RemoveAlpha = RGBAToLong(tRGBA)
End Function
Private Function LongToRGBA(ByVal lColor As Long) As RGBA
Dim tDummy As DummyLong
tDummy.DummyLong = lColor
LSet LongToRGBA = tDummy
End Function
Private Function RGBAToLong(ByRef tRGBA As RGBA) As Long
Dim tDummy As DummyLong
LSet tDummy = tRGBA
RGBAToLong = tDummy.DummyLong
End Function