The problem is that you are throwing away the information you need: the exception detail. All you do is catch it, ignore it, and put up your own generic message which contains no information on why it happened. Use the debugger, put a breakpoint on the first line of the Try block, and step your code. When it excepts, use the Exception object to gather more info.
But that you say it's an "access denied" implied what the problem is: it's where you are writing the file. Because you don't specify a path, it goes in the current folder: the application folder - which for release apps will be under "Program Files" and those write protected for safety. This kind of code works in development because the folder structure is different: debug apps run from the bin/debug folder and release from the bin/release, neither of which have any write restrictions. But on release? It fails.
Have a look here:
Where should I store my data?[
^] - the code is in C#, not VB but it's pretty obvious.