25. februar 2009 - 22:21Der 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 ?
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_.
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.
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
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 ;)
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?
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
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.