VBA:работа с ячейками и датами
Раздела такого не нашел, решил написать сюда.
Есть один вопрос, который я не могу решить.
Имеется таблица в экселе, в нее с помощью формы вводятся данные,тоесть запускаем макрос, вводим данные,жмем кнопку записать,и данные структурировано записываются. Есть поле дата,которое являетс я типом Date. Задача: необходимо каждый раз при вызове формы проверять значения дат во всех строках (но в одном столбце),и если дата в ячейке на 30 дней меньше чем настоящая, то строку с данной датой нужно сносить.
Есть какая-нить функция в VBA типа Date.Now() или чего-нит типа того? Как узнать настоящую дату, и чтобы записать его в переменную.
Заранее спасибоза ответ.
Раздела такого не нашел, решил написать сюда.
Всё правильно. Именно сюда и надо писать по поводу Экселя, Ворда и прочего офиса.
Есть один вопрос, который я не могу решить.
Имеется таблица в экселе, в нее с помощью формы вводятся данные,тоесть запускаем макрос, вводим данные,жмем кнопку записать,и данные структурировано записываются. Есть поле дата,которое являетс я типом Date. Задача: необходимо каждый раз при вызове формы проверять значения дат во всех строках (но в одном столбце),и если дата в ячейке на 30 дней меньше чем настоящая, то строку с данной датой нужно сносить.
Не очень понятно, что такое "сносить". Удалять всю строку?
Есть какая-нить функция в VBA типа Date.Now() или чего-нит типа того? Как узнать настоящую дату, и чтобы записать его в переменную.
Ты почти угадал. Это пишется просто Now:
t=Now
Функция Now возвращает полную дату, с текущим временем. Если тебе нужна только чистая дата, возьми от неё целую часть: Int(Now).
Dim CurDate As Date
CurDate = Date
MsgBox CStr(CurDate)
End Sub
Можно и без CStr. Это всё паскалевские штучки... :)
Dim date2 as Date
date1=now()
date2=format(date1, "d.mm.yyyy")
Теперь нужно вычитать из переменной date1, к примеру, значение в яйке range(1,1).Value
ТОлько нужно как-то преобразовать видимо значения, как не понимаю.
Вс еправильно, нужно удалять всю строку, просто очищать ее.
А в остальном - примерно так (вариант с "удалять")
Set w=ThisWorkbook.Worksheets("Лист1")
i=2
While w.Cells(i,1).Value<>""
If w.Cells(i,1).Value<Now-30 Then
w.Rows(i).Delete
Else
i=i+1
End If
Wend
Это не "паскалевские штучки";), а лишь хороший тон программирования.. Я понимаю, что VB даст много чо сделать с переменными - можно их и не объявлять:)..
Просто если это окно сообщения, то оно по-любому отображает строку;)
А если дату брать из календаря,там преобразования нужны?
А если дату брать из календаря,там преобразования нужны?
Из какого календаря? Если из настенного, то да.
:D
Видимо человек имеет ввиду CalendarControl ?.?:)
Если так, то почему бы самому не попробывать, чем задавать вопросы, какие свойства и методы имеет тот контрол!!
MsgBox CStr(Me.Calendar1.Value)
End Sub
Видимо человек имеет ввиду CalendarControl ?.?:)
Если так, то почему бы самому не попробывать, чем задавать вопросы, какие свойства и методы имеет тот контрол!!
MsgBox CStr(Me.Calendar1.Value)
End Sub
Именно CalendarControl.
Если так, то почему бы самому не попробывать, чем задавать вопросы, какие свойства и методы имеет тот контрол!!
Попробовал, дата выводится, вс е впорядке.Просто при вычитании говорил что несоответствие типов данных, вот и спросил во что нужно преобразовывать.
Огромное всем спасибо за ответы! Очень помогли. Дальше все сам. :)