• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Opgelost check dubbele naam

Dit topic is als opgelost gemarkeerd

Egbert12345

Gebruiker
Lid geworden
13 dec 2010
Berichten
537
Beste forummers, zie mijn voorbeeldbestand. De macro die ik heb gemaakt klopt voor geen meter. Ik wil graag een controle als een aam dubbel voorkomt. Hebben jullie suggesties?

Groet Egbert
 

Bijlagen

Mag het ook met Voorwaardelijke Opmaak? Lijkt me simpeler... (zie bijlage)

M.b.t. waarom de macro niet werkt (met dank aan Copilot):

Je macro werkt om meerdere redenen niet zoals bedoeld. Dit zijn de belangrijkste problemen:

1. Je verhoogt de teller binnen de lus zelf​

Je hebt:

For A = 2 To 6
grootboeknaam = Cells(A, 3)
A = A + 1

  • De For-lus verhoogt A al automatisch
  • Door zelf nog eens A = A + 1 te doen, sla je rijen over en gaat de lus “raar” lopen

2. Je vergelijkt alleen opeenvolgende cellen​

Je doet:

grootboeknaam = Cells(A, 3)
grootboeknaamXX = Cells(A + 1, 3)

Meer regels weergeven

→ Dit controleert alleen rij 2 met 3, 4 met 5, etc.
→ Maar dubbele waarden kunnen overal staan (bijv. rij 2 en rij 10)

3. Je bereik klopt niet met je omschrijving​

  • Jij zegt: B2:B100
  • Code gebruikt: Cells(A, 3) → dat is kolom C

4. Geen expliciete variabelen (kan fouten verbergen)​

Je declareert geen variabelen (Dim), wat risico geeft op fouten.


Kort samengevat (waarom jouw macro niet werkt)​

  • Teller A wordt verkeerd aangepast
  • Alleen vergelijking van naastliggende rijen
  • Verkeerde kolom (C i.p.v. B)
 

Bijlagen

Laatst bewerkt:
Code:
Sub M_snb()
  sn = Cells(1, 2).CurrentRegion
   
  For j = 1 To UBound(sn)
    If InStr(c00, "|" & sn(j, 1) & "|") Then c01 = c01 & sn(j, 1) & ":  B" & j & vbLf
    c00 = c00 & "|" & sn(j, 1) & "|"
  Next

  MsgBox c01
End Sub
 
@emields
Misschien ligt het aan mij, maar de code is niet dynamisch, terwijl de code van @snb dat wel is.
 
De MsgBox geeft alleen maar cel $B$4 aan in de code van jou.
Code:
Sub check_dubbele_naam()

For Each cl In Range("b2:b" & Cells(Rows.Count, 2).End(xlUp).Row)
  If Application.CountIf(Range(Cells(2, 2), Cells(cl.Row, 2)), cl.Value) > 1 Then
  MsgBox "dubbel gevonden in cel " & cl.Address
  Exit Sub
  End If
Next

End Sub

1781716340519.webp
 
Zo kan het ook:
Code:
Sub M_snb()
  sn = Application.Transpose(Columns(2).SpecialCells(2))
    
  For Each it In sn
    If UBound(Filter(sn, it)) > 0 Then c00 = c00 & it & vbLf
  Next
    
  MsgBox c00
End Sub
 
Hoi, de optie die Alexcel gaf met de voorwaardelijke opmaak wil ik proberen. Die opmaak begrijp ik, maar ik wel een macro maken die zoekt naar die rode kleur. Zie s.v.p. mijn voorbeeld. Wat doe ik niet goed in VBA?
 

Bijlagen

Waarom een macro, je kunt toch filteren op kleur?
En draai deze eens:
Code:
Sub test()
    For r = 2 To 23
        Debug.Print Cells(r, 2).Interior.Color
    Next
End Sub
 
Ik wil niet op kleur filteren, maar alleen dat wanneer de kleur rood is dat er een melding (msgbox) wordt gedaan
 
Wat moet er dan in de MsgBox staan?
 
Wat is de werkwijze m.b.t. dit document:
  • Een import die na het importeren (automatisch) gecontroleerd moet worden?
  • Een tabel waaraan de gebruiker rijen toevoegt waarbij direct dubbele waarden gesignaleerd moeten worden?
  • Iets anders?
 
Het hoeft niet ingewikkeld te zijn, zolang je maar duidelijk maakt wat je precies wilt. Wij kunnen immers niet in je hoofd kijken.
 
Terug
Bovenaan Onderaan