tonissteiner
Gebruiker
- Lid geworden
- 17 sep 2008
- Berichten
- 352
Hallo,
ik loop vast op een macro waarmee ik op alle werkbladen (met uitzondering van het laatste) wil zoeken naar een bepaald woord en via een message box het aantal weergeef.
Bij mijn eerste poging kwam het resultaat telkens het dubbele uit. Dan dacht ik de oplossing gevonden te hebben door de uitkomst te delen door twee. Maar deze workaround loopt ook verkeerd.
In het testbestandje, als ik in regel 70 "ResultFinal" gebruik en ik gebruik de macro om te zoeken naar bijvoorbeeld Peter of xxx krijg ik de aantallen die juist zijn. Zoek ik dan bijvoorbeeld op het woord failed krijg ik uiteraard een decimaal getal (door de deling door 2) maar klopt het aantal zelfs niet ook. Op Blad1 zou dat (in de kolommen A tot H) 13 keer + op Blad2 1 keer = 14. Als in de code in regel 70 "Result" gebruikt wordt geeft de message box maar 13 weer.
Graag wat hulp waar ik in de mist ga.
Alvast bedankt.
ik loop vast op een macro waarmee ik op alle werkbladen (met uitzondering van het laatste) wil zoeken naar een bepaald woord en via een message box het aantal weergeef.
Bij mijn eerste poging kwam het resultaat telkens het dubbele uit. Dan dacht ik de oplossing gevonden te hebben door de uitkomst te delen door twee. Maar deze workaround loopt ook verkeerd.
In het testbestandje, als ik in regel 70 "ResultFinal" gebruik en ik gebruik de macro om te zoeken naar bijvoorbeeld Peter of xxx krijg ik de aantallen die juist zijn. Zoek ik dan bijvoorbeeld op het woord failed krijg ik uiteraard een decimaal getal (door de deling door 2) maar klopt het aantal zelfs niet ook. Op Blad1 zou dat (in de kolommen A tot H) 13 keer + op Blad2 1 keer = 14. Als in de code in regel 70 "Result" gebruikt wordt geeft de message box maar 13 weer.
Graag wat hulp waar ik in de mist ga.
Alvast bedankt.
Code:
Sub CountCellsWithText()
' Keyboard Shortcut: Ctrl+Shift+C
Application.EnableEvents = False
Application.ScreenUpdating = False
Dim CatchPhrase As String
Dim StrNaam As String
Dim Result As Double
Dim R As Range
Dim I As Integer
Dim Sheet As Worksheet
Dim FirstFoundCell As String
Dim Looped As Boolean
StrNaam = ActiveSheet.Name
For Each Sheet In ThisWorkbook.Worksheets
If Sheet.ProtectContents = True Then
Sheet.Protect Password:="", userinterfaceonly:=True
End If
Next
' Maak alle werkbladen zichtbaar
For Each Sheet In Worksheets
Sheet.Visible = True
Next
' Op het werkblad blijven waar de zoekfuntie gestart werd
Worksheets(StrNaam).Activate
Application.ScreenUpdating = True
CatchPhrase = InputBox("What is the string to match...?", "Advanced search", "Search Item")
If Not CatchPhrase = "" Then
findNext = vbYes
For I = 1 To ActiveWorkbook.Sheets.count - 1 ' De - 1 houdt geen rekening met de laatste drie werkbladen
If Sheets.Item(I).Visible = xlSheetVisible Then
Set Sheet = Sheets.Item(I)
FirstFoundCell = ""
Looped = False
Set R = Sheet.Range("A65536")
Do While findNext = vbYes And Not Looped
Sheets(Sheet.Name).Select
Set R = Sheet.Range("A:H").Find(CatchPhrase, R, xlValues, xlPart, xlByRows, xlNext, False)
If R Is Nothing Then
Exit Do
Else
If FirstFoundCell = "" Then
FirstFoundCell = R.Address
Else
If R.Address = FirstFoundCell Then
Looped = True
End If
End If
If LCase(R) Like LCase("*" & CatchPhrase & "*") Then
Result = Result + 1
ResultFinal = Result / 2
End If
End If
Loop
End If
Next I
If findNext = vbYes Then
MsgBox "There are " & ResultFinal & " words '" & CatchPhrase & "' found.", vbInformation, "Search Info"
End If
End If
' Terugkeren naar werkblad waar de zoekfuntie gestart werden verberg alle andere werkbladen
Worksheets(StrNaam).Activate
' Maak alle werkbladen zichtbaar
For Each Sheet In Worksheets
If Sheet.Name <> ActiveSheet.Name Then
Sheet.Visible = True
End If
Next
Application.EnableEvents = True
End Sub