2011-11-22 11 views
6

Próbuję ustalić różnicę między datą systemową a datą zapisaną w arkuszu roboczym. Jeżeli różnica między nimi wynosi> 30 dni, wynik jest prawdziwy, w przeciwnym wypadku wynik jest fałszywyJak znaleźć różnicę między datami w VBA

Dim result as boolean 
Dim sDate as string 
sDate = Date 
if Worksheets("dates").Cells(1,1) - sDate > 30 then 'how do I do this? 
    result = true 
else 
    result = false 
end if 

Jak mogę dowiedzieć się różnica w dniach pomiędzy datą systemową i dacie zapisanej w arkuszu? Data w arkuszu może być również datą przeszłą.

+0

Jak jest przechowywana wartość daty w arkuszu kalkulacyjnym? tj. 1 kwietnia 2010, 01/30/2010 itd. – brettdj

+0

Jak sądzę, tekst. mm/dd/rrrr – Ank

Odpowiedz

23

Zastanawiam się dlaczego ja rzadko zobaczyć ludzi za pomocą funkcji daty.

Można również użyć tego:

if DateDiff("d", date1, date2) > 30 then 

w tym przypadku date1 byłoby cdate i date2 byłoby sdate (albo odlewane z (Arkusze ("Terminy") Komórki (1,1)). cdate lub dim'd jako data jak Jeff

„d” oznacza, że ​​są coraz różnicę w dniach Oto przedziały przez lata, miesiące, itd. w VBA..

yyyy - Year 
q - Quarter 
m - Month 
y - Day of year 
d - Day 
w - Weekday 
ww - Week 
h - Hour 
n - Minute 
s - Second 
3

Spróbuj tego:

if CDate(Worksheets("dates").Cells(1,1)) - sDate > 30 then 
+0

Nie wiedziałem, że istnieje coś takiego jak CDate !! lol .. Pozwól mi spróbować .. – Ank

+0

CDate (arkusze robocze ("daty"). Komórki (1,1)) powoduje niedopasowanie typu! – Ank

+0

@Ankur - Oh, sDate również musi być randką. Widzę, że to ciąg. W rzeczywistości, jeśli zmienisz sDate na randkę, możesz nie potrzebować obsady CDate. –

1

sDate to STRI NG, która NIE jest prawdziwą datą!

Konwertuj ciąg znaków na datę za pomocą funkcji CDate() lub funkcji DateValue().

Istnieje jednak zastrzeżenie w tego rodzaju konwersji. Są konwersja będzie obsługiwać następujące struktury:

yyyy/mm/dd 
yyyy/m/d 
mm/dd/yyyy 
m/d/yyyy 

te nie będą poprawnie konwertowane

dd/mm/yyyy 
d/m/yyyy 

i unikać każdy rok 2-cyfrowy.

Zalecam korzystanie z funkcji DateSerial() dla konwersji daty.

Jeśli chodzi o twój kod, zakładając, że wartości na yor arkuszu są faktycznie datami (aby mieć pewność, po prostu wybierz kolumnę i zmień format liczbowy na OGÓLNY.Jeśli są to prawdziwe daty, każdy będzie wyświetlał NUMER CZYSTE. nacisnąć UNDO, aby odzyskać format daty)

Dim result As Boolean 

If Worksheets("dates").Cells(1, 1).Value - Date > 30 Then 
    result = True 
Else 
    result = False 
End If 
Powiązane problemy