Data Validatie

Status
Niet open voor verdere reacties.

Bergsma1

Gebruiker
Lid geworden
7 feb 2012
Berichten
40
Ik ben nauwelijk bekend met VBA en zoek de volgende oplossing.

In een tweetal Excel sheets ben gebruik ik data-validatie lijsten om de inputs te beperken.
Alle bereiken waarop deze datavalidatielijsten van toepassing zijn kunnen bij verkeerde input een error krijgen.
Deze beperking is dan ook gewenst, maar ik zou graag willen zien dat na de foutmelding er direct opnieuw ingevoerd kan worden, in Excel kun je dit doen door op retry te drukken en opnieuw een waarde in te voeren.
Echter omdat er heel veel fouten kunnen ontstaan, wil ik dit automatiseren.
Ik zou graag willen zien dat indien fout, dan automatisch retry en de invoer vrijgeven.

Ik zie hiervoor 2 opties maar weet niet hoe ik deze zal meoten uitwerken.
Eerste optie is, de datavalidatie laten lopen in VBA, de eventuele fout herkennen en bij fout, dan terug naar de invoercel,
Tweede optie, de datavalidatie herkennen door VBA en dan de inputwaarde Retry laten uitvoeren.

Heel erg bedankt voor de hulp

Met vriendelijke groet,
Ron
 
Ik bedenk me nu dat de oplossing mogelijk te complex is.
Wat ook zou kunnen is het volgende, Vergelijk alle waarden die worden ingevoerd Op tabblad 1, huidige cell met Tabblad 2, bereik A2:A3, als een waarde wordt gevonden, OK, Als een waarde niet wordt gevonden, huidige cell selecteren en leegmaken
 
In de module van Blad1

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Count = 1 Then
    Application.EnableEvents = False
    If Not IsNumeric(Application.Match(Target.Value, Sheets("Blad2").Range("A2:A3"), 0)) Then Application.Undo
    Application.EnableEvents = True
  End If
End Sub

Anders maar even een voorbeeldbestandje plaatsen.
 
Zie bijlage

In de bijlage zit een document waarin datavalidatie is ingericht, maar in plaats van dat datavalidatie het trucje doet, moet VBA dit doen. Logica is als volgt
Indien waarde gevonden in datavalidatielijst > dan opschuiven naar volgende cell (1 stap naar rechts)
Indien waarde niet gevonden in datavalidatielijst > invoer wijgeren (invoer wissen) en huidige cel blijven selecteren voor herinvoer
 

Bijlagen

Zoek eens op getrapte validatie want dat is wat jij, denk ik, bedoelt. Om een tabel te maken van alle rijen is niet echt handig.
 
Wordt de data nu ingelezen of ingevoerd? Heb je de code in #3 getest op jouw initiële vraag?

Vergelijk alle waarden die worden ingevoerd Op tabblad 1, huidige cell met Tabblad 2, bereik A2:A3, als een waarde wordt gevonden, OK, Als een waarde niet wordt gevonden, huidige cell selecteren en leegmaken
 
Laatst bewerkt:
Ingevoerd, dit is inderdaad niet juist. Met een scanner worden de cellen gevuld met informatie, vandaar het verwarrende inlezen. Ik probeer morgen het voorbeeld nogmaals te configureren in de werkelijke sheet.
 
Als je alleen maar in de vertelmodus blijft en steeds weer met wat anders komt dan gaat dit een lang draadje worden.

Heb je de code in #3 getest op jouw initiële vraag?

Om een tabel te maken van alle rijen is niet echt handig.

Ergens op reageren is blijkbaar lastig?
 
Hoi VenA,

Om terug te komen op jouw vragen, mijn excuses dat mijn antwoord onduidelijk was.

Heb je de code in #3 getest op jouw initiële vraag? > Ja, vandaag nogmaals geprobeerd maar er gebeurd niks
Om een tabel te maken van alle rijen is niet echt handig > Is met opzet gedaan, maar staat niet in de weg volgens mij voor een oplossing.

Ik heb een nieuw bestand toegevoegd, hierin staat alles.

In tabblad Sheet1 vul ik gegevens in, in Sheet2 staan de restricties van deze gegevens. Iedere kolom heeft eigen restricties, behalve kolom A.
Normaal zou je hiervoor datavalidatie kunnen gebruiken en kun je een foutmelding tonen als er een waarde wordt ingevoerd die niet binnen de restricties past. Als er een waarde wordt ingevoerd in Sheet1.kolom B, moet deze worden gezocht in Sheet2.Kolom A, is deze waarde beschikbaar, niks aan de hand, ga verder met invoer in kolom C. Is de waarde niet gevonden, verwijder invoer, en selecteer cell opnieuw.
 

Bijlagen

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column > 1 And Target.Column < 6 And Target.Count = 1 Then
    Application.EnableEvents = False
    If Not IsNumeric(Application.Match(Target.Value, Sheets("Sheet2").Columns(Target.Column - 1), 0)) Then Application.Undo
    Application.EnableEvents = True
  End If
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan