05. marts 2009 - 21:30Der er
9 kommentarer og 1 løsning
Sidetal
Hej
Jeg har et dokument, hvor jeg søger efter bestemte indtastede værdier, længere nede i arket. Cellen hvor det søgte information findes, angives i celle F3.
Når min søgning er færdig, angiver den eks. §B§222 i celle F3.
Hvorn får jeg den information omsat til hvad side "resultatet af søgningen" findes?
Det er ikke noget problem at finde en celle. Problemet er desværre, at det kan være svært at finde ud af, hvilken side en celle står på, da det jo afhænger af rækkehøjder, skriftstørrelser, manuelt indsatte sideskift osv.
Her er en mulighed omend lidt tung.
I et almindeligt modul i den mappe, hvor du skal bruge din knap, indsætter du nedenstående funktion.
*************************************
Public Function Sidetal(Optional ByRef rng As Excel.Range) As Variant 'Oprindeligt udviklet af J. E. McGimpsey, 2007. 'Modificeret JKrons, 2008 Dim pbH As HPageBreak Dim pbV As VPageBreak Dim nHPB As Long Dim nVPB As Long Dim nSidetal As Long
On Error GoTo Fejl Application.Volatile If rng Is Nothing Then _ Set rng = Application.Caller With rng If .Parent.PageSetup.Order = xlDownThenOver Then nHPB = .Parent.HPageBreaks.Count + 1 nVPB = 1 Else nHPB = 1 nVPB = .Parent.VPageBreaks.Count + 1 End If nSidetal = 1 For Each pbH In .Parent.HPageBreaks If pbH.Location.Row > .Row Then Exit For nSidetal = nSidetal + nVPB Next pbH For Each pbV In .Parent.VPageBreaks If pbV.Location.Column > .Column Then Exit For nSidetal = nSidetal + nHPB Next pbV End With Sidetal = nSidetal ResumeHere: Exit Function Fejl: Sidetal = CVErr(xlErrRef) Resume ResumeHere End Function
********************************************
Ret dernæst koden på din knap til:
Private Sub CommandButton1_Click() Dim R As Range, FindAddress As String With Ark2.Range("B21:B300") Set R = .Find("def") If Not R Is Nothing Then FindAddress = R.Address Ark2.Range("f3") = R.Address Ark2.Range("g3") = Sidetal(R) End If End With End Sub
Så skriver den sidetallet for den fundne celle i G3. Skal du skrive det i F3 i stedet for adressen retter du bare G3 til F3 og sletter linjen, der nu skriver adressen.
Hvis jeg vil lave en makro, der gør det samme i range("b3:B78"), altså benytter denne range som opslags værdi, og kører denne ned igennem, og faktisk danner en indholdsfortegnelse.
Er det så nok at bare modificere koden for knappen?
Som du havde opdaget i mit forrige spørgsmål, er det muligt at benytte denne metode på en anden åben workbook, men starte makroen i den først workbook?
Jeg er ikek helt sikker på at jeg forstår, hvad du mener? Skal den bare lede et andet område igennnem? Ellers skal den lede efter alle de referencer, der står i området?
Du kan godt starte en kode i en workbook, der arbejder i en anden workbook, men så skal navnet på den workbook skrives ind i koden.
Ud for hvert afsnit der bliver dannet i rapporten, sættes der en ny linie ind på side, under de eksisterende punkter. Indholdsfortegnelsen bliver dannet fint nok, men det er sidetallene jeg aldrig har kunnet få ind, for hvert afsnit. Eksempelvis bliver alle afsnit sat ind på side, i kolonne b.
Koden skal så for hvert afsnit der er angivet i indholdsfortegnelsen, angive sidenummer. blot køre dne kode du har alvet, på alle afsnit i indholdsfortegnelsen. Range("B3:B40"), og så tilsvarende i kolonne f, sætte sidetallet ud foran afsnittet.
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.