Gå til innhold

Telle antall spesifiserte ord.


Anbefalte innlegg

Skrevet

VB (VBA) er ikke min sterkeste side, prøver derfor om det er noen kloke hoder her:

 

Jeg skal lage en wordmal som teller antall ord spesifisert i noen tekstbokser.

 

Jeg kjenner til denne:

ThisDocument.label1 = ThisDocument.words.Count

Som skriver antall ord i dokumentet til et tekstetikett.

 

Hvordan kan jeg definere hva slags ord som skal telles?

 

La oss si at jeg har 5 tekstbokser hvor jeg skriver inn 5 ord og ved siden av disse tekstboksene vil jeg ha et tall som viser hvor mange ganger dette ordet er skrevet i teksten...

 

Noen?

Videoannonse
Annonse
Skrevet

Klikk ALT+F11 og lim inn følgende tekst:

Option Compare Text

 

Public Function CountWord(Text As String) As Long

 

    Dim Word As Object

 

    ' Gå gjennom alle registrere ord

    For Each Word In ThisDocument.Words

        If Word = Text Then

            CountWord = CountWord + 1

        End If

    Next

 

End Function

Når du så dobbelklikker på en av tekstboksene, må koden som dukker opp omskrives til følgende (husk å bruke riktige navn på TextBox1 og Label1):

Private Sub TextBox1_Change()

    Label1.Caption = CountWord(TextBox1.Text)

End Sub

Skrevet

Tusen takk for godt og raskt svar!! :thumbup:

 

Har likevel noen problemer:

- Teller bare riktig på noen av ordene...

- Legger jeg space i tekstboksen skjer det snåle ting

- Lar det seg gjøre å få den til å telle automatisk fortløpende?

 

Legger ved tekstfilen om du gidder å ta en titt... :blush:

test.zip

Skrevet (endret)
- Teller bare riktig på noen av ordene...

8773550[/snapback]

Jeg har dessverre ikke Office 2007, så jeg kan ikke bekrefte det første problemet ditt, men jeg vil tro det har tilknytning til hvorhen ordene befinner seg (i en paragraf, overskrift, ect.)

 

- Legger jeg space i tekstboksen skjer det snåle ting

8773550[/snapback]

Det er vel ikke så overraskende? Ord kan ikke ha mellomrom i seg. Dersom du ønsker å telle flere ord, er det bare å legge til flere tekstbokser, evt. bruke Split() og Join(). Denne oppdaterte versjonen kan muligens også fikse det første problemet ditt:
Option Compare Text

 

Public Function CountWord(Text) As Long

 

    Dim Word As Object

 

    ' Gå gjennom alle registrere ord

    For Each Word In ThisDocument.Words

        If Trim(Word) = Text Then

            CountWord = CountWord + 1

        End If

    Next

 

End Function

 

Private Sub TextBox1_Change()

   

    Dim vWord

   

    ' Tilbakestill merknadsboks

    Label1.Caption = ""

   

    ' Tell alle ord

    For Each vWord In Split(TextBox1.Text, " ")

        Label1.Caption = Label1.Caption & CountWord(vWord) & " "

    Next

   

End Sub

- Lar det seg gjøre å få den til å telle automatisk fortløpende?

8773550[/snapback]

Nei, ikke gjør dette. Jeg prøvde å få dette til med en løkke, men alt gikk i sirup og ordtellingen fungerte ikke engang. Jeg vet ikke om dette fungerer bedre i Office 2007, men jeg ville heller benyttet en knapp eller noe liknende for å oppdatere statistikken. Det kan ta tid å telle alle ordene i et stort dokument. Endret av aadnk
Skrevet

Perfekt! Du er dyktig!! :thumbup:

 

Skjønner at det blir leit med løpende oppdatering, men hvordan kan jeg legge opp en knapp som oppdaterer alle feltene?

Skrevet
Skjønner at det blir leit med løpende oppdatering, men hvordan kan jeg legge opp en knapp som oppdaterer alle feltene?

8774753[/snapback]

Legg til en kommandoknapp og lim inn følgende kode:

Private Sub CommandButton1_Click()

    TextBox1_Change

End Sub

Det burde gjøre susen. :)

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...