• 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.

Bij dubbele waarden in een kolom UserForm blokkeren

Status
Niet open voor verdere reacties.

Margot1

Gebruiker
Lid geworden
27 nov 2012
Berichten
21
Hallo slimmerikken,

Ik ben op zoek naar de juiste manier om het starten van een UserForm te verbinden aan de voorwaardelijke check op dubbele waarden in een bepaalde kolom op een andere sheet dan waar de knop op staat die het UserForm start.

Op de eerste sheet staat een knop die het UserForm (UF1) start. Het werkt goed en mijn UserForm doet ook wat het moet doen. Het plaatst ingevulde gegevens op de juiste rijen en haalt ook gegevens op die al eerder ingevuld waren.

Dit werkt op basis van een sleutelnummer en dit sleutelnummer mag in de bewuste kolom maar 1x voorkomen anders loopt de boel spaak.

De sheet waar de kolom op staat wordt handmatig gevuld vanuit een andere query. En dit gebeurt met copy/paste. Dit sluit ook gelijk trucjes met voorwaardelijke opmaak e.d. uit. De opmaak van de kolom wordt met copypaste ook overschreven. Ook blijkt het gewoon valideren van de invoer van cellen dat er geen dubbele waarden in mogen niet te werken. Wel wanneer er getypt wordt maar niet wanner het gecopypaste wordt.

Dus nu wil ik dat de macro die het formulier showt, achter de knop, eerst de controle uitvoert op dubbele waarden.
De consequentie van deze check moet zijn dat zolang er dubbele waarden zijn het formulier niet start.
Ook wil ik dat er een mssgbox start waarin gewezen wordt op het bestaan van de dubbele invoer.
Het liefst met een optie naar de betreffende worksheet te gaan en dan direct te zien om welke cellen het gaat (bijvoorbeeld met kleur van de cellen) (ik twijfel nog of ik ook een optie wil hebben waarmee excel automatisch de dubbele cellen leegmaakt. dit wil ik als optie wel voorleggen aan de mensen die ermee moeten gaan werken)

Probleem. Het werkt niet. Zodra ik de controle koppel aan het event change worksheet op het werkblad zelf gaat in ieder geval de detectie van dubbele waarden goed maar nu ik het wil koppelen aan deze knop lukt het me niet de juiste worksheet aan te wijzen. Ik heb het geprobeerd in de formule voor Range en zoals het bijgevoegde stukje code met with.

Code:
Sub Veredelde_Informatie_Knop2_BijKlikken()
With Sheets("Selectie")
  On Error Resume Next
  If WorksheetFunction.CountIf(Range("A2:A"), Target.Value) > 1 Then
  If MsgBox("Het nummer komt meer dan 1x voor in de eerste kolom. Je kunt nu niet verder naar het formulier. Kies je YES dan heb je de mogelijkheid om het zelf, handmatig aan te passen. Kies je NO dan verwijderd Excel automatisch de dubbele invoer en zal het formulier openen.", vbYesNo, "Dubbele waarde") = vbNo Then Target.Value = ""
  Else: UF1.Show
  End If
 End With
 End Sub

En de opties verbonden aan de mssgebox werken ook niet maar dit mag dus ook een enkele handeling zijn.
Dubbele waarden = mssgbox met deze melding & retour naar werkblad om het zelf aan te passen (liefst met arcering van de bewuste cellen.
 
Laatst bewerkt:
Margot1,


Dit vond ik op Helpmij, je moet het misschien een beetje aanpassen.
Onderstaande macro zoekt in de hele sheet naar waarden die meerdere keren voorkomen en kleurt de betreffende cellen rood.

Code:
Sub fdControleerDubbeleWaarden()

Dim rge As Excel.Range
Dim rgeFind As Excel.Range
Dim varValue As Variant

' Behandel elke cel in de selectie van cellen.
' Het geselecteerde gebied is een range,
' maar elke cel in dat gebied ook.
For Each rge In ActiveWindow.RangeSelection
' Welke waarde staat er in de cel?
varValue = rge.Value
' Staat deze waarde ook in een andere cel?
For Each rgeFind In ActiveWindow.RangeSelection
' Maar natuurlijk niet kijken in de cel
' die we al gebruiken.
If rgeFind.Address <> rge.Address Then
' Is de waarde hetzelfde? Dan celkleur rood.
If rgeFind.Value = varValue Then
rgeFind.Font.ColorIndex = 3
End If
End If
Next
Next
End Sub
 
Dank je wel voor je post. Deze was ik ook al tegengekomen. Het is niet helemaal wat ik zoek.
Ik ben wel echt op zoek naar de combi van arceren en show-stopper.

Het Userform mag niet starten wanneer er dubbele waarden zijn. De arcering zou een bonus zijn.

Weet je wellicht hoe ik het screenen van dubbele waarden binnen de specifieke sheet in de specifieke kolom moet neerzetten?
Wanneer ik het probeer vanuit de worksheetchange wordt het wel gedaan maar zodra ik probeer mee te geven "kijk in sheet 'Selectie' en wijs de dubbels aan" dan loopt het niet.
 
Dank je wel wederom.
Maar het is niet wat ik bedoel en het lukt me ook niet om dit aan te passen naar hoe ik het bedoel. Het vergelijken van 2 ranges over 2 sheets heen lukte ook al maar dit is niet wat ik bedoel. (excuses voor de belabberde toelichting gok ik)
Ik wil dat de module de waarden binnen 1 en dezelfde kolom controleert op dubbels.
Als er geen dubbels zijn moet het UserForm openen
Als er wel dubbels zijn wil ik dat diegene erop gewezen wordt.
Idealiter met een msgBox en een kleurtje in de cellen waar het om gaat.

Wat me verder nog opviel is dat de cel blijft ook nadat de waarde is aangepast en de macro opnieuw is gestart rood blijft.
 
Dus een countif formule zou gewoon 'het kunstje' moeten zijn ware het niet dat ik dit dus niet werkend krijg als ik niet de worksheet.change maar een module achter een knop wil hebben
 
Ik ben bang dat je aan mij verder niets heb.
De andere helpers zullen denk ik wel om een voorbeeld vragen, zo blijft het gokken.
 
Target werkt in de ChangeEvent maar niet icm een knop.

Met vriendelijke groet,


Roncancio
 
Maak een aparte functie die de unieke elementen uit de kolom haalt en dan alle elementen in de kolom gaat vergelijken met deze unieke lijst.
Laat de functie een Boole-waarde (True of False) retourneren als er dubbele waarden in zitten of niet.
Door nu in je 1ste sub de functie als basis te laten starten kan je adhv de teruggegeven Boole-waarde de verdere actie bepalen.
 
Bedankt voor jullie reacties.

Het is me nu duidelijk waarom het bij change wel werkt maar bij de knop niet. (heb target laten varen en ben op zoek gegaan naar andere dingen)

Het lukt me nog steeds niet om met het klikken van de ene knop

1) controlleer kolom A van Sheet Selectie op dubbele gegevens
2) attendeer op het bestaan van dubbele gegevens en biedt de gelegenheid het aan te passen (evt met het kleurtje of door ernaartoe te hoppen) , of verwijder de gegevens die dubbel zijn
3) indien er geen dubbele gegevens (meer) zijn dan show UserForm.


