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

Klein stukje VBA dat waarschuwing geeft bij verkeerde invoer

Status
Niet open voor verdere reacties.

vincent2

Gebruiker
Lid geworden
23 dec 2005
Berichten
27
Goedemiddag,

In een Excel-sheet heb ik een klein stukje VBA staan dat na invoer in een bepaalde kolom, automatisch terugschakelt naar een ander tabblad. Nu wil ik hier nog een kleine controle aan toevoegen, maar ik heb geen verstand van VBA en krijg het dan ook niet voor elkaar. Er wordt een getal ingevoerd in kolom 7 (kan elke rij zijn) en dan moet gekeken worden of de invoer van dat getal niet leidt tot een celwaarde < 7 (in diezelfde rij maar dan 8 kolommen verder). Wanneer dit toch het geval is, moet er een waarschuwing komen.

Dit is mijn werkende code:

Code:
Sub Worksheet_Change(ByVal Target As Range)

  If Target.Column = "7" Then
  
  Sheets("THT-controleblad").Select

  End If
End Sub

Dit is mijn poging tot het bereiken van het gewenste resultaat:

Code:
Sub Worksheet_Change(ByVal Target As Range)

  If Target.Column = "7" Then
  
    If Target.Column+8 < 7 Then
      MsgBox "Controleer de ingevoerde waarde"
    End If

  Sheets("THT-controleblad").Select

  End If
End Sub

Wie wil er even de tijd nemen om mij verder op weg te helpen?

Alvast bedankt!

Vincent
 
Laatst bewerkt:
Probeer deze eens:
Code:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 7 Then Exit Sub
    
    If Cells(Target.Row, Target.Column + 8) < 7 Then
        MsgBox "Controleer de ingevoerde waarde"
    Else
        Sheets("THT-controleblad").Select
    End If
End Sub
 
Probeer deze eens:
Code:
Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column <> 7 Then Exit Sub
    
    If Cells(Target.Row, Target.Column + 8) < 7 Then
        MsgBox "Controleer de ingevoerde waarde"
    Else
        Sheets("THT-controleblad").Select
    End If
End Sub

Ja, fantastisch! Bedankt voor de snelle reactie. Dit werkt! In de tussentijd was ik nog wat aan het prutsen en bedacht ik me dat er natuurlijk niet doorverwezen moet worden naar het andere tabblad als de invoer (mogelijk) fout is en dat is precies, zoals je het nu gemaakt hebt. Heb ik nog wel een vraag. Ook wanneer het getal te groot is, zou er eigenlijk controle moeten plaatsvinden. Bijvoorbeeld <7 OF groter dan > 365.

Inmiddels heb ik dat al werkend gekregen door er dit van te maken:

Code:
Sub Worksheet_Change(ByVal Target As Range)

    If Target.Column <> 7 Then Exit Sub
    
    If Cells(Target.Row, Target.Column + 8) < 7 Or Cells(Target.Row, Target.Column + 8) > 365 Then
        MsgBox "Controleer de ingevoerde waarde"
    Else
        Sheets("THT-controleblad").Select
    End If
End Sub

Is dat de beste methode?

Nogmaals dank!
 
Het kan altijd anders maar zoals je het nu hebt is prima.
 
Waarom gebruik je niet gewoon de in Excel ingebouwde validatie ?
 
Oké, bedankt.

@snb: Goede vraag, simpelweg niet aan gedacht omdat ik al een stukje VBA had. Echter wanneer de invoer klopt, moet er wel geschakeld worden naar een ander tabblad. Dit doet VBA nu. Als ik de validatie door Excel laat doen, kan ik denk ik niet meer een keuze maken in het wel of niet doorsturen naar het andere tabblad, waardoor dit altijd gebeurt, ook wanneer de waarde niet klopt, dit levert dan weer extra muisklikken op. Tenzij Excel dit doorschakelen forceert als er een validatiefout is? Ik zou het kunnen proberen, maar ben heel tevreden met de huidige, goed werkende, oplossing.
 
Als je zorgt dat er alleen goede waarden ingevoerd kunnen worden hoeft er niet naar een ander blad 'geschakeld' te worden.
 
Het kan altijd anders maar zoals je het nu hebt is prima.

Nu ik er een paar dagen mee werk, vraag ik mij af of het nog anders zou kunnen. Kan ik ook een melding maken waarbij er niet alleen een optie 'Ok' in beeld verschijnt, maar een 'Ja' en 'Nee'? Dan zou ik de vraag willen stellen: "Controleer de ingevoerde waarde. Doorgaan?". Bij 'Nee' zou er dan niets moeten gebeuren, zodat je de invoer kunt aanpassen (zoals nu) en bij 'Ja' zou er doorgeschakeld moeten worden naar het andere tabblad.

Kan dat?
 
Dankjewel. Op deze manier heb ik het werkend gekregen:

Code:
Sub Worksheet_Change(ByVal Target As Range)

    If Target.Column <> 7 Then Exit Sub
    
    If Cells(Target.Row, Target.Column + 8) < 7 Or Cells(Target.Row, Target.Column + 8) > 183 Then
       
    Afprijzen = MsgBox("Is de invoer correct?", 4, "Let op!")
    
    If Afprijzen = vbYes Then
    
    Sheets("THT-controleblad").Select
    
    End If
    
    If Afprijzen = vbNo Then
    
    Cells(Target.Row, Target.Column).Select
    
    End If
    
    Else
        Sheets("THT-controleblad").Select
        
    End If
    
End Sub
 
Prima. Maar volgens mij doet dit hetzelfde:
Code:
Sub Worksheet_Change(ByVal Target As Range)
    
    If Target.Column <> 7 Then Exit Sub
    Select Case Cells(Target.Row, Target.Column + 8)
        Case Is < 7, Is > 183
            If MsgBox("Is de invoer correct?", vbYesNo, "Let op!") = vbNo Then
                Cells(Target.Row, Target.Column).Select
            Else
                Sheets("THT-controleblad").Select
            End If
    End Select
End Sub

Om je maar even het gebruik van Select Case te laten zien en dat je niet eerst het antwoord van de MsgBox in een variabele hoeft te zetten. Daarnaast is in de MsgBox het gebruik van de VBA constante vbYesNo duidelijker dan het getal 4. Let ook op het juiste gebruik van inspringpunten zodat eenvoudig te zien is welke End If bij welke If hoort.
 
Laatst bewerkt:
Bedankt voor de hulp! Ik snap het en dit doet inderdaad hetzelfde. Ben helemaal niet bekend met VBA dus had naar aanleiding van de link e.e.a. opgezocht en geprobeerd om het stukje bij beetje op te bouwen, daardoor kwam ik op deze, misschien wel niet zo logische, oplossing. Die variabele had ik toegevoegd omdat ik anders een dubbele MsgBox kreeg, maar ik snap nu wat ik fout deed.
 
Al doende leert men. Met af en toe een zetje in de rug :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan