11. december 2000 - 12:49Der er
4 kommentarer og 1 løsning
sidenummer ved udskrift
Jeg har en større tabel med alarmer, der kan sorteres efter forskellige kriterier. Hver alarm har endvidere et løbenummer. Jeg gerne vil knytte en indholdsfortegnelse til alarmerne, så man kan se, at alarm 1 udskrives (findes på) side 4, nr. 2 på side 11 o.s.v. Er der nogen, der kender et trick, f.eks noget makro, så man kan få adgang til sidenummeret i \"footeren\" og skrive det i en celle i alarmens række? D.v.s. at hver alarmrække har et sted, hvor sidenummeret, den udskrives på, står (alarmteksterne varierer i længde og er ombrudt, så man kan næppe regne sig til et sidenummer).
Function side(R As Range) Dim r2 As Range, r3 As Range Dim nr As Variant Set r3 = Range(\"a1\", Cells(R.Row, 1)) MsgBox r3.Address nr = 1 For Each r2 In r3 If r2.EntireRow.PageBreak <> xlPageBreakNone Then nr = nr + 1 Next r2 side = nr End Function
Funktionen tæller pagebreaks fra A1 til den pågældende række.
Men det kører vildt langsomt. Det hænger vist nok sammen med at excel bruger printerdriveren til at bestemme pagebreaks med.
Følgende funktion er mindre fleksibel men kører lidt hurtigere idet den kun ser på om der er pagebreak i den pågældende række. Ellers er siden den samme som det nummer der stå i cellen oven over. \"On Error resume next\" er til ære for række 1. Det kræves altså at funktionen bruges i alle rækker i tabellen:
Function side(r As Range) On Error Resume Next side = 1 If r.EntireRow.PageBreak <> xlPageBreakNone Then side = r.Offset(-1) + 1 Else side = r.Offset(-1) End If End Function
Det ser godt ud, men hvordan bruger jeg den nederste model? Jeg har skrevet koden ind i Visual Basic, men hvordan kan jeg få den ændret til en brugerdefineret funktion, så jeg kan bruge den? Eller skal jeg bruge den på en helt anden måde (jeg har kun erfaring med makroer optaget med makroafspilleren og efterfølgende eventuelt redigeret)
Nu har jeg fået det til at virke formelt ved at oprette et module, men det første kodeforslag er, som du også skrev, ekstremt langsomt. Det nederste kodeforslag duer ikke - uanset hvilket argument, jeg stopper i det kommer der noget underligt ud - hvilket argument er der forudset? Den øverste kode virker med f.eks. en cellebetegnelse fra 1. søjle.
Som argument kan cellen hvor formlen er i bruges, eller blot en celle i samme række. Du får måske en fejl fordi du i VBA under tools/options/general har valgt \"Break on all errors\" Vælg \"break on unhandled errors\" Ellers burde det virke hvis du starter fra oven af i dit udskriftområde. Men i øvrigt hvis dine rækker er lige høje i tabelområdet, hvad så med at lade være med at sortre kolonnen med sidenumre?
Ja, nu virker det fint, jeg havde kvajet mig og skrevet \"paeg\" i stedet for \"page\" - det gjorde en mindre forskel!
Tak for hjælpen
Hilsen vjorgensen
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.