Access 付属の【 MSCAL.ocx 】
[Windows98SE/Access2000]の環境では、[MSCAL]の
ヘルプは下記の場所にあります。
ショートカットを作っておくと便利でしょう。
[ C:\Program Files\Microsoft Office\Office\MSCAL.hlp ]
(注) Access2010 から MSCAL.ocx が無くなりましたので、Excel 2010(Office 2010 Pro) では
カレンダーコントロールは利用できません。
--- イベント ---
Click / DblClick
[日]をマウスでクリック/ダブルクリックした際に発生
KeyDown / KeyUp / KeyPress [日]をキーボードで選択した際に発生
BeforeUpdate / AfterUpdate
選択された[日]が変わった際に、Valueプロパティ変更される前後で発生
NewYear / NewMonth
表示月が変わって、年/月が変わった際に発生
--- メソッド ---
Today
本日日付の月を表示し、本日日付を選択する。
[Value]プロパティに本日日付を代入するのと同義
NextYear/PreviousYear
表示月を [翌年] [前年] に変更する
NextMonth/PreviousMonth
表示月を [翌月] [前月]に変更する
NextWeek/PreviousWeek
選択されている[日]を翌週(↓)/先週(↑) に動かす
NextDay / PreviousDay
選択されている[日]を翌日(→)/前日(←)に動かす
Refresh
カレンダーを再描画する
AboutBox
カレンダーコントロールのバージョン情報ボックスを表示
--- プロパティ ---
BackColor
カレンダー全体の背景色
Day / Month / Year / Value
選択された[日]の『日/月/年』およびシリアル値
DayFont / DayFontColor
[曜日]タイトルのフォント
DayLength
[曜日]タイトルの日本語/英語 表記
※ カレンダーコントロールのバージョンによって、互換性に問題があります。
MSCAL Ver 〜9 「0(日), 1(S), 2(Sun)」
MSCAL Ver10〜 「0(日曜日), 1(日), 2(Sunday), 3(Sun)」
英語版 Excel 「0(S), 1(Sun), 2(Sunday)」
MonthLength
[月]の日本語/英語 表記
日本語版 0( 1月 2月 3月‥‥ ), 2( January February March ‥‥ )
英語版 0( Jan Feb Mar ‥‥ ), 2( January February March ‥‥ )
FirstDay
カレンダーの左端に来る曜日
※ カレンダーコントロールのバージョンによって、互換性に問題があります。
MSCAL Ver 〜9 「1(日), 2(月), ‥‥ 6(金), 7(土)」
MSCAL Ver10〜 「1(月), 2(火), ‥‥ 6(土), 7(日)」
GridFont / GridFontColor
[日]のフォント
GridCellEffect
[日]の表示形式(フラット、 凸、 凹)
GridLineColor
[日]の表示形式をフラットにした場合の境界線カラー
ShowHorizontalGrid
ShowVerticalGrid
[日]の表示形式をフラットにした場合の境界線表示有無
TitleFont / TitleFontColor
タイトル表示の[年] [月]のフォント
ValueIsNull
[日]選択時は False 、未選択時は True 。True の代入で選択解除できる。
ShowTitle
タイトル表示の[年] [月]の表示有無
ShowDays
[曜日]タイトルの表示有無
※ カレンダーコントロールのバージョンによって、互換性に問題があります。
Access2000以前の[9.0]と Access2002以降の[10.0]では、同じ値でも結果が
異なります(2004/2/9 追記)。
参考HP : すぐに役立つエクセルVBAマクロ集 ( 解説ページ )
[ACC2002]カレンダーコントロールのプロパティの設定値で異なる結果が表示
補) [DayLength]の「設定値と表示内容」が上記で異なっていますが 『すぐに役立つ』の方が正しいです。
※ Excel側から見た場合、Excel2000だから[MSCAL 9.0]、Excel2002だから[MSCAL 10.0]と確実
には言えません。例えば[OFFICE2002Personal + Access2000]という環境ならば、Excel2002で
あっても、MSCALはVer9 です。したがって、Excel/VBAにおいて[Application.Version]を使って
設定値を切り換えるという方法は100%の解決法とは言えません(どのPCにも OFFICE-Pro が
入っていて、Excel とAccess のバージョンが同じという環境ならば大丈夫です)。
この不具合を完全に回避するには「MSCALそのもののバージョンを取得」する必要があります。
'---- OptionButtonで指定 -----------------
Private Sub UserForm_Initialize()
Calendar1.Value = Date
End Sub
Private Sub Calendar1_Click()
If (OptionButton1.Value = True) Then
TextBox1.Value = Format(Calendar1.Value, "yyyy/m/d")
ElseIf (OptionButton2.Value = True) Then
TextBox2.Value = Format(Calendar1.Value, "yyyy/m/d")
ElseIf (OptionButton3.Value = True) Then
TextBox3.Value = Format(Calendar1.Value, "yyyy/m/d")
ElseIf (OptionButton4.Value = True) Then
TextBox4.Value = Format(Calendar1.Value, "yyyy/m/d")
Else
End If
End Sub
'----- 直前のControlで振り分け -----
Private strCalendarTarget As String
Private Sub UserForm_Initialize()
Calendar1.Value = Date
strCalendarTarget = ""
End Sub
Private Sub TextBox1_Enter()
strCalendarTarget = "TextBox1"
End Sub
Private Sub TextBox2_Enter()
strCalendarTarget = "TextBox2"
End Sub
Private Sub TextBox3_Enter()
strCalendarTarget = "" '日付入力欄ではないのでクリア
End Sub
Private Sub Calendar1_Click()
If (strCalendarTarget <> "") Then
Me.Controls(strCalendarTarget).Value = Format(Calendar1.Value, "yyyy/m/d")
Else
'直前のコントロールが日付入力欄ではない
End If
End Sub
'----- カレンダーフォーム呼び出し関数(標準モジュール) ----------
Public Function CalendarDate(ByRef CalDate As Date) As Boolean
Load frmCalendar
With frmCalendar
.Calendar1.Value = CalDate
.Show
If (.Calendar1.ValueIsNull = True) Then
CalendarDate = False '日付入力キャンセル
Else
CalendarDate = True
CalDate = .Calendar1.Value
End If
End With
Unload frmCalendar
End Function
'---- カレンダーフォームモジュール(frmCalendar) -----
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
If (CloseMode = vbFormControlMenu) Then
Cancel = True '閉じるのを[Hide]で行なう為に[X]ボタンは不可
End If
End Sub
Private Sub cmdCancel_Click()
Calendar1.ValueIsNull = True
Me.Hide '呼び元でアクセスできるように[Hide]
End Sub
Private Sub Calendar1_Click()
Me.Hide '呼び元でアクセスできるように[Hide]
End Sub
'----- カレンダーフォーム利用(ユーザーフォームから利用) ----------
Private Sub TextBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MyDate As Date
If IsDate(TextBox1.Value) Then
MyDate = CDate(TextBox1.Value)
Else
MyDate = Date
End If
If (CalendarDate(MyDate) = True) Then
TextBox1.Value = Format(MyDate, "yyyy/m/d")
End If
Cancel = True
End Sub
Private Sub TextBox2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim MyDate As Date
If IsDate(TextBox2.Value) Then
MyDate = CDate(TextBox2.Value)
Else
MyDate = Date
End If
If (CalendarDate(MyDate) = True) Then
TextBox2.Value = Format(MyDate, "yyyy/m/d")
End If
Cancel = True
End Sub
'----- カレンダーフォーム利用(シートから利用 ダブルクリックで表示) ----------
Private Sub Worksheet_BeforeDoubleClick (ByVal Target As Range, Cancel As Boolean)
Dim MyDate As Date
If (Target.Column = 2) Then '(B列)
If IsDate(Target.Text) Then
MyDate = CDate(Target.Text)
Else
MyDate = Date
End If
If (CalendarDate(MyDate) = True) Then
Target.Value = MyDate
End If
Cancel = True
Else
End If
End Sub
'----- カレンダーフォーム利用(シートから利用 右クリックで表示) ----------
Private Sub Worksheet_BeforeRightClick (ByVal Target As Range, Cancel As Boolean)
〜〜 中のコードはダブルクリックと同じ 〜〜
End Sub
'----- カレンダーフォーム利用(シートから利用 セル選択で表示) ----------
Private Sub Worksheet_SelectionChange (ByVal Target As Range)
Dim MyDate As Date
If (Target.Column = 2) Then '(B列)
If IsDate(Target.Text) Then
MyDate = CDate(Target.Text)
Else
MyDate = Date
End If
If (CalendarDate(MyDate) = True) Then
Target.Value = MyDate
End If
'Cancel = True'←Cancel は不用
Else
End If
End Sub
|
||
角田 桂一 Mail:addinbox@h4.dion.ne.jp CopyRight(C) 2001 Allrights Reserved. |