アクセス フォームコントロール関連

ロックされている入力項目の背景色をフォームと同じにするプロシージャ
権限や作業状態によって、テキストボックス等を入力不可状態でフォームを起動する際、
enabledプロパティをFalseにすると文字の色まで薄くなり値が見辛くなるし、
LockedプロパティをTrueにすると背景色が変わらず入力不可であることがわからない。
ロックされた入力項目が多いと1つずつ背景色を変更するのも面倒なので
次のプロシージャで指定したフォーム上のロックされた入力項目の背景色を一括変更する。
'''''''''''''''''''''''''''''
'指定されたフォーム上のコントロールがロックされているときの色設定
'引数:objF フォームオブジェクト
'戻り値:エラーのときエラーメッセージ、通常は空文字を返す
'''''''''''''''''''''''''''''
Public Function Fuc_SetLockControlColor(objF As Form) As String
On Error GoTo ErrHandler:
Fuc_SetLockControlColor = "" '戻り値
With objF
'コントロール使用不可色設定
For Each objC In objF.Controls
Select Case TypeName(objC)
'テキストボックス、コンボボックスの場合
Case "Textbox", "Combobox"
If objC.Locked Then
'親フォームの背景と同色にする
objC.BackColor = .詳細.BackColor
objC.TabStop = False
Else
objC.BackColor = 16777215
objC.TabStop = True
End If
'チェックボックスの場合
Case "Checkbox"
If objC.Locked Then
'立体表示を「枠囲み」にする
objC.SpecialEffect = 3 '枠囲み
objC.TabStop = False
Else
objC.SpecialEffect = 2 'くぼみ
objC.TabStop = True
End If
End Select
Next
End With
Exit Function
ErrHandler:
Fuc_SetLockControlColor = Err.Number & ":" & Err.Description
End Function

日付入力のアシスト用カレンダー
アクセスの日付入力規則が設定されたテキストボックスは作る側にとっては楽だが
入力するユーザーにとってはやや入力し辛い。
ダブルクリックで入力をアシストするカレンダーを表示させると親切だが、
場合によっては日付入力項目が多かったり、複数のフォームにまたがったりすることもある
ので、カレンダー専用のフォームを作成しておくのが効率が良い。
・作成するフォームは、フォームにカレンダーコントロール9.0を貼り付けただけの単純な構成
フォーム名は、frmCalenderとする
・カレンダーフォームのイベントソースはロード時とクリック時のみ記述
'カレンダークリック時
Private Sub Calender1_Click()
'選択された日付をパラメータ用の変数にセットする
GdateCalender = Me.Calender1.Value
'カレンダーを閉じる
DoCmd.Close acForm, Me.Name, acSaveNo
End Sub
'フォームロード
Private Sub Form_Load()
'パラメータで受け取った日付をデフォルト日付に設定する
If IsDate(GdateCalender) Then Me.Calender1.Value = GdateCalender
'パラメータ用の変数をクリアする
GdateCalender = Null
End Sub
・日付入力テキストボックスのダブルクリックイベントには1行だけ記述
'オープン日Fromダブルクリック
Private Sub txtDate1_DblClick(Cancel As Integer)
On Error Resume Next
'カレンダー表示
Call F_DispCalender(Me.txtDate1)
End Sub
・標準モジュールに次のグローバル変数とカレンダー用関数を作成する
'カレンダーアシスト画面用パラメータ
Public GdateCalender As Variant 'カレンダーアシスト画面の戻り値
'''''''''''''''''''''''''''''
'カレンダーアシスト画面呼び出し
'''''''''''''''''''''''''''''
Public Function F_DispCalender(objT As TextBox) As String
On Error Resume Next:
Dim strMsg As String
If Not objT.Locked Then
'カレンダーのデフォルト日付として現在のテキストボックスの値を渡す
If IsDate(objT) Then GdateCalender = objT
'カレンダー表示
DoCmd.OpenForm "frmCalender", acNormal, , , , acDialog
'パラメータ用の変数からテキストボックスに値を返す
If IsDate(GdateCalender) Then objT = GdateCalender
End If
Exit Function
End Function
|