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

Gegevens controleren in VBA

Status
Niet open voor verdere reacties.

MayNiak666

Gebruiker
Lid geworden
6 jan 2003
Berichten
234
Hallo Denktank,

Code:
' Voor het archiveren een aantal gegevens controleren
' op correcte invoer van gegevens
    Dim Db As Worksheet
        
    Set Db = Worksheets("Dashboard")
    If Db.Range("F9").Text = "Fout" Or Db.Range("F11").Text = "Fout" Or Db.Range("F12").Text = "Fout" _
    Or Db.Range("F18").Text = "Fout" Or Db.Range("F20").Text = "Fout" Or Db.Range("F21").Text = "Fout" _
    Or Db.Range("N9").Text = "Fout" Or Db.Range("N11").Text = "Fout" Or Db.Range("N12").Text = "Fout" _
    Or Db.Range("N18").Text = "Fout" Or Db.Range("N20").Text = "Fout" Or Db.Range("N21").Text = "Fout" _
    Or IsEmpty(Db.Range("B3")) Or IsEmpty(Db.Range("E3")) Or IsEmpty(Db.Range("B6")) Or Db.Range("B27").Value > 5 Then
    Result = MsgBox("Kan gegevens niet verwerken, controleer nogmaals de ingevoerde gegevens", vbExclamation, "Fout")
    Exit Sub
    Else

Na het Else statement gaat de code verder met het verwerken van de gegevens in het betreffende werkblad. Dit verwerken gaat prima, alleen het controleren van de gegevens werkt niet zoals het hoort. Waarschijnlijk door een onjuist gebruik van OR? Ik las in de help-functie van Excel VBA dat OR kan worden gebruikt om 2 expressies te vergelijken, en ik heb er een paar meer... Naar mijn idee was het zo dat bij gebruik van OR geen beperkingen waren aan het aantal expressie's en is het zo dat, zodra 1 van de expressie's TRUE oplevert, de gehele vergelijking TRUE is. Hoe kan ik dit controlestukje op een slimme manier herschrijven, zodat het werkt zoals het zou moeten? Alvast bedankt :thumb: voor het meedenken..

gr. René
 
Code:
   On Error Resume Next
    With Sheets(1)
      If .Range("F9:F21,N9:N21").Find("fout").Address <> "" Or .Range("B3,E3,B6").SpecialCells(4).Count > 0 Or .[B27] > 5 Then MsgBox "Controleer de ingevoerde gegevens", vbExclamation
    End With
 
Mooi kort stukje code. Het is nu alleen zo, dat ik altijd de msgbox in beeld krijg met de melding dat de gegevens niet correct ingevoerd zijn. Misschien is enige uitleg over wat bovenstaande code exact doet voldoende om eventuele aanpassingen te doen, zodat het wel werkt zoals ik wil? Alvast bedankt!
 
Laatst bewerkt:
Ik ben zelf nog wat aan het vogelen geweest, en kwam uit op onderstaande code:
Code:
    Dim Db As Worksheet
        
    Set Db = Worksheets("Dashboard")
    
    With Db.Range("F8:F21,N9:N21")
        Set f = .Find("Fout", LookIn:=xlValues)
        If Not f Is Nothing Then
            MsgBox "Controleer aantal dozen, snelheden en tijden", vbExclamation, "Fout"
            Exit Sub
        End If
    End With

    With Db.Range("B3,B6,E6")
        Set e = .Find("", LookIn:=xlValues)
        If Not e Is Nothing Then
            MsgBox "Controleer de gegevens (Datum, Dienst of Eerste produkt niet ingevuld) ", vbExclamation, "Fout"
            Exit Sub
        End If
    End With

    With Db.Range("D27")
        If .Value > 5 Then
            MsgBox "Onvoldoende stilstandtijd verantwoord", vbExclamation, "Fout"
            Exit Sub
        End If
    End With

Ik ben er van overtuigd dat het korter en efficienter kan, maar dit werkt prima. In ieder geval bedankt voor het meedenken!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan