ВБА Екцел [Све верзије] - Контрола календара

ВБА Екцел [Све верзије] - Контрола календара

Увод

Контрола календара ВБА измењена је између програма Екцел 2003 и Екцел 2010. Старије верзије имају контролу названу " Календар " и за нове верзије се зове контрола " ДТ Пицкер ". Проблеми са компатибилношћу могу настати када покушате да користите:
  • радне свеске са контролом календара на новим верзијама програма Екцел
  • радне свеске са ДТ Пицкер-ом на претходној верзији програма Екцел.

Друга брига лежи у коришћењу верзије Мицрософт Оффицеа. Неке корпоративне конфигурације не дозвољавају приступ контроли ДТ Пицкер. Да бисте ово исправили, предлажем да креирате сопствену контролу календара, користећи Усерформ.

Тхе УсерФорм

Корисничка форма садржи:
  • 29 и 31 командна дугмета за "дана".
  • Етикета "Избор месеца".
  • 2 дугмета ("") за кретање између мјесеци.
  • Текући мјесец и годину ће бити приказани у "Наслову" (наслову) корисничке форме.
  • Све контроле унутар ове корисничке форме биће креиране динамички.

Почетак

Отворите свој ВБА едитор, креирајте нову УсерФорм и промените својство Наме на "Цалендриер".

Копирајте доњи код у модул корисничке форме:

 Опција Експлицитно Приватно Суб УсерФорм_Инитиализе () Дим Обј Као Контрола Дим и Ас Интегер, Моис Као Интегер, Аннее Као Интегер Дим Цл Ас Цлассе1 'Цреатион Цхангемент де моис' ЛАБЕЛ Сет Цоллецт = Нова колекција Обј = Ме.Цонтролс.Адд ("обрасци") .Лабел.1 ") Са Обј .Наме =" ЛбЦхоикМоис ".Објецт.Цаптион =" Цхоик ду моис: ".Лефт = 5 .Топ = 5 .Видтх = 70 .Хеигхт = 10 Енд витх 'БОУТОНС Сет Обј = Ме. Цонтролс.Адд ("формс.ЦоммандБуттон.1") Са Обј .Наме = "МоисПрец" .Објецт.Цаптион = "" .Лефт = 95 .Топ = 1 .Видтх = 20 .Хеигхт = 20 Енд Витх Сет Цл = Нова класа1 Сет Цл.Боутон = Обј Цоллецт.Адд Цл 'Цреатион ентете Јоурс де ла семаине За и = 1 до 7 Поставите Обј = Ме.Цонтролс.Адд ("формс.Лабел.1") Са Обј .Наме = "Јоур" & и .Објецт.Цаптион = УЦасе (лијево (Формат (ДатеСериал (2014, 9, и), "дддд"), 1)) .Лефт = 20 * (и - 1) + 5. Врх = 25. Ширина = 20. Висина = 10 Енд витх Нект и 'цреатион боутонс "јоурс" Моис = Месец (Датум) МоисЕнЦоурс = Моис Аннее = Година (Датум) АннееЕнЦоурс = Аннее ЦреатионБоутонсЈоурс Моис, Аннее Ако је лијево (Формат (Датум, "дд"), 1) = "0" Затим Ме.Цонтролс ("Боутон" & Формат (Датум, "д")) СетФоцус Елсе Ме.Цонтролс ("Боутон" & Формат (Датум СетФоцус Енд Суб 

Креирајте дугмад

Број дана варира од мјесеца до мјесеца, тако да ћемо их креирати динамички. За ово, процедура која нам је потребна:
  • Уклоните старе типке
  • Креирајте нова дугмад на основу месеца и године.

Направите модул (Инсерт> Модуле) и копирајте доњи код:

 Опција Екплицит Публиц ВитхЕвентс Боутон Ас МСФормс.ЦоммандБуттон Приватни Суб Боутон_Цлицк () Одаберите Цасе Боутон.Наме Случај "МоисПрец" МоисЕнЦоурс = МоисЕнЦоурс - 1 Ако МоисЕнЦоурс = 0 Онда МоисЕнЦоурс = 12 АннееЕнЦоурс = АннееЕнЦоурс - 1 Ако АннееЕнЦоурс = 1899 Онда МоисЕнЦоурс = 1 АннееЕнЦоурс = 1900 МсгБок "Премиере аннее: 1900" Енд Иф Енд Ако је случај "МоисСуив" МоисЕнЦоурс = МоисЕнЦоурс + 1 Ако је МоисЕнЦоурс = 13 Тада МоисЕнЦоурс = 1 АннееЕнЦоурс = АннееЕнЦоурс + 1 Крај Ако завршите Изабери креацијеБоутонсЈоурс МоисЕнЦоурс, АннееЕнЦоурс Енд Суб 

Тхе Цласс Модулес

Мораћемо да креирамо модул класе да би командни тастери радили.

За кретање између мјесеци:

 Оптион Екплицит Публиц ВитхЕвентс Бтн Ас МСФормс.ЦоммандБуттон 'Прочитајте више о томе како желите да прочитате "Приватни поддиректор" Бтн_Цлицк () Дим маДате Ас Датум маДате = ЦДате (Бтн.Цаптион & "/" & Цалендриер.Таг)' Ла лигне суиванте детермине Л'ацтион а еффецтуер лорс д'ун цлиц сур ле боутон 'Поур ентрер ла дате цхоисие данс уне целлуле ет фермер л'Усерформ:' АцтивеЦелл.Валуе = маДате 'Унлоад Цалендриер МсгБок маДате Енд Суб' Аффицхе ле ном ду јоур ферие ау сурвол ду боутон пар ла соурис Приватни Суб Бтн_МоусеМове (БиВал Буттон Као Интегер, БиВал Схифт Као Интегер, БиВал Кс Као Један, БиВал И Као Један) Дим маДате Ас Датум маДате = ЦДате (Бтн.Цаптион & "/" & Цалендриер.Таг) ЕстЈоурФерие (маДате) Ор Пакуес (Година (маДате)) = маДате Затим Бтн.ЦонтролТипТект = КуелФерие (маДате) Крај Суб 

