Программа печати отчета из MSFlexGrid. Модифицированная и подправленная.

Private Sub cmdPrint_Click()
    Dim c As Integer
    Dim n  As Integer
    Dim p As Integer
    Dim page As Integer
    Dim i As Integer
    Dim x As Integer
    Dim Y As Integer
    Dim xx  As Integer
    Dim z As Integer
    Dim OStrWidth As Integer
    Dim Dob As Integer
    Dim StWidth(15) As Integer
    Dim NumDob As Integer
    Dim str As String
    Dim sss(15) As String
    Dim StrWidth(30) As String
    Dim title As String
    p = 1
    page = 1
    'Установка свойств объекта Printer    Printer.Orientation = 2
    MousePointer = 11
    x = Printer.ScaleWidth * 0.01
    Y = Printer.ScaleHeight * 0.02
    Printer.PaperSize = 9
    Printer.FontName = "Times New Roman cyr"
    Printer.FontSize = 10
    Printer.DrawWidth = 2

    For z = 1 To Grid.Cols - 1 Step 1
    Grid.Row = 0
    Grid.Col = z
    StrWidth(z) = Grid.Text
    Next z
    
    'Печать заголовка    xx = 4
    title = Label1.Caption
    Printer.CurrentX = x * 25
    Printer.CurrentY = Y * c
    Printer.Print title
    c = c + 1
    
    'Печать названий столбцов    Printer.FontSize = 8
    Printer.DrawWidth = 2
    Printer.Line (x * 4, Y * c)-(x * 88, Y * c)
    Printer.DrawWidth = 1
    
    For z = 1 To Grid.Cols Step 1
    If z = 1 Or z = Grid.Cols Then
        Printer.DrawWidth = 2
    Else
        Printer.DrawWidth = 1
    End If
    Printer.Line (x * xx, Y * c)-(x * xx, Y * (c + 1))
    Printer.CurrentX = x * (xx + 0.2)
    Printer.CurrentY = Y * (c + 0.1)
    Printer.Print StrWidth(z)
    If z = 2 Then xx = xx + (84 / (Grid.Cols - 1)) -  _
(84 / (4 * (Grid.Cols - 1)))
    If z = 3 Then
        xx = xx + (84 / (Grid.Cols - 1)) + (84 / (4 * (Grid.Cols - 1)))
    Else
        If Not z = 2 Then xx = xx + (84 / (Grid.Cols - 1))
    End If
    Next z
    c = c + 1
    Printer.DrawWidth = 2
    Printer.Line (x * 4, Y * c)-(x * 88, Y * c)
    Printer.DrawWidth = 1
    
    
    'Печать строк из MSFlexGrid    i = 1
25  Grid.Row = i
    If c = 35 Then p = 1
    xx = 4
    Grid.Col = 0
            'Переход на новую страницу
            If c > 38 Then
            If p = 1 Then
                Printer.DrawWidth = 2
                Printer.Line (x * 4, Y * c)-(x * 88, Y * c)
                Printer.CurrentX = x * 84
                Printer.CurrentY = Y * (39.1)
                Printer.Print "Стр. "; page

                Printer.NewPage
                p = p + 1
                page = page + 1
                c = 0
                Printer.FontName = "Times New Roman cyr"
                Printer.FontSize = 8
                Printer.DrawWidth = 2
                Printer.Line (x * 4, Y * c)-(x * 88, Y * c)
                Printer.DrawWidth = 1
                
                For z = 1 To Grid.Cols Step 1
                If z = 1 Or z = Grid.Cols Then
                    Printer.DrawWidth = 2
                Else
                    Printer.DrawWidth = 1
                End If
                Printer.Line (x * xx, Y * c)-(x * xx, Y * (c + 1))
                Printer.CurrentX = x * (xx + 0.2)
                Printer.CurrentY = Y * (c + 0.1)
                Printer.Print StrWidth(z)
                If z = 2 Then xx = xx + (84 / (Grid.Cols - 1)) -  _
(84 / (4 * (Grid.Cols - 1)))
                If z = 3 Then
                    xx = xx + (84 / (Grid.Cols - 1)) +  _
(84 / (4 * (Grid.Cols - 1)))
                Else
                    If Not z = 2 Then xx = xx + (84 / (Grid.Cols - 1))
                End If
                Next z
                c = c + 1
                Printer.DrawWidth = 2
                Printer.Line (x * 4, Y * c)-(x * 88, Y * c)
                Printer.DrawWidth = 1
                xx = 4
            End If
        End If

    'Печать длинной строкой через всю таблицу названия группы    If Not Grid.Text = "" Then
        If c > 36 Then
            ' Переход на новую страницу            If p = 1 Then
                Printer.DrawWidth = 2
                Printer.Line (x * 4, Y * c)-(x * 88, Y * c)

                Printer.CurrentX = x * 84
                Printer.CurrentY = Y * (39.1)
                Printer.Print "Стр. "; page
                
                Printer.NewPage
                p = p + 1
                page = page + 1
                c = 0
                Printer.FontName = "Times New Roman cyr"
                Printer.FontSize = 8
                Printer.DrawWidth = 2
                Printer.Line (x * 4, Y * c)-(x * 88, Y * c)
                Printer.DrawWidth = 1
                
                For z = 1 To Grid.Cols Step 1
                If z = 1 Or z = Grid.Cols Then
                    Printer.DrawWidth = 2
                Else
                    Printer.DrawWidth = 1
                End If
                Printer.Line (x * xx, Y * c)-(x * xx, Y * (c + 1))
                Printer.CurrentX = x * (xx + 0.2)
                Printer.CurrentY = Y * (c + 0.1)
                Printer.Print StrWidth(z)
                If z = 2 Then xx = xx + (84 / (Grid.Cols - 1)) -  _
(84 / (3 * (Grid.Cols - 1)))
                If z = 3 Then
                    xx = xx + (84 / (Grid.Cols - 1)) +  _
(84 / (3 * (Grid.Cols - 1)))
                Else
                    If Not z = 2 Then xx = xx + (84 / (Grid.Cols - 1))
                End If
                Next z
                c = c + 1
                Printer.DrawWidth = 2
                Printer.Line (x * 4, Y * c)-(x * 88, Y * c)
                Printer.DrawWidth = 1
                xx = 4

            End If
        End If
        Printer.DrawWidth = 2
        Printer.Line (x * 4, Y * c)-(x * 4, Y * (c + 1))
        Printer.Line (x * 88, Y * c)-(x * 88, Y * (c + 1))
        Printer.CurrentX = x * (xx + 0.2)
        Printer.CurrentY = Y * (c + 0.1)
        Printer.Print Grid.Text
        c = c + 1
        Printer.DrawWidth = 1
        Printer.Line (x * 4, Y * c)-(x * 88, Y * c)
    End If
        
    For z = 1 To Grid.Cols - 1 Step 1
    Grid.Col = z
    If z = 1 Or z = Grid.Cols Then
        Printer.DrawWidth = 2
    Else
        Printer.DrawWidth = 1
    End If
    If z = 2 And Grid.Text = "Итого с начала года:" Then GoTo 10
    If z = 2 And InStr(1, Grid.Text, "В т.ч. за ") Then GoTo 10
    Printer.Line (x * xx, Y * c)-(x * xx, Y * (c + 1))
    Printer.CurrentX = x * (xx + 0.2)
    Printer.CurrentY = Y * (c + 0.1)
    Printer.Print Grid.Text
10  If z = 2 Then xx = xx + (84 / (Grid.Cols - 1)) -  _
(84 / (4 * (Grid.Cols - 1)))
    If z = 3 Then
        xx = xx + (84 / (Grid.Cols - 1)) + (84 / (4 * (Grid.Cols - 1)))
    Else
        If Not z = 2 Then xx = xx + (84 / (Grid.Cols - 1))
    End If
    Next z
    Printer.DrawWidth = 2
    Printer.Line (x * xx, Y * c)-(x * xx, Y * (c + 1))
    Printer.DrawWidth = 1
    c = c + 1
    Printer.Line (x * 4, Y * c)-(x * 88, Y * c)
    i = i + 1
    If i < Grid.Rows Then GoTo 25
    Printer.DrawWidth = 2
    Printer.Line (x * 4, Y * c)-(x * 88, Y * c)
    Printer.CurrentX = x * 84
    Printer.CurrentY = Y * (39.1)
    Printer.Print "Стр. "; page

    MousePointer = 0
    Printer.EndDoc
End Sub