Hej! Vad händer om du ändrar If i = till tex 50 och 115, Hej Sven! Du kan börja att testa så här,sidan 3 kommer förmodligen att bli för kort Tack Sven Hej Sven!NewPage. Två rader försvinner vid utskrift. Varför?
Följande kod ger utskrift på tre papper men 2 rader ur den lista som skrivs ut försvinner på sidan 3, ärendenummer 120 och 121 kommer ej med i utskriften. De finns i databasen och i framsökningen. Kan du hjälpa mig med mysteriet?
Och jag vet, koden är primitiv, det finns säkert bättre sätt ordna utskriften. Jag är nybörjare på utskrifter och lär mig en bit i taget. Nu försöker jag med enkla listor.
Jag har försökt med att göra en NewPage som skulle ge brytning för alla sidor men misslyckats. Tips mottages på andra lösningar men jag vill också veta varför denna inte fungerar då sidan 1 och 2 blir OK!
KODEN:
'***Skriver ut listan från frmSearch***
Public Sub PrintLista()
'Textstorlekar m.m.
Dim TextFont1 As StdFont
Set TextFont1 = New StdFont
TextFont1.Size = 10
TextFont1.Bold = False
Dim TextFont2 As StdFont
Set TextFont2 = New StdFont
TextFont2.Size = 10
TextFont2.Bold = True
Dim TextFont3 As StdFont
Set TextFont3 = New StdFont
TextFont3.Size = 8
TextFont3.Bold = False
Dim CaptionFont1 As StdFont
Set CaptionFont1 = New StdFont
CaptionFont1.Bold = True
CaptionFont1.Size = 18
Dim CaptionFont2 As StdFont
Set CaptionFont2 = New StdFont
CaptionFont2.Bold = True
CaptionFont2.Size = 14
Dim CaptionFont3 As StdFont
Set CaptionFont3 = New StdFont
CaptionFont3.Bold = True
CaptionFont3.Size = 12
'Utskriftens utseende
Printer.ScaleMode = vbCharacters 'skala = tecken
Printer.ScaleTop = 3 'topmarginalen 10 tecken
Printer.ScaleLeft = 10 'vänstermarginalen 20 tecken
Printer.CurrentX = 45
Printer.CurrentY = 3
Set Printer.Font = TextFont3
Printer.Print "Kantrubrik"
Printer.CurrentX = 60
Printer.CurrentY = 3
Set Printer.Font = TextFont3
Printer.Print Date
Printer.CurrentX = 80
Printer.CurrentY = 3
Set Printer.Font = TextFont3
Printer.Print "Sidan 1"
'Rubrik
Printer.CurrentX = 25 'startposition för utskrift
Printer.CurrentY = 8 'startposition för utskrift
Set Printer.Font = CaptionFont1
Printer.Print "Rubrik" 'rubriken
Printer.CurrentX = 25
Printer.CurrentY = 11
Set Printer.Font = CaptionFont2
Printer.Print "Ärendelista"
'Lista
Printer.CurrentX = 25
Printer.CurrentY = 14
Set Printer.Font = CaptionFont2 'normal
Printer.Print frmSearch.lblListval.Caption, "Antal objekt i listan: ", frmSearch.lstVisaLista.ListCount
Printer.CurrentX = 25
Printer.CurrentY = 16
Set Printer.Font = TextFont2
For i = 0 To frmSearch.lstVisaLista.ListCount - 1
Printer.Print frmSearch.lstVisaLista.List(i)
If i = 55 Then
Printer.NewPage
Printer.CurrentX = 45
Printer.CurrentY = 3
Set Printer.Font = TextFont3
Printer.Print "Kantrubrik"
Printer.CurrentX = 60
Printer.CurrentY = 3
Set Printer.Font = TextFont3
Printer.Print Date
Printer.CurrentX = 80
Printer.CurrentY = 3
Set Printer.Font = TextFont3
Printer.Print "Sidan 2"
Set Printer.Font = TextFont2
Printer.CurrentX = 25
Printer.CurrentY = 10
End If
If i = 120 Then
'Printer.NewPage
Printer.CurrentX = 45
Printer.CurrentY = 3
Set Printer.Font = TextFont3
Printer.Print "Kantrubrik "
Printer.CurrentX = 60
Printer.CurrentY = 3
Set Printer.Font = TextFont3
Printer.Print Date
Printer.CurrentX = 80
Printer.CurrentY = 3
Set Printer.Font = TextFont3
Printer.Print "Sidan 3"
Set Printer.Font = TextFont2
Printer.CurrentX = 25
Printer.CurrentY = 10
Printer.Print
Printer.Print
End If
'Koden upprepas enligt ovan för fler sidor när databasen växer, vilket torde
'medföra att felet också upprepas. Sv: NewPage. Två rader försvinner vid utskrift. Varför?
Sedan behöver du inte uppreppa samma kodrader använd tex If i Mod 50 = 0 Then
kör en ny runda med NewPage.
Du är väl medveten om att du måste ha ett Printer.EndDoc sist efter Next i
Nyfiken på svarSv: NewPage. Två rader försvinner vid utskrift. Varför?
Jo om jag ändrar index i så ramlar två andra rader bort, i fallet du nämner blir det ärende 115 och 116 på sidan 3 i utskriften. Så det är inte sidstorleken som spökar, tror jag.
EndDoc och Next är med, vart inte inkopierade ovan
Hur menar du med If i Mod 50=0 ?
Sidan 1 rymmer mindre listrader än sidan 2 och efterföljande pga rubriksättning.
Alltså ska sidan 2 och frammåt upprepas med sidnummer i kantrubrik.
Det kan väl lösas med uppräkning. (Hur f-n jag nu skriver den - stiltje just nu)
Men förklara gärna det där med Mod 50=0 mera.
Jag var inne på att sätta en indexuppräkning med aktuellt i (senast utskrivna) + 60 för varje ny sida efter sidan 1 och det fick jag inte att få att fungera. Därav upprepningen men det blir lätt att göra fel i koden då som inte syns nu för jag har inte 1000 ärenden att kolla utskriften på. (dålig programmering med andra ord)
Tack för ditt engagemangSv: NewPage. Två rader försvinner vid utskrift. Varför?
du får berätta vad som händer. Så kan Vi "modda" If i
Det viktiga nu är att du inte skall tappa två rader.
'Lista
Dim sidNr As Long
sidNr = 2
Printer.CurrentX = 25
Printer.CurrentY = 14
Set Printer.Font = CaptionFont2 'normal
Printer.Print frmSearch.lblListval.Caption, "Antal objekt i listan: ", frmSearch.lstVisaLista.ListCount
Printer.CurrentX = 25
Printer.CurrentY = 16
Set Printer.Font = TextFont2
For i = 0 To frmSearch.lstVisaLista.ListCount - 1
Printer.Print frmSearch.lstVisaLista.List(i)
If i Mod 55 = 0 Then
Printer.NewPage
Printer.CurrentX = 45
Printer.CurrentY = 3
Set Printer.Font = TextFont3
Printer.Print "Kantrubrik"
Printer.CurrentX = 60
Printer.CurrentY = 3
Set Printer.Font = TextFont3
Printer.Print Date
Printer.CurrentX = 80
Printer.CurrentY = 3
Set Printer.Font = TextFont3
Printer.Print Str$(sidNr)
Set Printer.Font = TextFont2
Printer.CurrentX = 25
Printer.CurrentY = 10
sidNr = sidNr + 1
End If
Next 'i
Printer.EndDocSv: NewPage. Två rader försvinner vid utskrift. Varför?
Jag ska testa koden. Printer.Print Str$(sidNr) var ny för mig, intressant se vad det blir.
Jag hoppas raderna blir kvar. Jag undrar fortfarande varför de försvinner. Men blir de kvar nu så har jag en bättre lösning med mindre och vettigare kod.
Hör av mig om resultat.
Jag är "modemare" varför det dröjer lite mellan varven jag kopplar in mig men jag hoppas kunna rapportera ikväll. Sv: NewPage. Två rader försvinner vid utskrift. Varför?
Hej igen!
Det fungerar till en del. Första sidan innehåller dock bara en rad från listan innan sidbrytning. Men alla ärenden kommer med!
Printer.CurrentX = 25 fick jag lägga till efter End If för att få texten på papperet, den försvann delvis utanför papperets vänsta kant. utom listrad 1 på varje sida.
Funderar nu på hur jag modifierar listutskriften så att jag får fler än ett ärende på första sidan. Tips mottages, jag vill ha sidbrytningen på samma rad på alla sidor.
MVHSv: NewPage. Två rader försvinner vid utskrift. Varför?
Kanske har fler nytta av koden och så här blev min lösning till sist.
Tack vare Svens tips så ser listutskriften nu hyfsad ut.
'***Skriver ut listan på formuläret frmSearch
Public Sub PrintLista()
'Textstorlekar m.m.
Dim TextFont1 As StdFont
Set TextFont1 = New StdFont
TextFont1.Size = 10
TextFont1.Bold = False
Dim TextFont2 As StdFont
Set TextFont2 = New StdFont
TextFont2.Size = 10
TextFont2.Bold = True
Dim TextFont3 As StdFont
Set TextFont3 = New StdFont
TextFont3.Size = 8
TextFont3.Bold = False
Dim CaptionFont1 As StdFont
Set CaptionFont1 = New StdFont
CaptionFont1.Bold = True
CaptionFont1.Size = 18
Dim CaptionFont2 As StdFont
Set CaptionFont2 = New StdFont
CaptionFont2.Bold = True
CaptionFont2.Size = 14
Dim CaptionFont3 As StdFont
Set CaptionFont3 = New StdFont
CaptionFont3.Bold = True
CaptionFont3.Size = 12
'Utskriftsstorlek
Printer.ScaleMode = vbCharacters 'skala = tecken
Printer.ScaleTop = 3 'topmarginalen
Printer.ScaleLeft = 10 'vänstermarginalen
'Sidhuvud sidan 1
Printer.CurrentX = 45
Printer.CurrentY = 3
Set Printer.Font = TextFont3
Printer.Print "Kantrubrik "
Printer.CurrentX = 60
Printer.CurrentY = 3
Set Printer.Font = TextFont3
Printer.Print Date 'utskriftdagens datum
Printer.CurrentX = 80
Printer.CurrentY = 3
Set Printer.Font = TextFont3
Printer.Print "Sid: 1" 'Första sidan med angivet sidnummer direkt i koden
'Rubrik, endast på sidan 1
Printer.CurrentX = 25 'startposition för utskrift
Printer.CurrentY = 8 'startposition för utskrift
Set Printer.Font = CaptionFont1
Printer.Print "Rubrik" '; 'rubriken
Printer.CurrentX = 25
Printer.CurrentY = 11
Set Printer.Font = CaptionFont2
Printer.Print "Ärende"
'Lista
Dim sidNr As Long
sidNr = 2 'startnummer för sidnumrering
Printer.CurrentX = 25
Printer.CurrentY = 14
Set Printer.Font = CaptionFont2 'normal
Printer.Print frmSearch.lblListval.Caption, "Antal objekt i listan: ", frmSearch.lstVisaLista.ListCount
Printer.CurrentX = 25
Printer.CurrentY = 16
Set Printer.Font = TextFont2
For i = 0 To frmSearch.lstVisaLista.ListCount - 1 'från första till sista ärendet
Printer.Print frmSearch.lstVisaLista.List(i) 'skriv ut nästa i = nästa ärende
If i Mod 55 = 47 Then 'ger brytning på sidan 1 efter ärende 48
Printer.NewPage 'Mod 55=0 ger brytning efter första ärendet
Printer.CurrentX = 45
Printer.CurrentY = 3
Set Printer.Font = TextFont3
Printer.Print "Kantrubrik " 'Kantrubrik, i sidhuvud
Printer.CurrentX = 60
Printer.CurrentY = 3
Set Printer.Font = TextFont3
Printer.Print Date 'Datum för utskrift, i sidhuvud
Printer.CurrentX = 80
Printer.CurrentY = 3
Set Printer.Font = TextFont3
Printer.Print "Sid:" 'Texten "Sid:" före aktuellt sidnummer
Printer.CurrentX = 85
Printer.CurrentY = 3
Set Printer.Font = TextFont3 'Första sidan numreras i koden
Printer.Print Str$(sidNr) 'Sidnumrering vid utskrift, i sidhuvud
Set Printer.Font = TextFont2
Printer.CurrentX = 25
Printer.CurrentY = 10
sidNr = sidNr + 1 'Uppräkning av sidnumrering, start med 2
End If
Printer.CurrentX = 25 'Så att alla ärenden får samma startposition
' i x-led, listan blir läslig på papperet
Next 'i
Printer.EndDoc 'slut på dokumentet, det kan skrivas ut
End Sub
Kanske finns informationen på något annat ställe hos PelleSoft, jag har inte letat överallt. Man bör ju hitta denna om man söker med NewPage, eller? Utifall någon får hjälp av den vid problem med utskrift.
Tack för hjälpen Sven!