Microsoft Access 掲示板

指定月のカレンダーを表示できるようにしたい

7 コメント
views

よろしくお願いいたします。

フォームに、非連結テキストボックスが2つあり、それぞれ西暦年、月を入力します。

それとは別に、日付フィールドの連結テキストボックスで、カレンダーによる入力をする際、
非連結テキストボックスの年と月を読み込んで、その月を表示させたいです。

普通にカレンダーが表示されると今日の月が表示されます。

何か手はありますでしょうか?

あん
作成: 2025/09/18 (木) 10:18:11
通報 ...
2
hiroton 2025/09/19 (金) 10:44:18 2d761@f966d

日付選択カレンダーを表示したときに選択されている日付は、コントロールに日付が入力されている場合はその日付、入力がない場合は「今日」になるようです
非連結の2つのテキストボックスの更新時で日付フィールドの連結テキストボックスに日付を入力するようにするか、新規レコードの場合であれば、規定値プロパティを変更しても反映されます

3
あん 2025/09/19 (金) 11:57:44 3a8f2@888cb

ご回答ありがとうございます。

テーブルは、「日付」 日付/時刻型フィールド

フォームは、このテーブルがレコードソースになってます。
単票形式フォームです。

非連結テキストボックス 「対象年」、「対象月」があります。
連結テキストボックス「日付」があります。

「日付」を入力する際、カレンダーが表示されますが、
「対象年」と「対象月」が入力されていたらその月のカレンダーを表示してほしいです。

hiroton様
非連結のテキストボックスに入力したら、連結テキストボックスは空欄の状態で、入力する際に日付カレンダーをその月で表示してほしいです。

非連結の月に絞って、ユーザーが連結テキストボックスでカレンダーから入力してほしいです。

どうでしょうか。

4
hiroton 2025/09/19 (金) 15:49:49 修正 2d761@f966d

ACCESSの仕様的に「日付」テキストボックスだけではどうしようもないかなーと思ってます
直接入力を禁止し、カレンダーからしか選べないような形であれば、入力用のテキストボックスを使ってどうにかなるかもしれません

入力用に「日付カレンダー」テキストボックス(非連結)を用意します。プロパティを「0cm」にし、「日付」テキストボックスの左端に重なるように設置して見た目上見えないようにします

以下、VBAを使って、「日付カレンダー」(見えないテキストボックス)で日付選択カレンダーを表示し、カレンダーの日付選択時に「日付」テキストボックスに値を設定するサンプルです。

Private Sub 日付_Enter()
    Me!日付カレンダー.SetFocus
End Sub

Private Sub 日付カレンダー_AfterUpdate()
    Me!日付 = Me!日付カレンダー
End Sub

Private Sub 日付カレンダー_Change()
'//カレンダーの日付をクリックしたときに発生するイベント
'//ここで、別なコントロールに移動してAfterUpdateを発生させる
    Me!次のコントロール.SetFocus
End Sub

Private Sub 日付カレンダー_Enter()
    Me!日付.TabStop = False
    If IsDate(Me!日付) Then
        Me!日付カレンダー = Me!日付
    Else
        If IsDate(Me!対象年 & "/" & Me!対象月 & "/1") Then
            Me!日付カレンダー = Me!対象年 & "/" & Me!対象月 & "/1"
        Else
            Me!日付カレンダー = Null
        End If
    End If
    DoCmd.RunCommand acCmdShowDatePicker
End Sub

Private Sub 日付カレンダー_LostFocus()
    Me!日付.TabStop = True
End Sub

※カレンダーで選択した値を反映させるために変更時('change')イベントを使ってコントロールの移動('setFocus')をしています。「Me!次のコントロール」は適切なものを指定してください

5
hiroton 2025/09/19 (金) 18:16:16 2d761@f966d
Private Sub 日付カレンダー_Enter()
    Me!日付.TabStop = False
~(略)~
End Sub

Private Sub 日付カレンダー_LostFocus()
    Me!日付.TabStop = True
End Sub

この部分はキーボード操作向けのおまけ対策です

通常、[TAB]で次のコントロール[Shift]+[TAB]で前のコントロールに移動しますが、
・カレンダーを表示

・[ESC]でカレンダーを非表示

・[Shift]+[TAB]で前のコントロールに移動

とすると、「日付」テキストボックスに戻って「日付」テキストボックスのフォーカス取得時イベントが発生して再び「日付カレンダー」に戻ってくる(動かない)ので「日付」テキストボックスを飛ばしてさらにその前のコントロールに移動できるように制御しています

ついでに、いろいろ触っていたら、この状態([ESC]でカレンダーを非表示にした状態)で何か入力するとエラーが発生したので対策を置いておきます

Private Sub 日付カレンダー_Change()
    On Error Resume Next
    Me!次のコントロール.SetFocus
    If Err <> 0 Then
        DoCmd.RunCommand acCmdShowDatePicker
    End If
    On Error GoTo 0
End Sub

「何か入力」すると、たいていそれは日付として認識できないので、その状態でフォーカスを移動しようとしてエラーが発生します。とりあえず、エラーが発生したら何もしないで再度カレンダー表示に戻すって形で

6
mayu 2025/09/21 (日) 22:14:05 修正 4f8cb@6c788

カレンダーによる入力をする際、
非連結テキストボックスの年と月を読み込んで、その月を表示させたい

 
ご希望のUIが搭載された 日付ピッカー は、おそらく以下で紹介するようなコンポーネントでしょう
 

Better Date Picker
A better date picker that works in both 32-bit & 64-bit Access and uses no ActiveX controls. The latest version automatically adjusts the form size depending on screen resolution and optionally translates the form captions to match the Office language. It also includes a week number feature
Isladogs on Access

 

なお、Colin Riddington(isladogs)氏作の日付ピッカーを利用する場合、
バージョン 1.5 や 1.6 は入力フォームでのコード量も少ないですし、説明動画も用意されていることから
ご自身で仕組みを理解し、運用なさることをお薦めします

7
あん 2025/09/22 (月) 12:52:22 3a8f2@888cb

hiroton様、mayu様
情報ありがとうございます。

両方とも試してみます!
何とか解決法が見つかりそうで、うれしいです。

ありがとうございました。