Avatar billede mskjoldp Novice
25. februar 2009 - 22:21 Der er 8 kommentarer og
1 løsning

indsæt antal tegn

Hey E
Angående word 2007
Er der nogen der ved hvordan jeg kan indsætte et automatisk opdateret felt der viser de antal tegn der er i dokumentet, dog med det ekstra forhold at antallet skal være med mellemrum, tekstbokse, fodnoter og slutnoter.

Jeg kan fint finde ud af at indsætte et automatisk opdateret felt der viser antal tegn, men der er forskel i antallet fra det autofeltet viser (84.440) og det antal jeg får oplyst hvis jeg benytter optælingsfunktionen (102.263) i word 2007.

Hvordan får jeg autofunktionen til at vise 102.263 antal tegn ?
Avatar billede Lene Fredborg Ekspert
26. februar 2009 - 00:43 #1
Er det feltet NumChars, du har brugt? NumChars tæller karakterer i dokumentet _uden_ mellemrum. Det er derfor, der er den store forskel mellem de to tal.

Først lige en bemærkning om tekstbokse: Tekstbokse er i Word's tegnelag, og tekst deri tælles _ikke_ med i Words Ordoptællings-dialogboks. Det vil kun kunne lade sig gøre at få inkluderet tekst fra tegnelaget, hvis der laves en makro, som en efter en tæller karakterer i tekstbokse og evt. figurer med tekst. Alternativt skal du konvertere tekstbokse til tekstruder. Tekstruder befinder sig i Word's tekstlag og vil derfor blive talt med.

Hvis du er tilfreds med resultaterne fra indbyggede Ordoptællings-dialogboks, kan du godt indsætte et felt, der viser en tilsvarende værdi. Du kan nemlig indsætte et DocProperty-felt, som viser karakterer inkl. mellemrum:

1. Vælg fanen Indsæt > kategorien Tekst > Hurtige dele > Felt for at åbne dialogboksen "Felt".

2. Vælg "DocProperty" under Feltnavne.

3. Vælg "CharactersWithSpaces" under Egenskab.

4. Jeg ville slå "Bevar formatering ved opdateringer" fra - men du kan vælge selv.

5. OK.

Det indsatte felt vil give samme resultat som eller komme meget tæt på det, der vises i dialogboksen Ordoptælling, som kan åbnes via statuslinjen. Der kan være en mindre afvigelse mellem de to tal - hvilket af de to tal der er mest korrekt, kan du jo prøve at tælle op ;-).

Feltet opdateres ikke automatisk (det gør de færreste felter). Det er nødvendigt at opdatere felter med F9. Feltet vil dog blive opdateret ved udskrift, hvis du har slået indstillingen Udskriv > Indstillinger > "Opdater felter før udskrivning" _til_.
Avatar billede Lene Fredborg Ekspert
26. februar 2009 - 02:48 #2
Tilføjelse:
Vedr. min bemærkning om tekstbokse: I Word 2007 kan man - som du har set - vælge at tælle tekstbokse, fodnoter og slutnoter med i dialogboksen Ordoptælling. Det kunne man ikke i tidligere versioner (jeg glemte undervejs, at der stor 2007 - beklager).

DocPropterty-feltet vil give et resultat svarende til det, Ordoptælling viser, _uden_ at afkrydsningsfeltet er slået til.

Hvis du skal have alt med, er der mig bekendt ingen vej uden om en makro.
Avatar billede mskjoldp Novice
26. februar 2009 - 13:43 #3
Hej Lene og tak for dine kommentarer. Jeg er glad for dem og kun bruge din vejledning. Jeg vil gerne give dig points...

Måske du kan hjælpe med en funktion eller macro der tæller magen til Ordoptællingen ? Dvs. inkl. tekstbokse, fod- og slutnoter.
Avatar billede Lene Fredborg Ekspert
26. februar 2009 - 16:55 #4
Tingene er ikke altid så enkle - sådan er det også med sådan noget som optællinger af tegn. Man kan ingen steder se, hvad Ordoptælling reelt laver. Efter en del forsøg har jeg nu lavet en makro, som kommer tæt på det resultat, som Ordoptælling viser (i hvert tilfælde i mine tests). Se kommentarerne i makroen.

Makroen forudsætter, at du har indsat et bogmærke med navnet "AntalTegn", der hvor antallet skal indsættes.


Sub CountAllCharactersInDocument()

    Dim oStory As Range
    Dim nCount As Long
    Dim oRange As Range
   
    'Tæller alle karakterer i det aktive dokument
    'Hvis et bogmærke ved navn "AntalTegn" eksisterer i dokumentet
    'bliver det opdateret med værdien
   
    nCount = 0

    'Sammenlæg tegn fra alle stories
    For Each oStory In ActiveDocument.StoryRanges
        'Spring over sidehoved og -fod
        If oStory.Information(wdInHeaderFooter) = True Then GoTo SkipStory
        nCount = nCount + oStory.Characters.Count
        'Afsnitstegn er talt med - det er de ikke i Ordoptælling - træk antal afsnit fra
        nCount = nCount - oStory.Paragraphs.Count
