Check op lege cellen

Status
Niet open voor verdere reacties.

janmulder85

Gebruiker
Lid geworden
11 aug 2007
Berichten
63
Goedemiddag,

Graag zou ik een oplossing vinden voor het volgende probleempje, ik zit er al de hele middag op te zweten en krijg het niet terecht...:p

Ik heb een excel werkblad met de sheets Ma, Di, Wo,Do,Vr,Za en Zo. In de cellen A1 t/m A10 van elk werkblad kunnen waardes ingevuld worden.

Nu wil ik een macro maken die controleert in het geval dat er iets ingevuld is in 1 of meer cellen in de A kolom er in B1t/m B10 ook iets staat ingevuld.

Zo niet dan moet er een messagebox komen met de melding: Er ontbreken gegevens in kolom B, controleer dit en probeer het opnieuw.

Kortom, Als je in A1 iets invult, moet er in B1 ook iets ingevuld staan enzovoort. Ik krijg het niet voor elkaar om de juiste formule te maken die alle werkbladen op dit criterium controleert, wie kan mij helpen?

Alvast bedankt!
 
Het is al laat, maar ik heb nog wat code geschreven; maar wel volledig ONGETESTE CODE.

Code:
Sub controleren()

    Dim ws As Worksheet
    Dim rIngevuldInA As Range
    Dim rIngevuldInB As Range
    
    Const rngToCheck As String = "$A$1:$A$10"
    
    For Each ws In ThisWorkbook.Worksheets
    
        On Error Resume Next
        Set rIngevuldInA = ws.Range(rngToCheck).Offset(0, 0).SpecialCells(xlCellTypeConstants, 1)
        Set rIngevuldInB = ws.Range(rngToCheck).Offset(0, 1).SpecialCells(xlCellTypeConstants, 1)
        On Error GoTo 0
        
        If rIngevuldInA Is Not (rIngevuldInB Is Nothing) Then
        
            MsgBox "Fout op blad " & ws.Name, vbCritical
            Exit Sub
        
        End If
        
        If Not rIngevuldInA Is Nothing And Not rIngevuldInB Is Nothing Then
        
            If rIngevuldInA.Address <> rIngevuldInB.Address Then
            
                MsgBox "Fout op blad " & ws.Name, vbCritical
                
            End If
        
        End If
    
    Next
    
End Sub

In de SpecialCells zoek je enkel op constanten en getallen. Wil je (ook) op tekst zoeken, dan zal je dat moeten aanpassen.

Wigi
 
Beste Wigi,

De code lijkt niet helemaal te werken, maar je hebt ook gezegd dat hij niet getest was dus dat geeft niet. Alsik de code zo aanpas werkt hij wel, maar ik weet niet of dit correct is:

Code:
Sub controleren()

    Dim ws As Worksheet
    Dim rIngevuldInA As Range
    Dim rIngevuldInB As Range
    
    Const rngToCheck As String = "$A$1:$A$10"
    
    For Each ws In ThisWorkbook.Worksheets
    
        On Error Resume Next
        Set rIngevuldInA = ws.Range(rngToCheck).Offset(0, 0).SpecialCells(xlCellTypeConstants, 1)
        Set rIngevuldInB = ws.Range(rngToCheck).Offset(0, 1).SpecialCells(xlCellTypeConstants, 1)
        On Error GoTo 0
        
        If rIngevuldInA Is Not[COLOR="red"]hing Or[/COLOR] (rIngevuldInB Is Nothing) Then
        
            MsgBox "Fout op blad " & ws.Name, vbCritical
            Exit Sub
        
        End If
        
        If Not rIngevuldInA Is Nothing And Not rIngevuldInB Is Nothing Then
        
            If rIngevuldInA.Address <> rIngevuldInB.Address Then
            
                MsgBox "Fout op blad " & ws.Name, vbCritical
                
            End If
        
        End If
    
    Next
    
End Sub

Verder zou ik graag de code iets aan willen passen omdat nu de code op alle sheets wordt uitgevoerd, maar ik ga ook nog een paar sheets maken waar deze check niet op uitgevoerd hoeft te worden,kan dit eenvoudig?
 
Verder zou ik graag de code iets aan willen passen omdat nu de code op alle sheets wordt uitgevoerd, maar ik ga ook nog een paar sheets maken waar deze check niet op uitgevoerd hoeft te worden,kan dit eenvoudig?

Binnen de lus van de worksheets, moet je iets doen in de stijl van:

Code:
If ws.Name = ...

of

Code:
If ws.Index > ...

of

Code:
If ws.Range("A1").Value = ...

Mogelijkheden genoeg, experimenteer maar wat.

Wigi
 
Natuurlijk, wat dom van me!:o Ik zat te experimenteren voor (dus buiten) de "For Each" tag. Dit werkt dus nu.

Loop ik alweer tegen een ander struikelblok op...

De code werkt deels, maar nog niet helemaal naar wens. Als ik bijvoorbeeld helemaal niets in zou vullen krijg ik ook een foutmelding. Ik zou graag bij lege regels (dus als er in een regel bij A niks ingevuld is) geen foutmelding ontvangen, enkel wanneer er WEL een gegeven in A aanwezig is en NIET in B.

Ik ben zelf ook druk bezig om de code te veranderen,om te wisselen of andere zaken welke binnen mijn amateur vermogen liggen uit te voeren maar helaas zonder het gewenste resultaat...:confused:
 
Code:
Sub tst()
  For j = 1 To 10
    If Range("A" & j & ":B" & j).SpecialCells(xlCellTypeConstants).Count = 1 Then Exit For
  Next
  If j < 11 Then MsgBox "in regel " & j & " zijn nog niet alle gegevens ingevuld"
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan