2011-08-08 21 views
12

Mam duże problemy z wykonywaniem operacji z datą w Excel VBA. Mam formularz, który ma pole tekstowe, w którym użytkownik wprowadzi datę. Problem polega na tym, że może on wprowadzać go w różnych formatach (np. 1.08.2011 na 1 sierpnia lub 8/1/11 na ten sam dzień). Teraz chcę odjąć kilka dni od tej daty, którą wprowadza w TextBox. Do tej pory musiałem odnieść sukces i nie wiem, jak to zrobić. Próbowałem coś takiegoOdejmowanie od daty w VBA?

Format((Format(Me.datalivrare.Value, "dd.mm.yyy") - 4), "dd.mm.yyyy") 

Gdzie datalivrare jest to, że pole tekstowe, w którym użytkownik wpisuje datę i 4 to liczba dni, które chcę, aby odjąć od tego dnia ... i chcę, aby zawsze być w formacie dd .mm.yyyy bez względu na to, co wpisują w tym polu tekstowym.

+1

Jak odróżnić, czy 8/1/11 oznacza 1 sierpnia lub 8 stycznia? –

Odpowiedz

6

najlepszy dodawanie i odejmowanie z datami VBA to dateadd() (z liczbą ujemną dla odejmowania) również w twoim e Kod XAMPLE istnieje brakuje y na format string (przyjmuje 1, 2 lub 4 y, tylko)

+1

po drugiej stronie, zalecam ograniczenie wprowadzania danych użytkownika do znanego formatu z maskowanym polem tekstowym, jeśli to możliwe, lub po prostu sprawdzanie poprawności danych – Einacio

+0

Dziękuję za odpowiedź! –

5

pierwszy rzuci na datę, a następnie odjąć dni, a następnie sformatować odpowiednio:

Format(DateAdd("d", -4, CDate(Me.datalivrare.Value)), "dd.mm.yyyy") 
+0

Dzięki za odpowiedź! –

1

Ważne jest, aby sprawdzić, czy użytkownik wprowadził wartość, która może interprit VBA jako data więc najpierw należy:

If isDate(Me.datalivrare.Value) Then 
    str_Date = Format(DateAdd("d", -4, CDate(Me.datalivrare.Value)), "dd.mm.yyyy") 
Else 
    MsgBox "Not a valid date value", vbCritical + vbOkOnly, "Invalid Entry" 
End If 

myślę odpowiedź bluefeet miał najwięcej informacji do tej pory i ja pożyczyłem użycie DateAdd i cdate.