You might try using the most recent version of
Win32::OLE instead of plain ol' OLE. The OLE module you are using is no longer maintained. I started out the same way as you have and eventually converted everything to Win32::OLE and several of my problems were resolved.
Dave