Модул класе за дане

 Оптион Екплицит Публиц ВитхЕвентс Бтн Ас МСФормс.ЦоммандБуттон 'Прочитајте више о томе како желите да прочитате "Приватни поддиректор" Бтн_Цлицк () Дим маДате Ас Датум маДате = ЦДате (Бтн.Цаптион & "/" & Цалендриер.Таг)' Ла лигне суиванте детермине Л'ацтион а еффецтуер лорс д'ун цлиц сур ле боутон 'Поур ентрер ла дате цхоисие данс уне целлуле ет фермер л'Усерформ:' АцтивеЦелл.Валуе = маДате 'Унлоад Цалендриер МсгБок маДате Енд Суб' Аффицхе ле ном ду јоур ферие ау сурвол ду боутон пар ла соурис Приватни Суб Бтн_МоусеМове (БиВал Буттон Као Интегер, БиВал Схифт Као Интегер, БиВал Кс Као Један, БиВал И Као Један) Дим маДате Ас Датум маДате = ЦДате (Бтн.Цаптион & "/" & Цалендриер.Таг) ЕстЈоурФерие (маДате) Ор Пакуес (Година (маДате)) = маДате Затим Бтн.ЦонтролТипТект = КуелФерие (маДате) Крај Суб 

Управљање државним празницима

У стандардном модулу креираном раније, додаћемо три функције за идентификацију празника.

Функција која враћа празник као стринг

 'Фонцтион куи ретоурне ле јоур ферие ен "Стринг"' утиле поур лес инфо-буллес у сурвол дес јоурс фериес Јавна функција КуелФерие (датум као датум) Ас Стринг Дим маДате Ас Дате Дим а Ас Интегер, м Ас Интегер, ј Ас Интегер маДате = Пакуес (Иеар (Јоур)) Ако Јоур = маДате Затим КуелФерие = "Диманцхе де Пакуес": Излаз Функција Ако Јоур = ЦДате (маДате + 1) Онда КуелФерие = "Лунди де Пакуес": Екит Фунцтион Иф Јоур = ЦДате (маДате + 50) Затим КуелФерие = "Лунди де Пентецоте": Излаз Функција Ако Јоур = ЦДате (маДате + 39) Затим КуелФерие = "Јеуди де л'асценсион": Екит Фунцтион а = Иеар (Јоур): м = Месец (Јоур): ј = Даи (Јоур) Селецт Цасе м * 100 + ј Цасе 101 КуелФерие = "1ер Јанвиер": Излаз из случаја 501 КуелФерие = "1ер Маи": Излаз из функције Цасе 508 КуелФерие = "8 мај": Излаз из функције 714 КуелФерие = " 14 Јуиллет ": Екит Фунцтион Цасе 815 КуелФерие =" 15 Аоут ": Излаз из случаја 1101 КуелФерие =" 1ер Новембре ": Излаз из случаја 1111 КуелФерие =" 11 Новембар ": Излаз из функције 1225 КуелФерие =" Ноел ": Екит Функција Енд Селецт Енд Фунцтион 

Функција која идентификује државне празнике

 'СОУРЦЕС:' //блог.девелоппез.цом/пхилбен/п11458/вба-аццесс/сагит-ил-дун-јоур-ферие Јавна функција ЕстЈоурФерие (БиВал лаДате као датум, опционално БиВал ЕстПентецотеФерие као Боолеан = Труе) Као логички 'Детермине си ла дате дате а аргумент ис ун ферие (ен Франце) оу нон: '101 = 1ер Јанвиер - 501 = 1ер Маи - 508 = 8 Мај - 714 = 14 Јуиллет' 815 = 15 Август - 1101 = 1ер Новембре - 1111 = 11 Новембар - 1225 = 25 Децембре 'дПа = Лунди де Пакуес - дАс = Јеуди де л'Асценсион - дПе = Лунди де Пентецоте' Ремаркуе: Ле лунди де Пентецоте је изашао из своје земље (ЕстПентецотеФерие = Фалсе данс це цас) 'Пхилбен - в1.0 - 2012 - Бесплатно за коришћење статичког аннее као целог броја, дПа као датум, дАс као датум, дПе као датум, бПе као логички Дим а Као Интегер, м Као Интегер, ј Као Интегер а = Година (лаДате) : м = Месец (лаДате): ј = Дан (лаДате) Изабери Цасе м * 100 + ј Цасе 101, 501, 508, 714, 815, 1101, 1111, 1225 ЕстЈоурФерие = Труе Цасе 323 То 614 '323: Датум мини Лунди де Пакуес - 614: Дат е маки Лунди де Пентецоте Ако је Аннее Или ЕстПентецотеФерие бПе Затим Аннее = а: дПа = Пакуес (а) + 1: дАс = дПа + 38 бПе = ЕстПентецотеФерие: Ако је бПе онда дПе = дПа + 49 Остало дПе = # 1/1 / 100 # Крај Ако изаберете Цасе ДатеСериал (а, м, ј): Цасе дПа, дАс, дПе: ЕстЈоурФерие = Труе: Енд Селецт Енд Енд Селецт Фунцтион 
Претходни Чланак Sledeći Чланак

Топ Савети