Vergelijken cel waarde met datum uit msgbox

  • Onderwerp starter Onderwerp starter SK89
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

SK89

Nieuwe gebruiker
Lid geworden
19 jan 2016
Berichten
1
Hallo, Ik heb een code geschreven en die exporteert alle waarden uit een ander werkblad naar een nieuw blad (Export).
Hierin wil ik de datum (geexporteerd als waarde met celeigenschap kortedatum). vergelijken met een waarde uit een MSGBOX. en als de waarden ouder zijn dan de datum in de msg box moeten die rijen blijven bestaan. De nieuwere waarden moeten verwijderd worden. ( Ik heb voor het testen even een als datum gelijk is gebruikt.)

Ik ga hier ergens de mist in met declaraties.
Een deel van de waarden wordt wel verwijderd maar verder niet. Kan iemand mij hiermee helpen?

Alvast vriendelijk bedankt!:D

Code:
Public Sub export_kast()

    Application.ScreenUpdating = False
    ' Enable error handling.
    On Error GoTo Errorhandler
    
'Unprotect Sheets
Call ThisWorkbook.OntgrendelWB

    'variables
    Dim x As String
    Dim i As Range
    Dim Findstring As String
    Findstring = Format(Findstring, "DD-MM-YYYY")
    Findstring = InputBox("Voer datum in van waarvoor je de maskers wilt verwijderen. (Bijv. 31-12-2015)")
        If Trim(Findstring) <> "" Then

            'Exporteer masker gegevens naar Export blad.
            ActiveWorkbook.Worksheets("Maskerkast").Range("A:C").Copy
            Worksheets("Export").Range("A:C").PasteSpecial xlPasteValues
            Application.CutCopyMode = False
 
                With Worksheets("Export")
  'Hieronder Error______________________________________________________
datum1 = Findstring
datum1 = Format(datum1, "DD-MM-YYYY")
datum2 = i.Value


Dim datum2 As String
datum2 = Format(ivalue, "DD-MM-YYYY")
                    For Each i In Range("C2:C" & Cells(Rows.Count, "C").End(xlUp).Row)
                    
                        If (datum2) = (Findstring) Then
                            i.EntireRow.Delete
                        End If

                    Next i

                    For Each i In Range("C2:C" & Cells(Rows.Count, "C").End(xlUp).Row)
                    'x = i.Value
                    x = Format(i.Value, "DD-MM-YYYY")

                        If (x) <> CDate(Findstring) Then
                        i.EntireRow.Delete
                        End If
                    Next i
                End With
        End If
'Hier boven Error______________________________________________________

'protect sheets
Call ThisWorkbook.vergrendelWB
'Error handler__________________________________________________________

ErrorExit:
    Exit Sub

Errorhandler:
    MsgBox Prompt:="Fout: " & Err.Number & " heeft zich voorgedaan. " & _
        vbCrLf & "Source: " & Err.Source & vbCrLf & _
        "Description: " & Err.Description
                Resume ErrorExit
End Sub
 
Code:
datum2 = i.Value


Dim datum2 As String
datum2 = Format(ivalue, "DD-MM-YYYY")
2 bedenkingen.
Je gaat datum2 al de waarde i toekennen terwijl i nog niet bekend is (de loop is nog niet gestart)
Bij Format ben je het punt vergeten tussen i en Value.
 
Je gebruikt om te beginnen hele rare variabele namen; i als Range? Mij lijkt rng As Range een stuk logischer. i en x worden meestal voor getallen gebruikt (x dus ook niet als tekst).
Erger is dat je een range wilt gebruiken zonder hem te definieren. Wat moet deze regel doen?
Code:
            datum2 = rng.Value
Daarnaast is dit
Code:
    Findstring = Format(Findstring, "DD-MM-YYYY")
    Findstring = InputBox("Voer datum in van waarvoor je de maskers wilt verwijderen. (Bijv. 31-12-2015)")
ook een vreemde constructie: een inputbox heeft namelijk geen opmaak. Dus daar kun je (en al helemaal niet van tevoren) een format aan toekennen.
Dit kun je ook samenvoegen:
Code:
datum1 = Findstring
datum1 = Format(datum1, "DD-MM-YYYY")
tot:
Code:
datum1 = Format(Findstring, "DD-MM-YYYY")
Maar het rare is: in de hele verdere code wordt Datum1 niet meer gebruikt, maar blijf je Findstring gebruiken! Dus waarom "uberhaupt datum1 neergezet?
Met een beetje opschonen, en de juiste variabelen, krijg je echter wel een werkende macro:

Code:
Public Sub export_kast()
Dim Findstring As String
Dim rng As Range, cel As Range
Dim datum2 As Date
    
    Application.ScreenUpdating = False
    
    Findstring = InputBox("Voer datum in van waarvoor je de maskers wilt verwijderen. (Bijv. 31-12-2015)", "Masker datum", Date)
    If Trim(Findstring) <> "" Then
        'Exporteer masker gegevens naar Export blad.
        ActiveWorkbook.Worksheets("Maskerkast").Range("A:C").Copy
        Worksheets("Export").Range("A:C").PasteSpecial xlPasteValues
        Application.CutCopyMode = False
        With Worksheets("Export")
            datum1 = Format(Findstring, "DD-MM-YYYY")
            Set rng = Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row)
            For Each cel In rng
                datum2 = Format(cel.Value, "DD-MM-YYYY")
                If (datum2) = (datum1) Then
                    cel.EntireRow.Delete
                End If
            Next cel
        End With
    End If

ErrorExit:
    Exit Sub

Errorhandler:
    MsgBox Prompt:="Fout: " & Err.Number & " heeft zich voorgedaan. " & _
        vbCrLf & "Source: " & Err.Source & vbCrLf & "Description: " & Err.Description

End Sub
 
Rijen verwijderen doe je van onderen naar boven, anders springt het rijen over.
 
Ik wilde in eerste instantie alleen maar laten zien waar de fout zat in de code. Dat het beter kan, lijkt mij evident :). Van mij had TS er best zelf achter mogen komen dat er gaten in zijn routine zitten.
 
Daar was Ts al achter, het staat in de openingspost. ;)
 
Had ik zo niet begrepen; as fas as I'm concerned ben ik nog heel verbaasd dat de code überhaupt wat deed :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan