auxilio al imprimir los datos de una flexgrid

dorian
18 de Agosto del 2005
a quien pueda ayudarme estoy haciendo la practica y me pidieron hacer un programita en vb li hice pero en el momento de imprimir los datos que despiliego en la grilla me imprime solo una pagina y deberia imprimir como minimo 4 paginas este es un nuevo codigo que implemente de un foro pero tiene error y no me sale algien ayudeme please


Private Sub BTN_IMPRIMIR_Click()

Dim Header0 As String, Header1 As String, Header2 As String
Dim ColInicio(0 To 10) As Integer
Dim inicioY As Integer
Dim inicioFor As Integer

If grid_mostrar.Rows = 1 Then Exit Sub

Printer.Print

'defino la escala
Printer.ScaleMode = vbMillimeters

'leo el tipo de papel y defino los limites
hoja = Printer.PaperSize
Select Case hoja
Case vbPRPSLetter
' Printer.Scale (0, 0)-(216, 279)
Case vbPRPSLegal
' Printer.Scale (0, 0)-(216, 356)
Case vbPRPSA4
' Printer.Scale (0, 0)-(210, 297)
Case vbPRPSUser
' Printer.Scale (0, 0)-(Printer.Height, Printer.Width)
End Select

'defino las coordenadas de inicio
inicioX = (Printer.ScaleWidth - Printer.ScaleLeft - 200) 2
inicioY = 24
finY = Printer.ScaleHeight - 30

'inicializo el tamaño e inicio de cada columna
ColInicio(0) = 0

For i = 1 To grid_mostrar.Cols - 1
ColInicio(i) = 0
For j = 1 To i
ColInicio(i) = ColInicio(i) + grid_mostrar.ColData(j - 1)
Next
Next



If grid_mostrar.Rows - 1 < 43 Then
total_pag = 1
Else
Filas = grid_mostrar.Rows - 42
AreaImpresion = finY - 18
FilasXhoja = AreaImpresion 6
total_pag = (Filas FilasXhoja) + 2
End If

pagina = 1

GoSub cabecera

GoSub semicab

grid_mostrar.Row = 0

Printer.Print
With Printer
.Font.Name = "tahoma"
.Font.Size = 8
.Font.Bold = False
.Font.Italic = False
End With
i = 0
Do While grid_mostrar.Row < grid_mostrar.Rows - 1
grid_mostrar.Row = grid_mostrar.Row + 1
If inicioY + 17 + i > finY + 1 Then
GoSub Separadores
Printer.NewPage
inicioY = 24

GoSub cabecera
GoSub semicab
i = 0
pagina = pagina + 1

'preparo la letra para seguir
Printer.Print
With Printer
.Font.Name = "tahoma"
.Font.Size = 8
.Font.Bold = False
.Font.Italic = False
End With
End If

For j = 1 To grid_mostrar.Cols
With grid_mostrar.Col = j - 1
Printer.Font.Bold = grid_mostrar.CellFontBold
Printer.Font.Italic = grid_mostrar.CellFontItalic
If grid_mostrar.FixedAlignment(j - 1) <> 4 Then
Printer.CurrentX = inicioX + ColInicio(j - 1) + 1
Printer.CurrentY = inicioY + 10 + i
If Printer.TextWidth(grid_mostrar.Text) > grid_mostrar.ColData(j - 1) Then

Printer.Print
'cortartexto(.Text, grid_mostrar.ColData(J - 1))
Else
Printer.Print grid_mostrar.Text
End If
Else
Printer.CurrentX = inicioX + ColInicio(j - 1) + (grid_mostrar.ColData(j - 1) - 2 - Printer.TextWidth(grid_mostrar.Text)) 2
Printer.CurrentY = inicioY + 10 + i
Printer.Print grid_mostrar.Text
End If
End With
Next
i = i + 6
Loop

finY = inicioY + 8 + i
GoSub Separadores

'Final de la impresión
Exit Sub




cabecera:
Header0 = " Prisa Depot S.A."
Header1 = " Las Rosas 5757 - Cerrillos - Santiago"
Printer.Print , Header0; Spc(21); "Reporte de Empleados"; Spc(21); "Fecha: " & Date
Printer.Print , Header1; Spc(45); "Hora :" & Time
Return

semicab:
'defino el tipo de letra para la cabecera de la tabla
Printer.Print
With Printer
.Font.Name = "arial"
.Font.Size = 10
.Font.Bold = True
.Font.Italic = False
End With
fila = grid_mostrar.Row
grid_mostrar.Row = 0
For i = 1 To grid_mostrar.Cols
With grid_mostrar.Col = i - 1
If grid_mostrar.FixedAlignment(grid_mostrar.Col) <> 4 Then
Printer.CurrentX = inicioX + ColInicio(i - 1) + 1
Else
Printer.CurrentX = inicioX + ColInicio(i - 1) + (grid_mostrar.ColData(i - 1) - 2 - Printer.TextWidth(grid_mostrar.Text)) 2
End If
Printer.CurrentY = inicioY
Printer.Print grid_mostrar.Text
End With
Next
grid_mostrar.Row = fila
Return

Separadores:
'imprimo separadores

Printer.DrawWidth = 4
'horizontales
Printer.Line (inicioX, inicioY - 3)-(inicioX + 200, inicioY - 3), vbBlack
Printer.Line (inicioX, inicioY + 7)-(inicioX + 200, inicioY + 7), vbBlack

Printer.DrawWidth = 1

Printer.Print

With Printer
.Font.Name = "ARIAL"
.Font.Size = 10
.Font.Bold = True
.Font.Italic = False
End With

'imprime numero de pagina
linea = "Página " + CStr(pagina)
Printer.CurrentX = inicioX + (200 - Printer.TextWidth(linea)) 2
Printer.CurrentY = Printer.ScaleHeight - 20

Printer.Print linea

Return