Sub Poke(ByVal address As Long, value As Variant, Optional ByVal ValueType As _
VbVarType = -1) ' if a data type wasn't provided, use VarType() If ValueType = -1 Then ValueType = VarType(value) Select Case ValueType Case vbByte CopyMemory ByVal address, CByte(value), 1 Case vbInteger CopyMemory ByVal address, CInt(value), 2 Case vbBoolean CopyMemory ByVal address, CBool(value), 2 Case vbLong CopyMemory ByVal address, CLng(value), 4 Case vbSingle CopyMemory ByVal address, CSng(value), 4 Case vbDouble CopyMemory ByVal address, CDbl(value), 8 Case vbCurrency CopyMemory ByVal address, CCur(value), 8 Case vbDate CopyMemory ByVal address, CDate(value), 8 Case vbVariant CopyMemory ByVal address, value, 16 Case Else Err.Raise 1001, , "Unsupported data type" End Select End Sub write a value of any type in memory The value is written in the format of the value passed as the second argument, but you can overwrite it by passing an explicit data type in the third argument (this is the only way to store a value as a 16-byte Variant) This routine doesn't support strings and objects |