No need for VBA.
When you create a Print Area a Named Range is created - you can configure the Named Range to be Dynamic such that it expands and contracts as necessary.
Mike Girvin has a demo up on You Tube of this: http://www.youtube.com/watch?v=aLkNIVMnAZY
In your case (unlike the demo) your named range will be determined by the location of the last numeric value in Column A
(we don't use COUNTA because this will see the formulae Nulls in A as non-blank)
If we assume:
a) sheet being printed in Sheet1
b) top left cell to be printed is always A1
c) last column included in the Print Area is always D
then the Print Area Named Range can be made dynamic by modifying the RefersTo formula to:
Bookmarks