Zoeken en controleren

Status
Niet open voor verdere reacties.

joskjos

Gebruiker
Lid geworden
9 sep 2013
Berichten
94
Hallo,

Ik heb een bestandje gemaakt met tekst en uitleg wat precies de bedoeling is.

Kort samengevat ben ik op zoek naar een vba macro die het volgende doet:

- kijk in kolom D of regel waarde bevat en dan kolom G controleren of er de tekst "aanwezig" of "goedgekeurd" in de cel staat, dan geen actie nodig.
- Als Kolom D regel waarde bevat en kolom G geen tekst "aanwezig" of "goedgekeurd" dan msgbox tonen.
- Als Kolom D regel geen waarde bevat dan geen actie nodig.

Bekijk bijlage zoeken.xlsx

Jos
 
Maak eens een tabel met wat data en zet erachter wat de verwachte uitkomst is. Voor mij is het een onleesbaar bestandje.
 
Ik ben zelf nog wat bezig geweest en heb de volgende code welke bijna goed is.

Het enige wat nu nog moet gebeuren en waar ik nog niet uitkom is:

- TeZoekenWaarde moet "aanwezig" of "goedgekeurd" zijn.

- Nu geeft de code een msgbox als "aanwezig" in de cel staat alleen moet het precies omgekeerd. Bij de tekst "aanwezig" in de cel moet er geen msgbox komen en staat de tekst "aanwezig" niet in de cel dan moet er wel een msgbox komen. (Had geprobeerd met Else maar dat werkte niet)

Hopelijk weet iemand dit laatste stukje code nog?


Code:
Sub controleren()

Dim c As Range
Dim TeZoekenWaarde

TeZoekenWaarde = "aanwezig"

For I = 10 To 409
If Cells(I, 3).Value > "" Then

Set c = Cells(I, 8).Find(TeZoekenWaarde)
    If Not c Is Nothing Then
    c.Font.ColorIndex = 9
    c.Interior.ColorIndex = 6
    MsgBox "               Naam : " & c.Cells(1, -3) & Chr(13) & "Gevonden fout : " & c.Cells(1, 1)
    End If
End If

Next I

End Sub
 
De hele code die je geplaatst hebt sluit niet aan bij de vraag en het voorbeeld bestand. Als iets omgekeerd moet worden kan je Not toch weglaten?
 
Ik heb mijn bestandje aangepast om het zo duidelijk mogelijk te maken.

Bekijk bijlage zoeken.xlsm

Ik heb de macro erin gezet en aangegeven wat de bedoeling is.

Als ik Not weghaal krijg ik Foutcode 91?

Gr,
Jos
 
Code:
Private Sub CommandButton1_Click()
Dim cl As Range
For Each cl In Columns(8).SpecialCells(2).Offset(1).SpecialCells(2)
  If InStr("_aanwezig_goedgekeurd_q", "_" & cl) = 0 Then
     cl.Interior.Color = vbYellow
     MsgBox " "
   End If
Next cl
End Sub
 
@HSV, bedankt voor het meedenken! Dit werkt inderdaad ook.
Alleen moet er nu nog in Kolom 3 worden gekeken of daar een willekeurige waarde in de regel staat en dan pas de code uitvoeren voor dezelfde regel in Kolom 8 zoals jij bedacht hebt.
 
@HSV, Ik was net iets te snel zie de code hieronder nu werkt het zoals het moet zijn.

Code:
Dim cl As Range

For i = 5 To 400
If Cells(i, 3).Value > "" Then

For Each cl In Cells(i, 8)
  If InStr("_aanwezig_goedgekeurd_q", "_" & cl) = 0 Then
     cl.Interior.Color = vbYellow
   MsgBox "               Naam : " & cl.Cells(1, -4) & Chr(13) & "Gevonden fout : " & cl.Cells(1, 1)
   End If


Next cl
End If
Next i
 
Iets anders.
Code:
Private Sub CommandButton1_Click()
Dim cl As Range
For Each cl In Columns(8).SpecialCells(2).Offset(1).SpecialCells(2)
  If cl.Offset(, -5) <> "" And InStr("_aanwezig_goedgekeurd_q", "_" & cl) = 0 Then
     cl.Interior.Color = vbYellow
    MsgBox "               Naam : " & cl.Cells(1, -4) & vbLf & "Gevonden fout : " & cl.Cells(1, 1)
   End If
Next cl
End Sub
 
@HSV, is het ook mogelijk om te zoeken in de cel met: als of gelijk is aan "aanwezig of goedgekeurd" in de cel met jouw code?

Code:
If InStr("_aanwezig_goedgekeurd_q", "_" & cl) = 0 Then
 
Begrijp ik helaas niet helemaal om daar een goed antwoord op te geven.
 
Ik bedoel als er in de cel staat: "LeerlingNaamAanwezig" dat die cel dan niet geel gemarkeerd wordt en geen msgbox krijgt omdat "aanwezig" in de cel voorkomt als een woord. Nu is het enkel met: "aanwezig"
 
Laatst bewerkt:
Volgens mij werkt de code daar ook prima op.

Je hebt de te zoeken tekst gewijzigd van..."naam 1 is aanwezig"....in "LeerlingNaamAanwezig".
En dat werkt nu niet?
 
Laatst bewerkt:
Waarom gebruik je geen voorwaardelijke opmaak? Van VBA weet je blijkbaar weinig en met een helder voorbeeld komen lukt ook niet zo erg. Volgens mij werkt de code van HSV gewoon.
 
De oplossing wat wel werkt:

Code:
Dim cl As Range

For i = 5 To 400
If Cells(i, 3).Value > "" Then

For Each cl In Cells(i, 8)
  If cl Like "*aanwezig*" = 0 Then
  If cl Like "*goedgekeurd*" = 0 Then
     cl.Interior.Color = vbYellow
   MsgBox "               Naam : " & cl.Cells(1, -4) & Chr(13) & "Gevonden fout : " & cl.Cells(1, 1)
   End If
End If

Next cl
End If
Next i
 
Laat dat bestand eens zien waarin mijn code niet werkt.
 
Inderdaad die werkt dus niet daarop.

Maar dit lijkt me beter dan 396 cellen doorlopen als er maar 6 in staan, waarbij de 'for each' totaal overbodig is in je code

Code:
Private Sub CommandButton2_Click()
Dim cl As Range
For Each cl In Columns(8).SpecialCells(2).Offset(1).SpecialCells(2)
 If cl.Offset(, -5) <> "" Then
  If cl Like "*aanwezig*" = 0 And cl Like "*goedgekeurd*" = 0 Then
     cl.Interior.Color = vbYellow
     MsgBox "               Naam : " & cl.Offset(, -5) & vbLf & "Gevonden fout : " & cl
  End If
 End If
Next cl
End Sub
 
Bedankt voor alle hulp:thumb:

Ik probeer ondertussen te begrijpen: .SpecialCells(2).Offset(1).SpecialCells(2)
Ik dacht dat met: i = 5 To 400 ook kon, maar blijkbaar is jouw code sneller!(ik had tot 400 regels als voorbeeld wel moet vanaf regel 5 pas worden begonnen)

Gr,
Jos
 
Dat gebeurt ook in de code als er wordt begonnen op rij 4 in je bestand.
Offset(1) = rij 5. ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan