Vergelijken van data, output in messagebox

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

Bas28

Gebruiker
Lid geworden
8 dec 2007
Berichten
13
Nieuw op het forum. Stiekem zitten meelezen, veel geprobeerd, maar ten einde raad....

Binnen MS Excel zou ik graag het volgende realiseren.

Ik heb een kolom met daaronder een kleine 1000 rijen/cellen. In iedere cel in die kolom staat een datum. Via een messagebox zou ik gealarmeerd moeten worden als ik én op dat werkblad kom én één of meer data zich bevinden binnen 45 dagen van de ingevoerde datum.

Bij voorkeur een message in de geest van: "In de komende 45 dagen verlopen [aantal] items".

Ik ben een VBA noob maar heb wat zitten experimenteren met messageboxen als een werkblad wordt geopend of afhankelijk van de input. Maar nergens word ik op het juiste spoor gebracht. Wellicht is het niet mogelijk?

De concrete vraag is: Welke VBA code plaats ik waar en hoe zorg ik ervoor dat de code de juiste kolom intepreteert?

Hartelijk dank voor jullie moeite bij voorbaat!

Bas
 
Hoi Bas

Hier is volledige VBA-code:

Code:
Private Sub Worksheet_Activate()
    
    Dim rDatums As Range
    Dim iAantal As Integer
    Dim r As Range
    
    Set rDatums = Range("A1:A10")
    
    iAantal = Evaluate("=COUNTIF(A1:A10,"">="" & today()-45)")
    
    If iAantal > 0 Then MsgBox "In de komende 45 dagen verlopen " & iAantal & " items."
    
End Sub

Klik met rechtermuisknop op de bladtab van het blad waar je dit wil hebben. Kies "Programmacode weergeven". Je komt in VBA terecht. Plak de code in het witte lege scherm. Sluit VBA af via het kruisje.

Zou moeten werken zo.

Wigi
 
Beste Wim,

Hartelijk dank voor uw hulp.
Ik hoefde slechts te knippen en plakken op de wijze waarop u het aangaf.
Fantastisch!

Ik heb het probeert in mijn vrij omvangrijke bestand. Helaas werkt het nog niet.
Niet als ik de datumkolom in de Range aangeef en ook niet als ik de kolom met het aantal dagen selecteer.
Ik heb immers

Code:
Set rDatums = Range("A1:A10")
    
    iAantal = Evaluate("=COUNTIF(A1:A10,"">="" & today()-45)")

twee keer aangepast (met dezelfde gegevens).

Kan het zijn dat ik nog wat fout doe?

Nogmaals erg veel dank.

Bas
 
Code:
Private Sub Worksheet_Activate()
    
    Dim rDatums As Range
    Dim iAantal As Integer
    Dim r As Range
    
    Set rDatums = Range("L33:L780")
    
    iAantal = Evaluate("=COUNTIF(L33:L780,"">="" & today()-45)")
    
    If iAantal > 0 Then MsgBox "In de komende 45 dagen verlopen " & iAantal & " items."
    
End Sub

Waarbij L33 t/m L780 een vervaldatum bevat met de celeigenschappen aangepast dd-mm-jjjj.

Ook als ik van L33:L780 => B33:B780 maak, waarbij de celeigenschappen een getal vormen, krijg ik geen messagebox. Maar dat lijkt me logisch omdat er met 'today' wordt gerekend...

Vriendelijke groet,
Bas
 
Ik neem aan dat je met activeren het aanklikken van dat tabblad bedoelt?
Dus het tabblad selecteren?

Groet,
Bas
 
Dat bedoel ik ook :)
Ja, dat begreep ik en heb ik gedaan. Ik kreeg geen foutmelding of messagebox...
 
Maak dan fictieve gegevens maar wel in hetzelfde bestand. Verwijder ook alle onnodige dingen en zip het bestand.
 
Hallo Wim,

Inmiddels heb ik wat zitten proberen. Learning by doing werkt het beste om te begrijpen wat e.e.a. doet.
Het script werkt nu, doch telt nog niet juist.

Ik heb een voorbeeldje bijgevoegd.

Vriendelijke groet,
Bas
 

Bijlagen

Dit werkt wel:

Code:
Private Sub Worksheet_Activate()
    
    Dim iAantal As Integer
    
    iAantal = Evaluate("=COUNTIF(L2:L10,"">"" & today())-COUNTIF(L2:L10,"">"" & today()+45)")
    
    If iAantal > 0 Then MsgBox "In de komende 45 dagen zijn " & iAantal & " bijzonder acties vereist."
    
End Sub

De voorwaarde in de COUNTIF zat fout, je telde de verkeerde datums op.

Wigi
 
Ben nog wat bezig geweest, dit is beter:

Code:
Private Sub Worksheet_Activate()
    
    Dim iAantal As Integer
    Dim r As Range
    
    Set r = Range("L2:L10")
    
    iAantal = WorksheetFunction.CountIf(r, ">" & Format(Date, "#####"))
    iAantal = iAantal - WorksheetFunction.CountIf(r, ">" & Format(Date + 45, "#####"))
    
    If iAantal > 0 Then MsgBox "In de komende 45 dagen is/zijn " & iAantal & " bijzonder actie(s) vereist."
    
End Sub

Wigi
 
Fan-tas-tisch... :thumb:

Voorlopig mijn eeuwige dank, Wim.

Vriendelijke groet,
Bas
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan