2

I want to modify part of .bmp file using VBA, everything works great except that, when I overwrite choosen byte, the next byte is being set to zero. My macro is :

Sub WriteBinaryFile()
Dim i As Integer
Dim nFileNum As Integer
Dim sFilename As String

sFilename = "C:\Users\Piotr\Desktop\test1.bmp"

' Get an available file number from the system
nFileNum = FreeFile

' Open the file in binary mode.  Locks are optional

Open sFilename For Binary Lock Read Write As #nFileNum

     ' Put the data in the file
     ' Below code should write 255 value to byte number 100
     ' but it writes also 0 value to byte number 101
     Put #nFileNum, 100, 255 

Close #nFileNum

End Sub

Why when I'm modify byte number 100, value of byte number 101 is setted to 00 ? How to chage it and why is it occour ?

Edit as Cor_Blimey pointed out using conversion function CByte(255) solves problem, because 255 in VBA is integer number, which is 16-bit number so putting it into file overwrites two bytes

Qbik
  • 5,885
  • 14
  • 62
  • 93

1 Answers1

1

As stated by Cor_Blimey above:

...255 is an integer, which is 16-bit i.e. 2-bytes in VBA. Try Put #nFileNum, 100, CByte(255)

DiegoAndresJAY
  • 706
  • 4
  • 11