In case anyone is wondering, I found the solution to this good aweful mess. Here is the code I used:
Private Sub PrintGrid(ctlGrid As Control)
Dim I As Integer
Dim J As Integer
Dim PTab As Integer
With ctlGrid
' PTab = 25 'Set the first tab value
For J = 0 To .Columns.count - 1
.Col = J 'Set the current column
If .Col = 0 Then
PTab = PTab + 25
ElseIf .Col = 1 Then
PTab = PTab + 25
ElseIf .Col = 2 Then
PTab = PTab + 32
ElseIf .Col = 3 Then
PTab = PTab + 20
ElseIf .Col = 4 Then
PTab = PTab + 18
ElseIf .Col = 5 Then
PTab = PTab + 18
ElseIf .Col = 6 Then
PTab = PTab + 35
ElseIf .Col = 7 Then
PTab = PTab + 30
End If
'Send the field to the print line and add the tab.
Printer.Print Trim$(.Columns(J).Caption); Tab(PTab);
Next
Printer.Print
For I = 0 To .ApproxCount - 1
PTab = 25 'Set the first tab value
'This checks to see if a page break is needed
If Printer.CurrentY + Printer.TextHeight(.Text) > Printer.ScaleHeight - 600 Then
Printer.NewPage
End If
For J = 0 To .Columns.count - 1
.Col = J 'Set the current column
If .Col = 0 Then
PTab = PTab + 25
ElseIf .Col = 1 Then
PTab = PTab + 25
ElseIf .Col = 2 Then
PTab = PTab + 32
ElseIf .Col = 3 Then
PTab = PTab + 20
ElseIf .Col = 4 Then
PTab = PTab + 18
ElseIf .Col = 5 Then
PTab = PTab + 18
ElseIf .Col = 6 Then
PTab = PTab + 35
ElseIf .Col = 7 Then
PTab = PTab + 30
End If
'Send the field to the print line and add the tab.
Printer.Print Trim$(.Text); Tab(PTab);
Next
Printer.Print
On Error Resume Next
.Row = .Row + 1 'Set the active row
On Error GoTo 0
Next I
End With
Printer.EndDoc
End Sub
and then with a print command button I added the line
Private Sub cmdprint_Click()
' DataReport1.PrintReport
Printer.Orientation = 2
Call PrintGrid(DataGrid3)
End Sub
of course you need to set datagrid 3 for that which I have in the form_load section (after the sql query is open and submitted) and saved as this
Set DataGrid3.DataSource = zyrsall