• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Paginanummer van gevonden tekst

Status
Niet open voor verdere reacties.

robinvdveeken

Gebruiker
Lid geworden
7 sep 2010
Berichten
84
Gewaardeerde veelwetenden,

Inmiddels heb ik een groot Excelbestand met veel pagina's.
En ook een inhoudsopgave van de diverse werkbladen.
Er is één werkblad met meer dan 2500 regelnummers.
Een overzichtje van de paginanummers is dus meer dan welkom.
Ik maak een soort van index door het volgende te doen:
Code:
Sub Inhoudsopgave()

Dim NaamHoofdstuk As String
Dim NaamSubkop As String
Dim Hoofdstukregel As Range
Dim rRange As Range
Dim i As Integer 'regel op inhoudsopgave

'init
Set rRange = Worksheets("Front").Range("A81", Worksheets("Front").Range("A65536"))
i = 84 'eerste startregel inhoudsopgave

Range("A82:D125").ClearContents


 With Application
        .ScreenUpdating = False
 End With

    For Each Cell In rRange
        If Cell.Font.Size = 18 Then
        i = i + 1
        Range("A" & i) = Cell.Value
        
        End If
        If Cell.Font.Size = 14 Then
        i = i + 1
        Range("B" & i) = Cell.Value
        
        End If
         
    Next Cell
    
    
    With Application
        .ScreenUpdating = True

    End With


End Sub

Nu zou ik graag het paginanummer van deze tekst in kolom D toevoegen.
Helaas kan ik niets vinden over pagebreaks tellen met een voorwaarde. Een soort van:

Code:
Range("D" & i) = Page.actual
Ik snap dat dit wel heel eenvoudig lijkt, misschien wel te mooi om waar te zijn maar er moet toch iets voor zijn :d

Wel lees ik dat paginanummering en inhoudsopgave al meer flinke uitdagingen heeft veroorzaakt.

Iemand ideeën?

Alvast bedankt.

Groeten,
Robin
 
wat je kunt doen is een collectie maken van alle horizontale page breaks, vervolgens het lijnnummer van de actieve cell vergelijken met de collectie pagelijnen en zodoende de pagina achterhalen.

Code:
Public Function pnummer(celnr As Long) As Long
Dim hArray() As Long
Dim counter As Long
counter = 1
Dim breaker As HPageBreak
ReDim hArray(0)
For Each breaker In ActiveSheet.HPageBreaks
    
    ReDim Preserve hArray(UBound(hArray) + 1)
    hArray(counter) = breaker.Location.Row
    counter = counter + 1
    
Next breaker

Dim tresult
If UBound(hArray) = 0 Then
    tresult = 1
Else
    tresult = 1
    For i = 1 To UBound(hArray)
        If celnr >= hArray(i) Then
            
            tresult = i + 1
            
        End If
    Next i
End If

pnummer = tresult
End Function

Geen idee hoe bruikbaar dit is in echt grote sheets (snelheid). Deze functie gaat uit van horizontale pagina-indeling. De functie verwacht het rijnummer van de cel en geeft dan het overeenkomstige paginanummer. Indien je het gebruikt in een groter VBA script, kun je waarschijnlijk veel snelheid winnen door de array slechts een keer te vullen en alleen de lookup uit te voeren per cell
 
Bedankt voor de reactie Wampier.

De snelheid zal niet direct een probleem zijn als ik de macro koppel aan een knop ipv change bij value.

Toch gaat het om het pagina nummer bij de gevonde tekst en niet bij de actieve cel.
Voor de duidelijkheid heb ik een uitgekleed voorbeelbestand gemaakt, zie bijlage.

Alvast bedankt.

Groeten,
Robin
 

Bijlagen

zonder vba, conform een suggestie die ik je reeds op 28 oktober heb gedaan, zie bestandje:
 

Bijlagen

Ik begrijp de opzet, maar wat lukt er nu niet? Wat je bovenstaande functie moet voeren is een regelnummer, de functie geeft automatisch het bladnr bij die regel.

Zolang je dus weet waar de orginele text staat (zeg h1600) kun je met mijn functie: pnummer(1600). je krijgt dan de pagina terug waarop regel 1600 zich bevind.

EvR's methode werkt vaak ook prima, maar heeft als nadeel dat het moeilijker te gebruiken is in VBA :)
 
Vandaag weer eens vroeg op gestaan om met VBA aan de slag te gaan.. heerlijk :thumb:

E v R, wederom bedankt voor je reactie. Het nadeel van de door jou aangedragen methode is dat vooraf bekend moet zijn waar de titels van de inhoudsopgave komen te staan. Wanneer ik de code " =VERGELIJKEN(VERGELIJKEN(B93;A:A;0);BreakPage;1) " in meerdere cellen zet ontstaat de allom bekende weergave: #N/B
Ik kan me vorostellen dat zoeiets zou werken "=ALS(B92<>"";"=(VERGELIJKEN(VERGELIJKEN(B92;A:A;0);BreakPage;1)";"")" Helaas weet ik niet of het nesten van formules op deze manier mogelijk is.

Wampier, ik ga proberen jouw code in het geheel te voegen. Ik voorzie nog een paar probleempjes maar er even flink mee stoeien kan wonderen verichten. :)

Groeten,
Robin
 
Code:
=ALS(LENGTE(B93)=0;"";VERGELIJKEN(VERGELIJKEN(B93;A:A;0);BreakPage;1))
 
Rudi,

Wederom bedankt!
Dit klaart de klus.
Is er al een straat naar jou vernoemd?


Voor de voledigheid van het topic in de bijlage het bestand.

Groeten,
Robin
 

Bijlagen

Robin, ik denk dat alle helpers hier een dikke pluim verdienen aangezien dit geheel onbezoldig en in de vrije tijd van elkeen gedaan wordt. De mooiste beloning is altijd een groen vinkje achter een topic zien verschijnen :D en een dankwoordje van de vraagsteller geeft ook telkens een boost om ermee door te blijven gaan. :thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan