It may seem better but I personally always use a variation on your Picture1.CurrentX=150; as in..
'at the top of the print routine define an array holding the column offsets
'do them in cms
Picture1.ScaleMode = vbCentimeters
Dim Col as variant
Col = Array(0,0,2,5,7) 'a zero based array we will not use index = 0
'then you can do stuff like
Picture1.currentX = Col(1)
Picture1.Print "Column 1"
'and better, if you setup an array holding the text of each column
For MyCol = 1 to nCols
Picture1.CurrentX = Col(MyCol)
Picture1.print ColumnContents$(MyCol); 'semicolon prevents change in CurrentY and so your Picture1.CurrentY=TmpLong is not required after each print
Next
Picture1.Print 'just one carriage return at the end of the line
This kind of thing can be very handy when printing the contents of Grid and Listview type Controls.
If you are printing a number of lines to a fixed left margin do something like a ...
Pdev.ScaleMode = vbCentimeters
Pdev.Scale (-LeftMargin%, 0)-(Pdev.ScaleWidth - LeftMargin%, Pdev.ScaleHeight)
... at the top of the code; that will return CurrentX to LeftMargin rather than the extreme left of the paper after each carriage return and will save you setting having to reset CurrentX after each carriage return is printed.