Schönen guten Hallo,
ich mal wieder.
Also nu is mein Programm zu 99% fertig funktioniert alles wunderbar und schön schnell
Also was ich jetz noch brauche ist eine Drucken Funktion.
Und zwar…
Datagrid Aufbau:
7 Sichtbare Spalten
22 Nicht Sichtbare Spalten
Die Informationen die gedruckt werden sollen, sollen
- Auf eine A4 Seite Passen
- Nach möglichkeit in einem Formular sein
- Aus sichtbaren und unsichtbaren Spalten bestehen
- Lesbar sein
- Die Spalten sollen so skaliert werden das kein platz verschwendet wird.
Ich habe da schon eine Drucken Funktion gefunden die ganz gut aussah.
Aber sie funktioniert nicht ^^
Dim fmt As String
Dim sRow As String
Dim xPos As Long
Dim I As Long
Dim intProz As Integer
Dim GridWidth As Long
Dim ColWidth As Long
Dim PageWidth As Long
Dim sHeader As String
Screen.MousePointer = 11
With Printer
.ScaleMode = 6 ' Maßeinheit "mm"
xPos = 20 ' 20mm Rand link
.Font.Name = "Arial"
.Font.Size = 12
' Listenbezeichnung
.CurrentY = 10
.CurrentX = xPos
.Font.Bold = True
Printer.Print DGV.Caption + vbCrLf
.Font.Bold = False
' Format (Spaltenbreiten) + Tabellenkopf
' anhand Bildschirm-Spaltenbreite ermitteln
PageWidth = .ScaleWidth - (xPos \* 2)
With DGV
' Gesamtbreite
For I = 0 To .Columns.Count - 1
If .Columns(I).Visible Then
GridWidth = GridWidth + .Columns(I).Width
End If
Next I
' Prozentuale Verteilung auf die Spalten
' plus Tabellenkopf
For I = 0 To .Columns.Count - 1
With .Columns(I)
' zunächst Spaltenausrichtung berücksichtigen
Select Case .Alignment
Case dbgCenter
' zentriert
fmt = fmt + "^"
Case dbgRight
' rechtsbündig
fmt = fmt + "\>"
End Select
' jetzt Spaltenbreite berechnen
intProz = (.Width / GridWidth \* 100 + 0.5)
ColWidth = (PageWidth / 100 \* intProz + 0.5)
fmt = fmt + Format$(ColWidth, "0")
' Tabellenkopf
sHeader = sHeader + .Caption
End With
fmt = fmt + "|"
sHeader = sHeader + "|"
Next I
' abschliessendes "|" entfernen
fmt = Left$(fmt, Len(fmt) - 1)
sHeader = Left$(sHeader, Len(sHeader) - 1)
End With
' Tabellenkopf drucken
.Font.Bold = True
.Font.Size = 9
PrintRow xPos, fmt, sHeader
.Font.Bold = False
' Jetzt Recordset "satzweise" ausdrucken
.Font.Size = 8
.CurrentY = .CurrentY + 5
Rs.MoveFirst
While Not Rs.EOF
sRow = ""
With DGV
For I = 0 To .Columns.Count - 1
If .Columns(I).Visible Then
' NumberFormat berücksichtigen
If .Columns(I).NumberFormat "" Then
sRow = sRow + Format$(FeldInhalt(Rs.Fields(I)), \_
.Columns(I).NumberFormat) + "|"
Else
' normaler Text / sonstige Datentypen
sRow = sRow + CStr(FeldInhalt(Rs.Fields(I))) + "|"
End If
End If
Next I
PrintRow xPos, fmt, sRow
End With
' nächster Datensatz
Rs.MoveNext
Wend
' Druckauftrag beenden
.EndDoc
End With
Screen.MousePointer = 0
MsgBox "Grid wurde ausgedruckt!", 64, "Drucken..."
End Sub
' Nullfeld abfragen
Public Function FeldInhalt(Feld As Field) As Variant
If IsNull(Feld.Value) Then
Select Case Feld.Type
Case adInteger, adSmallInt
FeldInhalt = 0
Case adBoolean
FeldInhalt = False
Case Else
FeldInhalt = ""
End Select
Else
FeldInhalt = Feld.Value
End If
Der fehler tritt bei der funktion „PrintRow“ auf.
Warum? Was muss geändert werden?
Hoffe jemand erbarmt sich den langen code zu lesen und mir n paar tipps zu geben ^^
Danke