Im trying to decypher your code, but one thing Ive noticed so far is this line (right inside of :PrinterCheckLoop)...

GOTO CheckDPTefaultPrinter

maybe should be...

GOTO CheckDefaultPrinter

?