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

Macro lege cellen controleren (als cellen leeg macro stop, als cellen gevuld dan)

Status
Niet open voor verdere reacties.

LaZyGolfer

Gebruiker
Lid geworden
30 okt 2013
Berichten
26
Hallo allemaal,

Ben bezig om formulier te maken waar iemand bepaalde cellen in een rij moet invullen. Als hij op de knop drukt worden de cellen naar een ander blad gekopieerd. Echter moet de macro op de knop controleren dat alle cellen gevuld zijn voor dat de gevens gekopieerd worden, hier loop ik vast... heb de volgende code:

Sub Macro1()
For Each cell In Range("B12:R12")
If IsEmpty(cell) Then
MsgBox "Vul alle cellen in"
Exit For
End If
Next

With Sheets("invoer2")
Aantal = WorksheetFunction.CountA(Range("B12:B16"))

productgegevens = Cells(12, 2).Resize(Aantal, 17)


End With

With Sheets("register").Cells(Rows.Count, 1).End(xlUp)

.Offset(1, 0).Resize(Aantal, 17) = productgegevens

End With

With Sheets("invoer")

Range("B12:R16").ClearContents

End With

End Sub

Probleem is als ik de cellen niet allemaal gevuld zijn ik wel een melding krijg maar de macro alsnog de gegevens kopieerd naar het andere blad. Dus de macro zou moeten stoppen als de cellen niet allemaal gevuld zijn. Zal vast een bepaalde regel zijn die ik mis..... :/

Dank alvast
 
Het is al opgelost wanneer 'Exit For' vervangt voor 'Exit Sub'...
Nog wel een kanttekening; je gebruikt de 'With'-statement te vaak en verkeerd.

Te vaak voorbeeld:
Code:
With Sheets("invoer")

Range("B12:R16").ClearContents

End With
kan ook
Code:
Sheets("invoer").Range("B12:R16").ClearContents

Wanneer je 'With' gebruikt moet je de Range bijvoorbeeld aangeven met een punt dus .Range("B12:B16"), zie voorbeeld hieronder.

Code aangepast:
Code:
Sub Macro1()
    For Each c In Sheets("invoer").Range("B12:R12")
        If IsEmpty(c) Then
            MsgBox "Vul alle cellen in"
            Exit Sub
        End If
    Next

    With Sheets("invoer2")
        a = WorksheetFunction.CountA(.Range("B12:B16"))
        productgegevens = .Cells(12, 2).Resize(a, 17)
    End With
    
    Sheets("register").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(a, 17) = productgegevens
    Sheets("invoer").Range("B12:R16").ClearContents
End Sub
 
Laatst bewerkt:
om de lege cel aan te duiden met een kleurtje (misschien vind je het handig)

Code:
For Each cell In Range("B12:R12")
 cell.Interior.ColorIndex = xlNone
  If IsEmpty(cell) Then
    i = 1
    cell.Interior.ColorIndex = 15
  End If
Next
If i > 0 Then MsgBox "Vul de gekleurde cellen in": Exit Sub
 
Of
Code:
Sub Macro1()
    
    If WorksheetFunction.CountA(Sheets("invoer").Range("B12:R12")) <> 17 Then MsgBox "Vul alle cellen in": Exit Sub
    With Sheets("invoer2")
        Sheets("register").Cells(Rows.Count, 1).End(xlUp).Offset(1).Resize(.Cells(12, 2).CurrentRegion.Rows.Count, 17) = _
                    .Cells(12, 2).Resize(.Cells(12, 2).CurrentRegion.Rows.Count, 17).Value
    End With
    Sheets("invoer").Range("B12:R16").ClearContents
    
End Sub
 
Netjes Rudi, maar ook als aantallen groter zijn dan 17?
Code:
If WorksheetFunction.CountA(Sheets("invoer").Range("B12:R12")) <[COLOR="#FF0000"]>[/COLOR] 17 Then MsgBox "Vul alle cellen in": Exit Sub
 
Ik begrijp niet direct waar ge heen wilt ?
In range("b12:r12") zitten toch 17 cellen. Alles gevuld is toch AantalArg = 17. Als dus bij het tellen in die range AantalArg verschillend is van ( <> ) 17 komt er een melding.
 
Ik geef aan dat 'groter dan' (>) 17 in dit geval weinig nut heeft, want er kunnen niet meer cellen gevuld zijn in een range van 17 cellen dan 17 cellen...
Het is ook geen muggezifterij, maar muggenzifterij :eek::d
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan