Вычитание из даты в VBA?
У меня большие проблемы с работой с датой в Excel VBA.
У меня есть форма, в которой есть текстовое поле, в которое пользователь вводит дату. Проблема в том, что он может вводить его в разных форматах (например, 1.08.2011 на 1 августа или 8/1/11 за тот же день). Теперь то, что я хочу сделать, - это вычесть несколько дней с этой даты, которые он вводит в TextBox. До этого я добился успеха, и я не знаю, как это сделать.
Я попробовал что-то вроде этого
Format((Format(Me.datalivrare.Value, "dd.mm.yyy") - 4), "dd.mm.yyyy")
Где datalivrare - это текстовое поле, в которое пользователь вводит дату, а 4 - количество дней, которые я хочу вычесть из этой даты... и я хочу, чтобы формат всегда был dd.mm.yyyy, независимо от того, что они входят в это текстовое поле.
Ответы
Ответ 1
Я предлагаю посмотреть функцию DateAdd для VBA
http://www.techonthenet.com/excel/formulas/dateadd.php
http://office.microsoft.com/en-us/access-help/dateadd-function-HA001228810.aspx
Вы можете сделать следующее:
Format(DateAdd("d", -4, CDate(Me.datalivrare.Value)), "dd.mm.yyyy")
Ответ 2
лучше всего добавить и вычесть из дат на vba dateadd() (с отрицательным числом для подстрок)
также, в вашем примере кода там отсутствует y в строке формата (он принимает только 1, 2 или 4 y, только)
Ответ 3
Сначала выберите дату, затем вычитайте дни, а затем соответствующим образом отформатируйте:
Format(DateAdd("d", -4, CDate(Me.datalivrare.Value)), "dd.mm.yyyy")
Ответ 4
Важно проверить, вводит ли пользователь значение, которое VBA может вводить в качестве даты, поэтому сначала вы должны:
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
Я думаю, что у bluefeet-ответа была самая большая информация до сих пор, и я позаимствовал использование DateAdd и CDate.