Avatar billede familienriis Nybegynder
02. december 2006 - 01:46 Der er 13 kommentarer og
1 løsning

bogmærke / indholdsfortegnelse

Er det muligt at lave bogmærker og derefter slå op i en celle hvilken side bogmærket står på.

Jeg skal bruge problem stillingen til en indholdsfortegnelse

Opgørelse 1  side xx
Opgrørlse 2  side xx
Opgørelse 3  side xx
Avatar billede excelent Ekspert
02. december 2006 - 09:34 #1
Stil markør i den celle hvor du vil have bogmærke
Vælg menuen Indsæt > Navn > Definer
I feltet Navne i Projektmappe skriver du fx. Opgørelse.1_side
(bemærk: der må ikke være mellemrun i navn og visse ord er reserverede)
Klik på  tilføj
I feltet Refererer til kan du blot skrive =" Side xx "
Herefter kan du hvor som helst i projektmappen skrive =Opgørelse.1_side
Avatar billede excelent Ekspert
02. december 2006 - 09:52 #2
I feltet Navne i Projektmappe kan du fx. nøjes med Opg.1
Avatar billede familienriis Nybegynder
02. december 2006 - 12:20 #3
Det er super. Det kan jeg godt få til at fungere, men jeg har brug for at excel i et felt indsætter det sidetal som min referencecelle står i.

altså hvis cellen "opg1" står på side 5 i min projektmappe så skal der automatisk indsættes "5" (i min indholdsfortegnelse), altså sidetallet hvorpå  cellen "opg1" står.
Avatar billede excelent Ekspert
02. december 2006 - 12:31 #4
når du skriver 'side' mener du så 'Ark' ?
Avatar billede familienriis Nybegynder
02. december 2006 - 12:46 #5
Jeg har eks. 5 ark med ca. 3 sider på hver (ved udskrift til printer)
Jeg vil derfor i min inholdsfortegnelse gerne have vist hvilken side ark 1 starter på, hviken side ark 2 starter på osv.

Men da hvert ark variere i længde fra gang til gang er "startsiden" ikke hele tiden den samme.
Det jeg leder efter er faktisk bare en indholdsfortegnelse, ligesom man kan definere i Word.
Avatar billede excelent Ekspert
02. december 2006 - 12:56 #6
ja den funktion findes ikke mig bekendt i excel
kender heller ikke nogen formler som klarer dette
så du skal nok ud i noget VBA for at løse dette

prøv søg i experten efter lignende spørgsmål
Avatar billede familienriis Nybegynder
02. december 2006 - 13:01 #7
Det er jo rimelig let at indsætte side tal i side hoved eller side fod.
Kan man ikke indsætte sidetal i en specifik celle midt på arket?
Så kan jeg j bare referere til denne celle.
Avatar billede familienriis Nybegynder
02. december 2006 - 13:21 #8
Denne makro skulle sætte et side tal ind øverst på hver side, men jeg får en fejl i linien:

Range("F" & vPageNo + lOffSet) = x + 1

Er der nogen der kan fortælle mig hvorfor.

Makroen er hentet i dette spørgsmål:
http://www.eksperten.dk/spm/647973


Sub SetPageNumber()
Dim vPageNo As Variant
Dim vTotalPages As Variant
Dim x As Long
Dim lOffSet As Long

  lOffSet = 0
  vTotalPages = ExecuteExcel4Macro("get.document(50)")
  For x = 0 To vTotalPages - 1
      vPageNo = ExecuteExcel4Macro("index(get.document(64)," & x & ")")
      Range("F" & vPageNo + lOffSet) = x + 1
  Next

End Sub
Avatar billede excelent Ekspert
02. december 2006 - 20:34 #9
den virker fint i mit ark

hvilken fejl får du ?
Avatar billede familienriis Nybegynder
02. december 2006 - 23:59 #10
Den skriver "runetime error '13'
Type Mismatch

Når jeg klikker på debug viser den at der er fejl i denne linie:

Range("F" & vPageNo + lOffSet) = x + 1
Avatar billede excelent Ekspert
03. december 2006 - 21:41 #11
Fandt denne kode på nettet
er ikke helt det du søger, men et skridt på vejen

Function GetPageRangeAddresses(ws As Worksheet) As Collection
' returns a collection containing the page range addresses of a worksheet
Dim h(1 To 2) As Integer, v(1 To 2) As Integer
Dim r(1 To 2) As Long, c(1 To 2) As Long
Dim strRangeAddress As String, coll As Collection, rngPrintRange As Range
    If ws Is Nothing Then Exit Function
    Set coll = New Collection
    With ws
        ' determine if a print range is set
        On Error Resume Next
        Set rngPrintRange = .Range(.PageSetup.PrintArea)
        On Error GoTo 0
       
        ' determine the last used cell
        With .Range("A1").SpecialCells(xlCellTypeLastCell)
            r(2) = .Row
            c(2) = .Column
        End With
       
        ' count page breaks (manual+automatic)
        h(2) = .HPageBreaks.Count
        v(2) = .VPageBreaks.Count
       
        For v(1) = 0 To v(2)
            For h(1) = 0 To h(2)
                strRangeAddress = vbNullString
                ' upper left cell
                r(1) = 1
                c(1) = 1
                If h(1) > 0 Then
                    r(1) = .HPageBreaks(h(1)).Location.Row
                End If
                If v(1) > 0 Then
                    c(1) = .VPageBreaks(v(1)).Location.Column
                End If
                strRangeAddress = .Cells(r(1), c(1)).Address & ":"
               
                ' lower right cell
                r(1) = r(2)
                c(1) = c(2)
                If h(1) < h(2) Then
                    r(1) = .HPageBreaks(h(1) + 1).Location.Row - 1
                End If
                If v(1) < v(2) Then
                    c(1) = .VPageBreaks(v(1) + 1).Location.Column - 1
                End If
                strRangeAddress = strRangeAddress & .Cells(r(1), c(1)).Address
               
                ' add the range to the collection that the function will return
                If Not rngPrintRange Is Nothing Then ' a print range is set
                    ' return only the range intersecting the print range
                    strRangeAddress = Intersect(.Range(strRangeAddress), rngPrintRange).Address
                End If
                On Error Resume Next
                coll.Add strRangeAddress, strRangeAddress
                On Error GoTo 0
            Next h(1)
        Next v(1)
    End With
    If coll.Count > 0 Then
        Set GetPageRangeAddresses = coll
    End If
    Set rngPrintRange = Nothing
    Set coll = Nothing
End Function

Sub TestGetPageRangeAddresses()
Dim coll As Collection, i As Integer, strResult As String
    If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
    Set coll = GetPageRangeAddresses(ActiveSheet)
    If coll Is Nothing Then Exit Sub
    strResult = vbNullString
    For i = 1 To coll.Count ' contains the cell range address for each page
        strResult = strResult & "Page " & i & ": " & coll(i) & vbLf
    Next i
    MsgBox strResult, vbInformation, "Page Ranges in " & ActiveSheet.Name
    Set coll = Nothing
End Sub
Avatar billede excelent Ekspert
03. december 2006 - 22:23 #12
udskift Sub delen af ovenstående med denne reviderede kode
som indsætter side nr i øverste venstre hjørne af hver side

Sub TestGetPageRangeAddresses()
Dim coll As Collection, i As Integer, strResult As String
    If TypeName(ActiveSheet) <> "Worksheet" Then Exit Sub
    Set coll = GetPageRangeAddresses(ActiveSheet)
    If coll Is Nothing Then Exit Sub
    strResult = vbNullString
    For i = 1 To coll.Count ' contains the cell range address for each page
        strResult = strResult & "Page " & i & ": " & coll(i) & vbLf
    Range(Mid(coll(i), 1, Application.Search(":", coll(i)) - 1)) = i
    Next i
    'MsgBox strResult, vbInformation, "Page Ranges in " & ActiveSheet.Name
    Set coll = Nothing
End Sub
Avatar billede familienriis Nybegynder
18. december 2006 - 21:39 #13
Hey.
Jeg havde slet ikke set at der var kommet en kommentar til mig spørgsmål
Mange tak for det

Det virker godt nok indenfor en enkelt fane.
Kan man ikke definere koden sådan at den skal nummerere alle sider indenfor eks. ark1-ark9

Hvis ark1 slutter med side 5 skal ark2 starte med side 6 osv.
Avatar billede familienriis Nybegynder
13. januar 2007 - 00:54 #14
jeg lukker
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