Avatar billede dougheffernan Nybegynder
21. maj 2003 - 16:43 Der er 7 kommentarer og
1 løsning

Gennemgå et dokument

Leder efter noget kode der kan checke det aktive dokument efter for forekomster af et bestemt ord/bogstav. Hvordan?

Her er hvad jeg har indtil videre, men det virker ikke rigtigt.

Sub FindAntalForekomster()
  Dim Antal As Long, Søgestreng As String
  Søgestreng = InputBox("Hvilket bogstav/ord vil du søge efter?")
  Antal = CountOccurrences(Application.ActiveDocument, Søgestreng)
  MsgBox "Bogstavet/ordet '" & Søgestreng & "' forekommer " & Antal & " gange i teksten"
End Sub
Function CountOccurrences(strText As Document, strFind As String, Optional lngCompare As VbCompareMethod) As Long
  Dim lngPos      As Long
  Dim lngTemp      As Long
  Dim lngCount    As Long
  lngPos = 1
  Do
      lngPos = InStr(lngPos, strText, strFind, lngCompare)
      lngTemp = lngPos
      If lngPos > 0 Then
        lngCount = lngCount + 1
        lngPos = lngPos + Len(strFind)
      End If
  Loop Until lngPos = 0
  CountOccurrences = lngCount
End Function
Avatar billede jespernaur Nybegynder
21. maj 2003 - 17:06 #1
Mangler du ikke at initialisere lngCount til 0 inden løkken går i gang?
Avatar billede mortrr Praktikant
21. maj 2003 - 17:11 #2
Det er fordi standard property på et document er dets navn, så du finder faktisk antal gange teksten optræder i dokument navnet.


Function CountOccurrences(strText As Document, strFind As String, Optional lngCompare As VbCompareMethod) As Long
  Dim lngPos      As Long
  Dim lngTemp      As Long
  Dim lngCount    As Long
  Dim strText As String
  TheDocument.Select
  strText = Selection.Text
  lngPos = 1
  Do
      lngPos = InStr(lngPos, strText, strFind, lngCompare)
      lngTemp = lngPos
      If lngPos > 0 Then
        lngCount = lngCount + 1
        lngPos = lngPos + Len(strFind)
      End If
  Loop Until lngPos = 0
  CountOccurrences = lngCount
End Function

Eller lidt kortere:

Function CountOccurrences(TheDocument As Document, strFind As String, Optional lngCompare As VbCompareMethod) As Long
  Dim strText As String, strNewText As String
  TheDocument.Select
  strText = Selection.Text
  If strFind <> "" Then
    strNewText = Replace(strText, strFind, "", 1, -1, lngCompare)
    CountOccurrences = (Len(strText) - Len(strNewText)) / Len(strFind)
  Else
    CountOccurrences = 0
  End If
End Function
Avatar billede dimle Nybegynder
26. maj 2003 - 13:31 #3
Her har du en meget enkelt, men den virker fortræffelig, hvis jeg har forstået dig korrekt!


Function FAF(strLook As String, strFind As String) As Integer
  Dim tmpCount As Integer, start As Integer
 
  start = 1
  Do While InStr(start, strLook, strFind) > 0
        start = InStr(start, strLook, strFind) + 1
        tmpCount = tmpCount + 1
  Loop
 
  FAF = tmpCount
End Function
Avatar billede dimle Nybegynder
26. maj 2003 - 13:32 #4
strLook er den streng du vil lede i og strFind den du vil finde, og så retunerer funktionen de antal forekomster der er!!
Avatar billede dougheffernan Nybegynder
16. juni 2003 - 12:28 #5
Mortrr kommer tættest på, takker for hjælpen
Avatar billede mortrr Praktikant
16. juni 2003 - 12:33 #6
Selv tak.

Kan se at jeg glemte at ændre en parameter i første funktion, men du fandt åbenbart ud af det alligevel.
Avatar billede dimle Nybegynder
16. juni 2003 - 12:36 #7
ikke det der ligner!!
Avatar billede mortrr Praktikant
16. juni 2003 - 13:06 #8
Så skal du da brokke dig.

Har du brug for mere hjælp til den?
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
Kurser inden for grundlæggende programmering

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