Avatar billede festjest Nybegynder
02. juni 2005 - 12:22 Der er 4 kommentarer

Side nummerering udenom Sidefod

Er det muligt at indsætte en automatisk sidenummerering i celler ? Er der evt. en formel eller lign. jeg kan bruge ?
Avatar billede jkrons Professor
02. juni 2005 - 13:24 #1
Det kan kun lade sig gøre via programmring, koden er langsom. og den er heller ikke helt nem at bruge, hvis du skal have sidenummeret til at stå mere end et sted - og det skal du, hvis der er flere sider.

Men her er koden - eller retter koderne, for der skal flere makroer til, for at løse problemet:

Function GetPageNumber(Rng As Range) As Long
  'NOTE: Rng must be a cell on the active sheet
  Dim PrintAreaAddress As String, rngPrintArea As Range
  Dim R0 As Long, C0 As Long
  Dim PAHeight As Long, PAWidth As Long
  Dim Down As Long, Across As Long
  Dim Outside As Long
 
  With Rng.Parent
    PrintAreaAddress = ExecuteExcel4Macro("GET.DOCUMENT(81)")
    If PrintAreaAddress <> "" Then
      Set rngPrintArea = .Range(PrintAreaAddress)
    Else
      With .UsedRange
        Set rngPrintArea = .Cells(.Cells.Count)
      End With
      Set rngPrintArea = .Range(.Cells(1, 1), rngPrintArea)
    End If
  End With
 
  If Intersect(Rng, rngPrintArea) Is Nothing Then
    GetPageNumber = 0
    Exit Function
  End If
 
  R0 = rngPrintArea.Row
  PAHeight = GetRowBreaks(R0 + rngPrintArea.Rows.Count - 1) + 1
  Down = GetRowBreaks(Rng.Row) + 1
  If R0 > 1 Then
    Outside = GetRowBreaks(R0)
    PAHeight = PAHeight - Outside
    Down = Down - Outside
  End If
 
  C0 = rngPrintArea.Column
  PAWidth = GetColBreaks(C0 + rngPrintArea.Columns.Count - 1) + 1
  Across = GetColBreaks(Rng.Column) + 1
  If C0 > 1 Then
    Outside = GetColBreaks(C0)
    PAWidth = PAWidth - Outside
    Across = Across - Outside
  End If
 
  If ExecuteExcel4Macro("GET.DOCUMENT(61)") = 1 Then
    GetPageNumber = PAHeight * (Across - 1) + Down
  Else
    GetPageNumber = PAWidth * (Down - 1) + Across
  End If
End Function

Private Function GetColBreaks(ColNum As Long) As Long
  Dim sTemp As String
  sTemp = Replace("MATCH(#,GET.DOCUMENT(65),1)", "#", ColNum)
  On Error Resume Next
  GetColBreaks = ExecuteExcel4Macro(sTemp)
End Function
Avatar billede festjest Nybegynder
02. juni 2005 - 14:33 #2
Tak skal du ha' :)
Avatar billede stefanfuglsang Juniormester
02. juni 2005 - 14:39 #3
Kan man ikke lave noget enklere med
.VPageBreaks og .HPageBreaks?
jeg har ikke nogen færdig løsning, men man kan i hvert fald finde cellerne med sideskifte med nedenstående skitserede kode:
Sub pages()
    Dim vpb As VPageBreak
    Dim hpb As HPageBreak
    For Each vpb In Worksheets(1).VPageBreaks
        ' brug  vpb.Location.Address
    Next
    For Each hpb In Worksheets(1).HPageBreaks
        ' brug hpb.Location.Address
    Next

End Sub
Avatar billede jkrons Professor
06. juni 2005 - 10:26 #4
stefanfuglsang-> Jeg kan godt finde sideskiftene med din kode, men jeg skal stadig have at vide hvilket sidenummer, der er tale om. Og da udskriften kan gå både på tværs og nedad, er det ikke givet bare ved et sideskift. Den samme side kan fx være side 2 hvis der udskrives den ene vej, og side 19, hvis der udskrives den anden.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Excel kurser for alle niveauer og behov – find det kursus, der passer til dig

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester