When I took my high school VB class a few years ago, this was a very common problem that folks ran into for their game project.
I remember that I hunted around, but to no avail -- VB3 had no innate ability to handle transparencies. If you're using VB4+, I believe you can set pictureboxes to use transparency. Otherwise, you have no choice but to call Win32 API functions.
IIRC, You have to load the bitmap into a picturebox like you're doing. set the picture box to invisible. I used a picturearraybox to hold all my animation frames, but you could just as easily put the mask and the graphic in the same bitmap or in seperate ones, whatever works easiest for you.
first blit with your mask, I believe using an AND blit. So the white areas will retain their color, and the black areas will be where your sprite goes. then blit your bitmap with OR. This method is, like VB3 itself, very slow though. I was unable to blit more than a few sprites without some fair slowdown occuring. Also note that this is VERY different from what you're probably used to; the way you're doing it the picturebox itself holds its coordinates in the .left and .top variables; with win32 blits you must keep track of it yourself, probably in an array of ints.
As for the specifics of the blit code, I unfortunately can't post any. I still have all the source for that project, but its in VB3 form files (which are binary), and I no longer own VB. I think there was an example program that came with VB that I took my technique from though.
-- Remnant