Ben eens verder gaan zoeken... zonder .Target

Onderstaande leek me een mooi eerste stapje om te testen of het verwijderen van dubbels vanaf een knop op een andere sheet lukt.
Module aangemaakt. verbonden aan de knop. en error...


Code:
Sub DelDups_OneList()
Dim iListCount As Integer
Dim iCtr As Integer

iListCount = Sheets("Selectie").Range("A2:A1000").Rows.Count
Sheets("Selectie").Range("A2").Select

Do Until ActiveCell = ""

   For iCtr = 1 To iListCount

      If ActiveCell.Row <> Sheets("Selectie").Cells(iCtr, 1).Row Then
  
         If ActiveCell.Value = Sheets("Selectie").Cells(iCtr, 1).Value Then
       
            Sheets("Selectie").Cells(iCtr, 1).Delete xlShiftUp
            
               iCtr = iCtr + 1
         End If
      End If
   Next iCtr

   ActiveCell.Offset(1, 0).Select
Loop
MsgBox "Alle dubbele nummers zijn verwijderd"
End Sub

Het is niet helemaal wat ik wil maar het leek me een mooi begin om op verder te bouwen. Werken doet ie niet. Krijg de foutmelding 1004 Methode Select van klasse Range.

De eerste keer deed de macro het wel toen ik hem vanuit de module testte maar nu het aan de knop op een andere sheet is gekoppeld functioneert het niet.

Mocht iemand nog suggesties hebben heel graag. Anders ga ik proberen het bestand te ontdoen van alle gevoelige info waaronder het volledige userform.en dan een vb'tje uploaden
 
Ha Rudi, dank je wel. Heb er al aan gedacht om het in de sheet zelf op te lossen met een extra kolom maar de kans is groot dat dit door het gecopy/paste verloren gaat. Dan zou ik met een derde sheet kunnen werken maar ik had in m'n hoofd dat ik graag, omdat er toch al macro's inzitten, de voorwaarde aan het starten van het UserForm mee zou geven. Zeker als finale check. Ik ga nog even verder pielen
 
Simpel voorbeeld:

Code:
Dim rB As Range
Dim bD As Boolean
    Set rB = Worksheets("Selectie").Range("A1:A1000")
    rB.Interior.ColorIndex = xlNone
    For Each c In rB
        If WorksheetFunction.CountIf(rB, c) > 1 Then
            c.Interior.Color = vbRed
            bD = True
        End If
    Next
    If bD = False Then
        UF1.Show
    Else
        MsgBox "Er zijn dubbelen.", vbExclamation, "Dubbele waardes."
    End If

De dubbele waardes worden rood weergegeven.

Met vriendelijke groet,


Roncancio
 
Laatst bewerkt:
Ja super, dit bedoel ik.

Mag ik vragen of de c iets is dat VBA standaard herkent wanneer het een module is achter een knop. (misschien hele stomme vraag hoor maar krijg nu het idee dat ik zo moeilijk heb gedaan op basis van alle andere voorbeelden op dit en andere fora).
c duidt de cel aan maar bij de meeste codes wordt dan eerst de eerste cel uit het bereik aangegeven en vervolgens de loop ingesteld. Met jouw code wordt voor elke cel in de range gekeken of het meer dan 1x voorkomt op een simpele, overzichtelijke manier, en met Next is het loop deel ook eenvoudiger.
 
Je kunt zelf een naam verzinnen.
C is slechts een voorbeeld.

Het is inderdaad raadzaam om niet de cellen 1 voor 1 te selecteren.

Met vriendelijke groet,


Roncancio
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan