VBA Excel [すべてのバージョン] - カレンダーコントロール

VBA Excel [すべてのバージョン] - カレンダーコントロール

前書き

VBAのカレンダーコントロールは、Excel 2003とExcel 2010の間で変更されました。古いバージョンには「 カレンダー 」という名前のコントロールがあり、新しいバージョンでは「 DTピッカー 」コントロールと呼ばれています。 使用しようとすると、互換性の問題が発生する可能性があります。
  • 新しいバージョンのExcelの予定表コントロールを含むブック
  • 以前のバージョンのExcelのDT Pickerを使用したワークブック

もう1つの懸念は、使用されているMicrosoft Officeのバージョンにあります。 企業構成によっては、DT Pickerコントロールへのアクセスを許可していません。 これを解決するために、ユーザーフォームを使用して独自のカレンダーコントロールを作成することをお勧めします。

ユーザーフォーム

UserFormは以下を含みます:
  • "Days"の29と31のコマンドボタン。
  • ラベル「今月の選択」。
  • 月の間を移動するための2つのボタン( "")。
  • 現在の月と年は、ユーザーフォームの「キャプション」(タイトル)に表示されます。
  • このUserForm内のすべてのコントロールは動的に作成されます。

入門

VBAエディタを開き、新しいUserFormを作成して、そのNameプロパティを "Calendrier"に変更します。

以下のコードをユーザーフォームのモジュールにコピーします。

 Option Explicit Private Sub UserForm_Initialize()コントロールとしてのDim Obj整数としてのMois、整数としてのMois Classe1 'CréationChangement de mois' LABEL集合Collect = New Collection Set Obj = Me.Controls.Add( "forms .Label.1 ")With Obj .Name =" LbChoixMois ".Object.Caption =" Choix du mois: ".Left = 5 .Top = 5 .Width = 70 .Height = 10 'BOOTONS Set Obj = Meで終了します。 Controls.Add( "forms.CommandButton.1")With Obj .Name = "MoisPrec" .Object.Caption = "" .Left = 95 .Top = 1 .Width = 20 .Height = 20 Setで終了するCl = New Classe1 Set Cl.Bouton = Obj Collect.Add Cl 'Creation Entoute Jours de la Semaine i = 1〜7の場合Obj = Me.Controls.Add( "forms.Label.1")を設定Obj .Name = "Jour"を指定して&i .Object.Caption = UCase(左(形式(DateSerial(2014、9、i)、 "dddd")、1))。左= 20 *(i - 1)+ 5。トップ= 25。幅= 20。高さ= 10次の日に終了i 'créationボタン「jours」Mois =月(日付)MoisEnCours = Mois Annee =年(日付)AnneeEnCours = Annee CreationBoutonsJours Mois、Annee Left(Format(Date、 "dd")、1)= "0"の場合Me.Controls( "Bouton"&Format(Date、 "d"))SetFocus Else Me.Controls( "Bouton"&Format(Date) 、 "dd"))。SetFocus End Sub 

ボタンを作成する

日数は月ごとに異なるため、動的に作成します。 そのためには、次の手順が必要です。
  • 古いボタンを削除
  • 月と年に基づいて新しいボタンを作成します。

モジュールを作成し([挿入] - [モジュール])、以下のコードをコピーします。

 オプションExplicit Public WithEventsボタンをMSForms.CommandButtonプライベートSub Bouton_Click()ケースの選択Bouton.Nameケース "MoisPrec" MoisEnCours = MoisEnCours - 1の場合MoisEnCours = 0の場合MoisEnCours = 12 AnneeEnCours = 1 AnneeEnCoursの場合1 An = 1900 MsgBox "終了年月日:1900"ケース終了の場合は終了 "MoisSuiv" MoisEnCours = MoisEnCours = 1の場合はMoisEnCours = 1の場合AnisEnCours = AnneeEnCours + 1の場合は終了End CreationBoutonsJours 

クラスモジュール

コマンドボタンを機能させるには、クラスモジュールを作成する必要があります。