SkipStory:
    Next oStory

    'Opdater bogmærke, hvis det findes
    'koden er nødt til at lave selve bogmærket igen, da det bliver slettet
    With ActiveDocument
        If .Bookmarks.Exists("AntalTegn") Then
            Set oRange = .Bookmarks("AntalTegn").Range
            oRange.Text = nCount
            'indsæt bogmærke igen
            .Bookmarks.Add "AntalTegn", oRange
        End If
    End With
   
    'Ryd op
    Set oStory = Nothing
    Set oRange = Nothing
End Sub
Avatar billede mskjoldp Novice
27. februar 2009 - 10:49 #5
Super nice :)
Der er dog noget forskel i optællingen. Du får points nu hvis du føler for det, men her er forskellen:

det første felt vi indsatte viser: 103.850
Ordoptællingen viser også 103.850 hvis fluebenet er fravalgt, men hvis fluebenet er påsat viser Ordoptællingen 106.098
Macroen viser 113.058

Så der er en stor forskel i macrooptællingen ift. Ordoptællingen.

Jeg kan godt se hvordan du har opbygget macroen og tror jeg forstår den. Jeg vil også gerne slippe dig i dette spørgsmål hvis du kan hjælpe mig med at komme tættere på 106.098 tegn, enten ved at skrive macroen om eller ved at angive et vedsted der kan forklare de forskellige funktioner til oproptælling i visualBasic :)

Jeg kan selvfølgelig lige prøve her på eksperten.dk ;)
Avatar billede mskjoldp Novice
27. februar 2009 - 11:01 #6
Jeg kommer i tanke om at jeg i dokumentet bruger registrerede ændringer, dvs. at jeg overskriver gammel tekst med ny tekst, men det gamle tekst bliver i dokumentet farvet rødt og overstreget. Jeg har testet Ordoptællingen og den fraregner det tekst der er overskrevet grundt registrerede ændringer funktionen....

Måske det er forklaringen på tællemåden :) Måske macroen kan indeholde denne fratælling?
Avatar billede Lene Fredborg Ekspert
27. februar 2009 - 19:56 #7
Er det sådan, at du skal have antal tegn til at stå i dokumentet i udskrevet form? Ellers var det måske smartere at bruge Ordoptælling. Det er jo på en eller anden måde lidt tosset at kaste masser af kræfter efter at skrive makroer til noget, som findes direkte i programmet.

Nedenfor finder du en version af makroen, hvor hver revision bliver gennemgået. Hvis det er en sletning, bliver antal tegn trukket fra det samlede antal tegn. Ved en test i et dokument med ca. 7000 tegn var der kun en afvigelse fra Ordoptælling på ét tegn med denne version. Men der er givetvis andre ting, som den indbyggede Ordoptælling gør anderledes, så du alligevel ikke ender på det samme tal. Jeg tror, du skal regne med, at dette er sidste version af makroen fra min side i denne omgang ;-)


Sub CountAllCharactersInDocument()

    Dim oStory As Range
    Dim nCount As Long
    Dim oRange As Range
    Dim oRevision As Revision
   
    'Tæller alle karakterer i det aktive dokument
    'Hvis et bogmærke ved navn "AntalTegn" eksisterer i dokumentet
    'bliver det opdateret med værdien
   
    nCount = 0

    'Sammenlæg tegn fra alle stories
    For Each oStory In ActiveDocument.StoryRanges
        'Spring over sidehoved og -fod
        If oStory.Information(wdInHeaderFooter) = True Then GoTo SkipStory
        nCount = nCount + oStory.Characters.Count
        'Afsnitstegn er talt med - det er de ikke i Ordoptælling - træk antal afsnit fra
        nCount = nCount - oStory.Paragraphs.Count
SkipStory:
    Next oStory

    'Gennemgå alle registrerede ændringer
    'Hvis det er sletninger, træk antal tegn fra nCount
    For Each oRevision In ActiveDocument.Revisions
        If oRevision.Type = wdRevisionDelete Then
            nCount = nCount - oRevision.Range.Characters.Count
        End If
    Next oRevision
   
    'Opdater bogmærke, hvis det findes
    'koden er nødt til at lave selve bogmærket igen, da det bliver slettet
    With ActiveDocument
        If .Bookmarks.Exists("AntalTegn") Then
            Set oRange = .Bookmarks("AntalTegn").Range
            oRange.Text = nCount
            'indsæt bogmærke igen
            .Bookmarks.Add "AntalTegn", oRange
        End If
    End With
   
    'Sæt indstilling for Registrer ændringer tilbage igen
    ActiveDocument.TrackRevisions = bTrackRevisions
   
    'Ryd op
    Set oStory = Nothing
    Set oRange = Nothing
End Sub
Avatar billede mskjoldp Novice
28. februar 2009 - 21:49 #8
tak
er du sød at lægge et svar så du kan få points :)
Avatar billede Lene Fredborg Ekspert
28. februar 2009 - 22:12 #9
Kommer her...
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
Tag et kursus i Word og øg effektiviteten

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