Для работы с датой в VBA предусмотрен специальный тип Date. Этот тип занимает 8 байт. Оно вам надо? Это так для информации:-). Пробуем.
Sub Test()
Dim MyDate As Date
MsgBox (Str(Year(MyDate)))
End Sub
У меня выдает 1899 год. Это говорит, что при создании этой переменной она не инициализируется текущей датой. Это плохо. Поместить Дату и время можно из строки воспользовавшись функциями DateValue и TimeValue.
Sub Test()
Dim MyDate As Date
MyDate = DateValue("1/1/96")
Debug.Print Year(MyDate)
End Sub
Так же и со временем:
Sub Test()
Dim MyDate As Date
MyDate = TimeValue("10:10:12")
MsgBox Str(Minute(MyDate))
End Sub
Только одновременно хранить и время и дату так не удастся, вот этот код приведет к очень интересному результату.
Sub Test()
Dim MyDate As Date
MyDate = DateValue("6/1/72")
MsgBox Str(Year(MyDate))
MyDate = TimeValue("10:10:12")
MsgBox Str(Minute(MyDate))
MsgBox Str(Year(MyDate))
End Sub
Если вы хотите хранить вместе и дату и время, то поступите так:
Sub Test()
Dim MyDate As Date
MyDate = DateValue("6/1/72") + TimeValue("10:10:12")
MsgBox Str(Minute(MyDate))
MsgBox Str(Year(MyDate))
End Sub
Чтобы извлекать части даты и часов используйте такие функции:
Month(переменная типа Date)
|
|
Day(переменная типа Date)
Year(переменная типа Date)
Hour(переменная типа Date)
Minute(переменная типа Date)
Second(переменная типа Date)
WeekDay(переменная типа Date)
WeekDay - это день недели, если Вам это нужно, то вы можете написать что-то типа этого.
Sub Test()
Dim MyDate As Date
MyDate = DateValue("9/1/72")
If (WeekDay(MyDate) = vbSunday) Then
MsgBox ("Sunday")
End Sub
vbSunday это константа, есть еще vbMonday, ну дальше понятно.
Шаг 29 - Использование With
Оператор With используется для явного указания обьекта, к свойствам которого мы хотим получить доступ. Вот так это выглядит в глобальном плане.
With объект
операции с объектом
End With
Давайте рассмотрим пример. Ниже реализованы два сообщения, которые выводят имя и статус видимости объектов:
Sub Test()
MsgBox (Application.Worksheets.Item(1).Name)
MsgBox (Str(Application.Worksheets.Item(1).Visible))
End Sub
Используя With это можно сделать так:
Sub Test()
With Application
With.Worksheets
MsgBox (.Item(1).Name)
MsgBox (Str(.Item(1).Visible))
End With
End With
End Sub
Используя With можно получить доступ и к пользовательским структурам.
'----------- Описание --------
Type Family
Name_I As String
Name_Cat1 As String
Name_Cat2 As String
End Type
'----------- Код --------
Sub Test()
Dim fam As Family
With fam
.Name_I = "Pety"
.Name_Cat1 = "Vasi"
.Name_Cat2 = "Fisa"
MsgBox (.Name_I)
End With
End Sub