Beste helpers, helaas kan ik vanuit hier geen attachment invoegen maar hopelijk kan ik mijn probleem duidelijk maken.
Ik heb ergens een macro gevonden die meerdere steekwoorden tegelijk kan kleuren in cellen.
Onderstaande code zoekt binnen cellen (waar naast de steekwoorden nog meer tekst in staat) naar de steekwoorden "auto", "fiets", "trein", "boot", "tram" en kleurt deze specifieke woorden (dus niet de hele cel) vervolgens rood en maakt ze vet.
Deze steekwoorden staan nu hard gecodeerd in het vba-script:
Dim myWords(1 To 5) As String
myWords(1) = "auto"
myWords(2) = "fiets"
myWords(3) = "trein"
myWords(4) = "boot"
myWords(5) = "tram"
Hoe kan ik de code zo aanpassen dat hij verwijst naar een apart tabblad "Steekwoorden" waar in Cel A1 het eerste steekwoord staat, in A2 het tweede steekwoord etc.
Dus in Tabblad "Steekwoorden" Cel A1 staat dan auto, Cel A2 fiets etc.
Ik wil deze steekwoorden kunnen wijzigen (naar bijvoorbeeld "appel", "peer", "perzik" etc.) en het liefst ook dat het bereik van kolom A dynamisch is. Nu van A1:A5 maar bijvoorbeeld ook van A1:A20
Hopelijk voldoende duidelijk. Een alternatieve VBA-oplossing ipv aanpassing van het onderstaande script is uiteraard ook van harte welkom.
Ik heb ergens een macro gevonden die meerdere steekwoorden tegelijk kan kleuren in cellen.
Onderstaande code zoekt binnen cellen (waar naast de steekwoorden nog meer tekst in staat) naar de steekwoorden "auto", "fiets", "trein", "boot", "tram" en kleurt deze specifieke woorden (dus niet de hele cel) vervolgens rood en maakt ze vet.
Deze steekwoorden staan nu hard gecodeerd in het vba-script:
Dim myWords(1 To 5) As String
myWords(1) = "auto"
myWords(2) = "fiets"
myWords(3) = "trein"
myWords(4) = "boot"
myWords(5) = "tram"
Hoe kan ik de code zo aanpassen dat hij verwijst naar een apart tabblad "Steekwoorden" waar in Cel A1 het eerste steekwoord staat, in A2 het tweede steekwoord etc.
Dus in Tabblad "Steekwoorden" Cel A1 staat dan auto, Cel A2 fiets etc.
Ik wil deze steekwoorden kunnen wijzigen (naar bijvoorbeeld "appel", "peer", "perzik" etc.) en het liefst ook dat het bereik van kolom A dynamisch is. Nu van A1:A5 maar bijvoorbeeld ook van A1:A20
Hopelijk voldoende duidelijk. Een alternatieve VBA-oplossing ipv aanpassing van het onderstaande script is uiteraard ook van harte welkom.
Code:
Sub Steekwoorden_kleuren()
'
' Steekwoorden_kleuren Macro
'
'USE-COLOR AND BOLD TEXT STRINGS WITHIN TEXT EXCEL VBA
'************************* DEC VARS *******************************
Dim myCell As Range
Dim myRng As Range
Dim FirstAddress As String
Dim iCtr As Long
Dim letCtr As Long
Dim startrow As Long 'BEGINNING OF RANGE
Dim endrow As Long ' END OF RANGE
Dim startcolumn As Integer 'BEGINNING COLUMN
Dim endcolumn As Integer 'END COLUMN
'************************* SET VALUES*****************************
'DUMMY VALUES - COULD BE PASSED
startrow = 1
endrow = 65536
startcolumn = 1
endcolumn = 10
'SET UP RANGE YOU ARE COLORING AND BOLDING -YOU COULD MODIFY TO PASS VALUE TO
Set myRng = Range(Cells(startrow, startcolumn), Cells(endrow, endcolumn))
'HIER MOET VERWEZEN WORDEN NAAR EEN DYNAMISCH BEREIK MET STEEKWOORDEN
Dim myWords(1 To 5) As String
myWords(1) = "auto"
myWords(2) = "fiets"
myWords(3) = "trein"
myWords(4) = "boot"
myWords(5) = "tram"
'BEGIN MASTER LOOP---------------------------------------
For iCtr = LBound(myWords) To UBound(myWords)
'ERROR FOUND-BYPASS
On Error Resume Next
With myRng
Set myCell = .Find(What:=myWords(iCtr), After:=.Cells(1), _
LookIn:=xlValues, LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False)
'LOGIC CHECK
If Not myCell Is Nothing Then
FirstAddress = myCell.Address
Do
For letCtr = 1 To Len(myCell.Value)
If StrComp(Mid(myCell.Value, letCtr, _
Len(myWords(iCtr))), _
myWords(iCtr), vbTextCompare) = 0 Then
myCell.Characters(Start:=letCtr, _
Length:=Len(myWords(iCtr))) _
.Font.ColorIndex = 3
End If
Next letCtr
For letCtr = 1 To Len(myCell.Value)
If StrComp(Mid(myCell.Value, letCtr, _
Len(myWords(iCtr))), _
myWords(iCtr), vbTextCompare) = 0 Then
myCell.Characters(Start:=letCtr, _
Length:=Len(myWords(iCtr))) _
.Font.FontStyle = "Bold"
End If
Next letCtr
'GET NEXT ADDRESS
Set myCell = .FindNext(myCell)
Loop While Not myCell Is Nothing _
And myCell.Address <> FirstAddress
End If
End With
Next iCtr
End Sub
Laatst bewerkt: