14. februar 2007 - 12:59Der er
37 kommentarer og 1 løsning
VBA: Tæl ord indenfor defineret område
Hej Hvordan laver jeg noget kode, så jeg kan få talt hvor mange ord der er indenfor et defineret område (forside, indholdsfortegnelse, sidehoved og bilag skal ikke tælles med)?
Hvis du kan dele dit dokument op i sektioner, så kan du bruge denne kode til at tælle ordene:
Sub TællerOrdSektioner()
'Gennemløber alle sektioner For Each sec In ActiveDocument.Sections
'Sætter MyRange = den aktuelle sektion Set MyRange = sec.Range
'Gennemløber alle ordene i sektionen For Each wor In MyRange.Words wor.Select ord = Selection 'Fjerner enter som den også tæller med If (Asc(ord) <> 13) And (Asc(ord) <> 12) Then 'Bruges til at tjekke asci værdien, hvis du finder flere tegn du ikke vil have talt svar = Asc(ord) 'Tæller antallet af ord i sektionen tæl = tæl + 1 End If Next MsgBox "Der er " & tæl & " ord i sektion " & sec.Index tæl = 0 Next
Sektioner kunne være en mulighed. Jeg gør ud fra, at jeg skal dele mit dokument op i fire dele:
1) Forside + indholdsfortegnelse 2) Selve opgaven 3) Dokumentation for sideantal + litteraturliste (skal ikke tælles med!) 4) Bilag
Kan jeg så ikke bruge sektion, når jeg er færdig med et afsnit og vil starte næste afsnit i starten af næste side (plejer at bruge sektion skift, næste side)?
En anden ting er, at sidehoved og sidefod ikke skal tælles med, hvis man kan lave den undtagelse.
Hvis du ved hvor mange sektioner der er før du vil begynde at tælle og hvor mange der er efte du vil begynde at tælle, så kan du nøjes med at loope dem.
Jeg kan godt holde styr på, hvor mange sektioner der bliver anvendt i dokumentet.
Kan vi bruge karakter (inkl. mellemrum) i stedet for ord?
Kan vi også tælle figurer og tabeller i dokumentet? Når vi kan antallet af karakter samt figurer og tabeller (hver figur og tabel tæller som 700 karakter) divideres det med 2275. Resultatet er normalsider.
Antal af bilag skal også tælles. Dette skal kun ske ved, at der tælles antal sider.
Hvordan bliver resultaterne indskrevet i dokumentet under afsnitet "Dokumentation for sideantal". Det skal ud som følgende:
Antal karakter (inkl. mellemrum): Antal fugurer: Antal tabeller:
------------------- Antal normalsider: Antal bilag:
Det vil være en meget stor hjælp, hvis du kan lave koden til dette, da jeg ikke selv kan. På forhånd mange tak.
Du skal indsætte et bogmærke, der hedder "Statistik" i dokumentet, der hvor teksten skal stå: Vælg Indsæt/Bogmærke og skriv "Statistik som bogmærkenavn.
Tæller koden ikke alle karakter i dokumentet nu? Hvad bliver talt? Der er sider som ikke skal tælles med som f.eks. forside og indholdsfortegnelse (samt bilag).
Kunne man ikke definere et område ved at indsætte en skjul kode som f.eks. ###, og gøre denne tekst hvid så den kun læses af koden?
Jo - koden tæller alle sider nu. Du skrev tidligere at du godt kan holde styr på antallet af sektioner i dokumentet. Du inddelte det f.ek. i 4 sektioner. Så kan du lave koden om til:
Sub Tæller_I_Sektioner()
Dim karakterer As Long Dim tabeller As Long Dim figurer As Long Dim sec As Section Dim Myrange As Range Dim normalsider As Double
'Gennemløber alle sektioner undtagen første og sidste For n = 2 To ActiveDocument.Sections.Count - 1
'Sætter MyRange = den aktuelle sektion Set Myrange = ActiveDocument.Sections(n).Range karakterer = karakterer + Myrange.Characters.Count tabeller = tabeller + Myrange.Tables.Count
On Error Resume Next figurer = figurer + Myrange.ShapeRange.Count If Err Then figurer = figurer + 0 End If On Error GoTo 0 Next
I Sub Tæller_I_Bogmærke() får jeg en fejlmeddelelse: Compile error: Next Without For
I Sub Tæller_I_Sektioner()skriver den bare 0 i alle felter. Jeg har delt dokumentet op i fire dele vha. sektioner. Jeg forstår ikke helt:
For n = 2 To ActiveDocument.Sections.Count - 1
Du skriver, at koden Gennemløber alle sektioner undtagen første og sidste. Kunne man ikke skrive hvilke sektioner som skal tælles ved at angive sektionerne som f.eks. 2,3,4 (hvis man har delt dokumentet op i flere dele end fire)?
I nedenstående kode kan du selv vælge hvilke sektioner du vil have talt:
Sub Tæller_I_Sektioner()
Dim karakterer As Long Dim tabeller As Long Dim figurer As Long Dim Myrange As Range Dim normalsider As Double Dim MyArray() As String Dim svar As String
svar = InputBox("Indtast sektioner, der skal tælles", "Sektionstæller", "2,3")
MyArray = Split(svar, ",")
'Gennemløber alle sektioner i samlingen For I = 0 To UBound(MyArray) Set Myrange = ActiveDocument.Sections(MyArray(I)).Range
Den er næsten ved at være der, men mangler følgende rettelser:
Kunne man lave et lille sikkerhedstjek, hvor man finder antallet af sektioner og skriver resultatet ud i forbindelsen med indtastningsfeltet?
Som det er nu, skal man angive de sektioner som skal tælles med sådan 2,3,4, men kunne man ikke skrive 2-4 (men kunne også komme ud for, at det skulle være 2-25)?
Kan vi ikke tælle bilagene?
Er det muligt, at formatere resultatet så tallene står på række under hinanden?
Hvis vi kan få de sidste ting på plads vil det være super:-)
Dim karakterer As Long Dim tabeller As Long Dim figurer As Long Dim Myrange As Range Dim normalsider As Double Dim MyArray() As String Dim svar As String Dim sec As Section Dim Indtast As String
For Each sec In ActiveDocument.Sections If Indtast = "" Then Indtast = sec.Index Else Indtast = Indtast & ", " & sec.Index End If Next
svar = InputBox("Fjerne de sektioner, der ikke skal tælles", "Sektionstæller", Indtast)
MyArray = Split(svar, ",")
'Gennemløber alle sektioner i samlingen For I = 0 To UBound(MyArray) Set Myrange = ActiveDocument.Sections(MyArray(I)).Range
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.