Випадає календар для excel
Ось так, буде виглядати випадає календар для Excel, якщо дочитати до кінця.
Для тих, у кого немає часу читати чи ні бажання розбиратися, готовий Excel файл з Лист1, на якому, в будь-якому осередку, при подвійному натисканні на ліву кнопку миші, з'являється Календар.
Для тих, хто бажає зробити все сам, наступне оповідання.
Створимо Форму і назвемо її Form_SelectDate.
Форма складається: - 42 Написів Label - 1-го Поля TextBox - 1-го Поля ComboBox - і 1-го лічильника SpinButton * в усі 42 Написи пишемо дві події, згідно з ім'ям, а називаємо ми їх: Cell_1_1, Cell_1_2 .. Cell_2_1, Cell_2_2 .... Cell_6_7. Private Sub Cell_1_1_Click () Set_Дата 1, 1 End Sub і Private Sub Cell_1_1_DblClick (ByVal Cancel As MSForms.ReturnBoolean) 'Команда - закінчити вибір дати і закрити форму Set_Дата 1, 1 TB = CStr (DateValue (dt_1)) Unload Me End Sub т . Е. * Поле ComboBox назвемо ComboBox_Month і розмістимо наступний код: Private Sub ComboBox_Month_Change () 'Команда - встановити дату, обрану в календарі (зміна місяць) MyYear = Year (dt_1) MyMonth = CInt (ComboBox_Month.ListIndex + 1) MyDay = Day (dt_1) MyCountDay = Day (DateSerial (MyYear, MyMonth + 1, 1) - 1) If MyDay> MyCountDay Then MyDay = MyCountDay dt_1 = DateSerial (MyYear, MyMonth, MyDay) 'Установка TextBox_Year TextBox_Year.Value = Format (dt_1, "yyyy") 'Установка ComboBox_Month і календаря Set_M? nth (dt_1) End Sub і * SpinButton назвемо SpinButton_Year і розмістимо наступний код: Private Sub SpinButton_Year_SpinDown ()' Команда - встановити дату, обрану в календарі (зміна року -1) MyYear = Year (dt_1) - 1 MyMonth = Month (dt_1) MyDay = Day (dt_1) MyCountDay = Day (DateSerial (MyYear, MyMonth + 1, 1) - 1) If MyDay> MyCountDay Then MyDay = MyCountDay dt_1 = DateSerial (MyYear, MyMonth, MyDay) 'Установка TextBox_Year TextBox_Year.Value = Format (dt_1, "yyyy")' Установка ComboBox_Month і календаря Set_M? Nth (dt_1) End Sub Private Sub SpinButton_Year_SpinUp () 'Команда - встановити дату, обрану в календарі (зміна року +1) MyYear = Year (dt_1) + 1 MyMonth = Month (dt_1) MyDay = Day (dt_1) MyCountDay = Day (DateSerial (MyYear, MyMonth + 1 , 1) - 1) If MyDay> MyCountDay Then MyDay = MyCountDay dt_1 = DateSerial (MyYear, MyMonth, MyDay) 'Установка TextBox_Year TextBox_Year.Value = Format (dt_1, "yyyy")' Установка ComboBox_Month і календаря Set_M? nth (dt_1) End Sub тобто * В Формі UserForm: Private Sub UserForm_Initialize () dt_1 = Now 'Заповнення списку ComboBox_Month ComboBox_Month.AddItem "Январь" ComboBox_Month.AddItem "Февраль" ComboBox_Month.AddItem "Март" ComboBox_Month.AddItem "Апрель" ComboBox_Month.AddItem "Май" ComboBox_Month.AddItem "червень" ComboBox_Month.AddItem "Липень" ComboBox_Month.AddItem "Август" ComboBox_Month.AddItem "вересень" ComboBox_Month.AddItem "Жовтень" ComboBox_Month.AddItem «листопад» ComboBox_Month.AddItem "грудень" 'Установка TextBox_Year TextBox_Year.Value = Format (dt_1, "yyyy") 'Установка ComboBox_Month і календаря Set_M? nth (dt_1) End Sub Private Sub UserForm_QueryClose (Cancel As Integer, CloseMode As Integer) If dt_1 0 And TB 0 Then Cells (Str, Stlb) .Value = TB Else Cells (Str , Stlb) .Value = "" End If Cells (Str, Stlb) .Activate End Sub тобто * Залишилося розмістити в (General) наступний код: Private Sub Set_Month (MyDate As Date) 'Установка ComboBox_Month і календаря MyYear = Year (MyDate) MyMonth = Month (MyDate) MyDay = Day (MyDate) ComboBox_Month.ListIndex = MyMonth - 1 MyWeekDay = Weekday (DateSerial (MyYear, MyMonth, 1), vbMonday) MyCountDay = Day (DateSerial (MyYear, MyMonth + 1, 1) - 1) l_start = 2 - MyWeekDay For i = 1 To 6 For j = 1 To 7 If l_start> = 1 And l_start ось і все, хто дочитав молодець .... PS Якщо використовувати прикладений файл Календар , То для новостворених Листів, пропишіть подія, наприклад: Private Sub Worksheet_BeforeDoubleClick (ByVal Target As Range, Cancel As Boolean) Str = ActiveCell.Row Stlb = ActiveCell.Column Form_SelectDate.Show vbModeless Cells (1,1) .Activate End Sub
Value = Format (dt_1, "yyyy") 'Установка ComboBox_Month і календаря Set_M?Value = Format (dt_1, "yyyy")' Установка ComboBox_Month і календаря Set_M?
Value = Format (dt_1, "yyyy")' Установка ComboBox_Month і календаря Set_M?
Value = Format (dt_1, "yyyy") 'Установка ComboBox_Month і календаря Set_M?