kjonix Skrevet 3. juni 2007 Skrevet 3. juni 2007 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?
aadnk Skrevet 3. juni 2007 Skrevet 3. juni 2007 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
kjonix Skrevet 3. juni 2007 Forfatter Skrevet 3. juni 2007 Tusen takk for godt og raskt svar!! 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... test.zip
aadnk Skrevet 3. juni 2007 Skrevet 3. juni 2007 (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 3. juni 2007 av aadnk
kjonix Skrevet 3. juni 2007 Forfatter Skrevet 3. juni 2007 Perfekt! Du er dyktig!! Skjønner at det blir leit med løpende oppdatering, men hvordan kan jeg legge opp en knapp som oppdaterer alle feltene?
aadnk Skrevet 3. juni 2007 Skrevet 3. juni 2007 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.
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå