Archief - VBA Excel cel controle

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

GregoryCo

Legacy Member
Het is de bedoeling dat als ik iets intyp in een cel en naar de volgende ga, dat hij daartussen controleert of de inhoud van de cel gelijk is aan een bepaalde waarde, indien niet moet hij een msgbox tonen.
Dat laatste heb ik al gevonden, enkel die controle vind ik niet, iemand een idee?

Tnx!

Zhergan

Legacy Member
Heb je al eens gedacht te werken met conditional format? Kan je de opmaak van een cel bepalen afhankelijk van de inhoud, moet je niets programmeren en valt het ook eveneens op.

GregoryCo

Legacy Member
Het is juist de bedoeling dat het geprogrammeerd wordt :) Ohja en na dat de (verkeerde) inhoud ingevoerd wordt, krijg je dus een msgbox en als je op OK klikt, dan moet de inhoud gewist worden automatisch

GregoryCo

Legacy Member
niemand?

tot nu toe heb ik dit:

Code:
Sub CodeControle()

    Dim rngBereik As Range
    Dim rngControle As Range
   
    'range instellen die moet gecontroleerd worden
    Set rngBereik = Selection.Range(B4, B43)
   
    'controleren of het de juiste codes zijn, anders wordt de celinhoud gewist
        If Target.Value <> V1 Then
            MsgBox "De invoer is niet correct! & vbcrlf & De inhoud van de cel wordt verwijderd!"
            Target.Clear
        End If
        

End Sub

daVinci

Legacy Member
Snel iets in elkaar gestoken. Niet in een gewone module plaatsen maar als worksheet event op het desbetreffende blad:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ErrHandler:
Application.EnableEvents = False
If Not Intersect(Target, Range("B4:B43")) Is Nothing Then
    If Target.Value <> "V1" Then
        MsgBox "De invoer is niet correct!" & vbCrLf & "De inhoud van de cel wordt verwijderd!"
        Target.Clear
        Target.Select
    End If
End If
Application.EnableEvents = True
Exit Sub
ErrHandler:
Application.EnableEvents = True
MsgBox "Error!"
End Sub

Uiteraard moet je indien nodig de range B4:B43 aanpassen.
Uitgebreidere error handling laat ik aan jou over.

GregoryCo

Legacy Member
nog een klein vraagje, er zijn verschillende codes, bestaat er een efficiënte manier om alle codes in 1 string te stoppen? dus niet telkes mer "Or" ertussen. maar bv "v1","v2",... dat werkt precies niet, of doe ik iets mis?

daVinci

Legacy Member
[B!'X!R']['@(V);10655761 zei:
nog een klein vraagje, er zijn verschillende codes, bestaat er een efficiënte manier om alle codes in 1 string te stoppen? dus niet telkes mer "Or" ertussen. maar bv "v1","v2",... dat werkt precies niet, of doe ik iets mis?

Zet al de codes in 1 string en scheidt ze door een teken dat niet voorkomt in de codes. Ik heb in mijn voorbeeld het teken "|" gebruikt als delimiter (vergeet ook niet in het begin en op het einde van die string deze delimiter te gebruiken).
Dan kan je via de InStr functie van VBA zoeken naar de target.value in deze codestring. Voor deze zoekactie laat je best ook je target.value voorafgaan en eindigen op deze delimiter. Wanneer je target.value gevonden is in de codestring retourneert de InStr functie de plaats waar deze gevonden is. Dus bij een resultaat groter dan 0 is er een match, bij een 0 waarde is er geen match (of niets ingevuld in de cel).

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim SearchString As String
Dim SearchValue As String
On Error GoTo ErrHandler:
Application.EnableEvents = False
If Not Intersect(Target, Range("B4:B43")) Is Nothing Then
    SearchString = "|V1|V2|V3|V4|"
    SearchValue = "|" & Target.Value & "|"
    If InStr(1, SearchString, SearchValue, vbTextCompare) = 0 Then
        MsgBox "De invoer is niet correct!" & vbCrLf & "De inhoud van de cel wordt verwijderd!"
        Target.Clear
        Target.Select
    End If
End If
Application.EnableEvents = True
Exit Sub
ErrHandler:
Application.EnableEvents = True
MsgBox "Error!"
End Sub

PS. Je weet toch dat deze functionaliteit standaard bekomen kan worden in Excel via gegevensvalidatie en er dus geen nood is deze zelf te programmeren.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan