Avatar billede besida Nybegynder
05. marts 2009 - 21:30 Der 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?

min kode for søgningen er blot.

Private Sub CommandButton1_Click()

Dim R As Range, FindAddress As String

With Ark2.Range("B21:B300")

Set R = .find("abc")

If Not R Is Nothing Then

FindAddress = R.Address

Ark2.Range("f3") = R.Address

End If
   
End With
   
End Sub
Avatar billede jkrons Professor
06. marts 2009 - 01:03 #1
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.
Avatar billede besida Nybegynder
06. marts 2009 - 18:33 #2
Hej Jkrons

Det virker bare perfekt.

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?

Tusinde tak for hjælpen!
Avatar billede jkrons Professor
06. marts 2009 - 23:24 #3
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.
Avatar billede besida Nybegynder
07. marts 2009 - 00:15 #4
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.
Avatar billede jkrons Professor
07. marts 2009 - 10:36 #5
Så er det en lidt større operation, men jeg prøver at se på den. Er det stadig Ark2!B21:B300, der skal "ledes" i?
Avatar billede besida Nybegynder
07. marts 2009 - 11:33 #6
Ja, det er det nemlig :)

opslagsværdierne er i range("b3:B18")

tusinde tak jkrons:)
Avatar billede besida Nybegynder
10. marts 2009 - 21:36 #7
Hej Jkrons.

Kan det lade sig gi' sig, eller skal jeg blot køre subben på alle linierne, langsom process, men hurtigere end den manuelle metode:)
Avatar billede jkrons Professor
11. marts 2009 - 17:51 #8
Det kan godt lade sig gøre,. Jeg er desværre bare blevet arbejdsramt i middelsvær grad, så det kniber med tiden til at få gjort noget ved det. Sorry.
Avatar billede besida Nybegynder
13. marts 2009 - 19:20 #9
Det skal der i hvert fald også være plads til:)
Jeg venter spændt.!
Avatar billede besida Nybegynder
10. august 2010 - 19:07 #10
Lukkes
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
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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