text input van een textbox controlen op match met de tekstuele waarden van een range

Status
Niet open voor verdere reacties.

Rudert

Gebruiker
Lid geworden
10 jun 2013
Berichten
6
Beste mede forumgebruikers,

Ik wil alle tekstuele waarden van de Range A19-43 vergelijken met de tekst die in een textbox staat. Als er een match is dan dient de textbox rood te kleuren en als er geen match is groen. Is het mogelijk om deze controle te doen in Excel en zo ja, hoe luidt de code? Ik heb een voorbeeld toegevoegd als bijlage bij dit bericht.

Alvast dank.
 

Bijlagen

Op basis van aantallen.als (haal wel je Option Explicit weg)
Code:
Private Sub CommandButton1_Click()
    If TextBox1 = "" Then
        MsgBox "Box is leeg"
        Exit Sub
    End If
    
    If TextBox1 <> "" Then
    waarde = TextBox1
    vergelijk = WorksheetFunction.CountIf(Range("A9:A" & Range("A" & Rows.Count).End(xlUp).Row), waarde)
    
    If vergelijk = 0 Then
        TextBox1.BackColor = &HFF00&
    Else
        TextBox1.BackColor = &HFF&
    End If
    End If
End Sub
 
Spaarie,

Bedankt voor je FeedBack, het is bijna opgelost ik heb alleen nog de volgende 2 vragen:

- Op het moment dat er één woord in de textbox staat werkt de code (bijv als er alleen PVC staat) op het moment dat er HOUT PVC staat haalt hij het PVC er niet meer uit en keurt hij het goed (TB wordt groen), hoe kan ik dat oplossen?

- Waarom moet ik option explicit weghalen, ik kan de variabelen die jij gebruikt toch definieren (als strings) ?
 
Vraag 1: Dit klopt. Het is op basis van de Excel functie AANTALLEN.ALS en kijkt naar de gehele waarde in de textbox. Dit wil dus zeggen dat als het niet exact overeenkomt dat de telling op 0 blijft staan. Als de telling op 0 staat dan moet de textbox groen worden. Zoals je ziet in de code.

Vraag 2: Inderdaad dit is ook mogelijk. Als je je variabele declareert dan kan je Option Explicit laten staan, maar in mijn code niet gedaan dus moest je declareren of weghalen om werkend te maken...

Maar is het de bedoeling dan dat je meerdere waardes in je textbox zet?
 
Yes, dit voorbeeldje wordt straks in een groter bestand gezet waarbij alle andere variabelen ook gedefinieerd zijn vandaar mijn vraag over Option Explicit. In het "grote model" komen in een dergelijke textbox meerdere materialen te staan en het is de bedoeling dat die vergelijk functie ervoor zorgt dat schadelijke stoffen opgemerkt worden! Daarom heb ik in een voorbeeldje zes materialen handmatig ingevoerd waarvan er één een match is (PVC)
 
Misschien kan het mooier, maar dit doet volgens mij ook het benodigde werk
Code:
Private Sub CommandButton1_Click()
    If TextBox1 = "" Then
        MsgBox "Box is leeg"
        Exit Sub
    End If
    
    If TextBox1 <> "" Then
    waarde = Split(TextBox1.Text, " ")
    
        For Each v In waarde
        vergelijk = WorksheetFunction.CountIf(Range("A9:A" & Range("A" & Rows.Count).End(xlUp).Row), v)
            If vergelijk = 0 Then
                TextBox1.BackColor = &HFF00&
            Else
                GoTo gevonden
            End If
        Next
    End If
gevonden: If vergelijk > 0 Then
            TextBox1.BackColor = &HFF&
          End If
End Sub
 
Awesome, probleem is solved! Ik zal de status van dit bericht wijzen. Toch heb ik nog een slotvraag, als je met variabelen definiëren werkt welke soort Data Type past dan bij de variabelen uit jouw code?

Waarde = Variant / String?
v = Variant / String?
vergelijk = ?
 
For Each functie is alleen mogelijk bij Variant of Object dus ??? (ken je zelf wel invullen :))
Dim vergelijk as Boolean

Maar waarom wil je ze per sé declareren?
 
Laatst bewerkt:
Soort van autistisch trekje (werken vanuit een vaste routine), ben pas sinds kort met VBA bezig en in een handleiding werd aanbevolen om vrijwel altijd met O.E. te werken. Bedankt voor je feedback Spaarie!
 
Ik heb toch nog een vraag betreffende dit onderwerp:

In het voorbeeld staan in de eerste kolom een x aantal materialen opgesomd waar de input van de tekstbox vergeken wordt. Als er een match gevonden is voor de tekst van de tekstbox en de materialen in de eerste kolom kleurt de tekstbox rood. Bij geen match kleurt de box groen.

Is het ook mogelijk om het materiaal, dat voor de rode kleur zorgt, te benoemen in een losse cel? In dit voorbeeld zou dus in de cel PVC moeten staan
 

Bijlagen

Pas 'gevonden' aan:
Code:
Private Sub CommandButton1_Click()
    If TextBox1 = "" Then
        MsgBox "Box is leeg"
        Exit Sub
    End If
    
    If TextBox1 <> "" Then
    waarde = Split(TextBox1.Text, " ")
    
        For Each v In waarde
        vergelijk = WorksheetFunction.CountIf(Range("A9:A" & Range("A" & Rows.Count).End(xlUp).Row), v)
            If vergelijk = 0 Then
                TextBox1.BackColor = &HFF00&
            Else
                GoTo gevonden
            End If
        Next
    End If
gevonden: If vergelijk > 0 Then
            TextBox1.BackColor = &HFF&
            [COLOR="#FF0000"]Range("F6") = v 'of Cells(6, 6) = v
[/COLOR]          End If
End Sub
 
Laatst bewerkt:
Iets andere aanpak.

Code:
Private Sub CommandButton1_Click()

    Dim i As Long, rArray As String
    'Bij lege zoekbox melding en macro verlaten
    If TextBox1 = "" Then MsgBox "Geen zoekwaarde(n) ingevuld.": Exit Sub
    'Verzamelen van alle materialen die Match veroorzaken
    For i = 0 To UBound(Split(TextBox1.Text, " "))
        If WorksheetFunction.CountIf(Range("A9:A" & Range("A" & Rows.Count).End(xlUp).Row), Split(TextBox1.Text, " ")(i)) > 0 Then
            rArray = rArray & Split(TextBox1.Text, " ")(i) & " "
        End If
    Next
    'Zoekbox kleuren naargelang resultaat zoekfunctie
    TextBox1.BackColor = IIf(rArray = vbNullString, &HFF00&, &HFF&)
    'Alle materialen weergeven die Match veroorzaakt hebben
    Range("F6") = IIf(rArray = vbNullString, vbNullString, rArray)

End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan