To simplify your work and to make your code easier to maintain, I would suggest breaking it down into pieces that are easy to work with.
I would make the following functions/subs to do the actual work;
Function Val_Print ‘Function that has all of your field checking. Each of your checks that now exits would simply have this return “FALSE”, otherwise it returns “TRUE”
Sub Assign_Number ‘Sub that assigns the number, saves the record and does error checking
Sub Print_Form ‘Code to actually print the form and prompt if they need to reprint.
Each of these would be the existing piece of code you have move to the function or sub as appropriate. Your commented '================================= looks like you were already trying to get to this result.
This would allow you to concentrate on each piece without having the other code get in the way. Your code for your button would then look like
IF NOT Val_Print then exit sub ‘If not ready to print, exit out.
Often by breaking larger pieces of code down into smaller pieces it becomes not only more manageable but also easier to troubleshoot.