月の間を移動するには

 オプション明示的なパブリックWithEvents BtnとしてMSForms.CommandButton '詳細な手続き "jour"プライベートSub Btn_Click()Dim maDate As DateとしてmaDate = CDate(Btn.Caption& "/"&Calendrier.Tag)' La ligne suivantedétermine 「アクションとエフェクトの実行」を選択してください 'アクティブな日付を選択してください' 'アクティブセル:値=日付' ''アンロードカレンダー 'メッセージボックス'日付の末尾 '' 'サブメンバー'を有効にするプライベートSub Btn_MouseMove(整数としてのByValボタン、整数としてのByValシフト、単一としてのByVal X)日付としての薄暗いmaDate = CDate(Btn.Caption& "/"&Calendrier.Tag)If EstJourFerie(maDate)またはPaques(Year(maDate))= maDateその後Btn.ControlTipText = QuelFerie(maDate)End Sub 

当日のクラスモジュール

 オプション明示的なパブリックWithEvents BtnとしてMSForms.CommandButton '詳細な手続き "jour"プライベートSub Btn_Click()Dim maDate As DateとしてmaDate = CDate(Btn.Caption& "/"&Calendrier.Tag)' La ligne suivantedétermine 「アクションとエフェクトの実行」を選択してください 'アクティブな日付を選択してください' 'アクティブセル:値=日付' ''アンロードカレンダー 'メッセージボックス'日付の末尾 '' 'サブメンバー'を有効にするプライベートSub Btn_MouseMove(整数としてのByValボタン、整数としてのByValシフト、単一としてのByVal X)日付としての薄暗いmaDate = CDate(Btn.Caption& "/"&Calendrier.Tag)If EstJourFerie(maDate)またはPaques(Year(maDate))= maDateその後Btn.ControlTipText = QuelFerie(maDate)End Sub 

祝日を管理する

先ほど作成した標準モジュールでは、休日を識別するための3つの関数を追加します。

休日を文字列として返す関数

 パブリック関数QuelFerie(日付としての日付)文字列としての日付日付としての整数値としての整数、整数値としての整数、整数値としての整数= Paques(年(Jour))Jour = maDateの場合QuelFerie = "Dimanche dePâques":終了関数Jour = CDate(maDate + 1)の場合QuelFerie = "Lundi dePâques":終了関数Jour = CDate(maDate +) 50)その後QuelFerie = "Lundi dePentecôte":Jour = CDate(maDate + 39)の場合は終了関数その後QuelFerie = "Jeudi de l'ascension":終了関数はa =年(Jour):m = Month(Jour):j =日(日)選択ケースm * 100 + jケース101 QuelFerie = "1er Janvier":終了機能ケース501 QuelFerie = "1er Mai":終了機能ケース508 QuelFerie = "8 Mai":終了機能ケース714 QuelFerie = " 14 Juillet ":終了機能ケース815 QuelFerie =" 15Août ":終了機能ケース1101 QuelFerie =" 1er Novembre ":終了機能ケース1111 QuelFerie =" 11 Novembre ":終了機能ケース1225 QuelFerie =" 番号 ":終了機能終了選択終了機能 

祝日を識別する機能

 'SOURCES:' //blog.developpez.com/philben/p11458/vba-access/sagit-il-dun-jour-ferieパブリック関数EstJourFerie(日付としてByValの日付、オプションとしてByVal EstPentecoteFerie Boolean = True)フランスでの最初の議論と議論: '101 = 1er Janvier - 501 = 1er Mai - 508 = 8 Mai - 714 = 14 Juillet' 815 = 15Août - 1101 = 1er Novembre - 1111 = 11 Novembre - 1225 = 25Décembre 'dPa = Lundi dePâques - dAs = Jeudi de l'Ascension - dPe = Lundi dePentecôte'備考:Le lundi dePentecôteest un jourもっと見る'Philben - v1.0 - 2012 - 整数としての静的Annee、日付としてのdPa、日付としてのdAs、ブールとしてのbPe整数としてのm、整数としてのm、整数としてのj a =年(laDate) :m =月(laDate):j =日(laDate)ケースを選択m * 100 + jケース101、501、508、714、815、1101、1111、1225 EstJourFerie = Trueケース323から614 '323:日付mini Lundiドパーク - 614:ダット e maxi Lundi dePentecôteAnneまたはEstPentecoteFerie bPeの場合Annee = a:dPa = Paques(a)+ 1:dAs = dPa + 38 bPe = EstPentecoteFerie:bPeの場合dPe = dPa + 49その他dPe =#1/1 / 100#選択する場合は終了ケースDateSerial(a、m、j):ケースdPa、dAs、dPe:EstJourFerie = True:終了選択終了選択終了機能 
前の記事 次の記事

トップのヒント