オブジェクト種別マスタ
オブジェクト種別マスタにより拡張子に対して拝啓を変更する事が可能です。(iMenuA共通マスタ)
拡張子によって条件付き書式(テキストの前景色・背景色)を設定する事が出来ます。
サブフォームの一覧表の表示例の所を一行ずつ条件付き書式を設定したVBAの記述です。
FormatConditions.Delete メソッドとFormatConditions.Add メソッドを使い条件付き書式を設定します。
Public Sub 色更新実行()
Dim MDB3 As Database, TBL3 As Recordset, TBL4 As Recordset
Dim JOKEN As String, i As LongPtr, Field_Name As String
Set MDB3 = CurrentDb
Set TBL3 = MDB3.OpenRecordset("◆オブジェクト種別マスタ", dbOpenDynaset, dbSeeChanges)
Set TBL4 = Forms![W004_オブジェクト種別マスタ_FM]![W004_オブジェクト種別マスタ_FM_SUBF01].Form.RecordsetClone
If TBL4.EOF And TBL4.BOF Then GoTo 終了
If TBL3.EOF And TBL3.BOF Then GoTo 終了
For i = 0 To TBL4.Fields.Count - 1
Field_Name = TBL4.Fields(i).Name
If Field_Name <> "表示例" Then GoTo 次の処理
Forms![W004_オブジェクト種別マスタ_FM]![W004_オブジェクト種別マスタ_FM_SUBF01].Form.Controls(Field_Name).FormatConditions.Delete '一旦現在の書式を削除する次の処理:
TBL3.MoveFirst
Do Until TBL3.EOF
JOKEN = "[登録ID]=" & TBL3![登録ID]
With Forms![W004_オブジェクト種別マスタ_FM]![W004_オブジェクト種別マスタ_FM_SUBF01].Form.Controls(Field_Name).FormatConditions.Add(acExpression, , JOKEN)
On Error GoTo Color_Err
.ForeColor = TBL3![前景色]
.BackColor = TBL3![背景色]
End With
TBL3.MoveNext
Loop
次の処理:
Next i
終了:
TBL3.Close
TBL4.Close
Set TBL3 = Nothing
Set TBL4 = Nothing
Set MDB3 = Nothing
Exit Sub
Color_Exit:
Exit Sub
Color_Err:
MsgBox Error$
Resume Color_Exit
End Sub
上記を実行すると下図のような条件付き書式となります。
「iMenuA」のフォーム構成は殆どの場合、メインフォーム・サブフォーム(データシート)項目が多ければ、メインフォームに呼出し・登録、
少ないものに関しては「一覧編集」ボタンとしています。
データシートで表示する上で列幅、列高を指定あるいは長さによって自動調節出来ます。但し自動列幅調整は表示されているものの最大長になります。
一覧に見えていなくレコードセレクタで見えない場所にあるものに関しては調整してくれません。ご注意ください。
Public Sub 列幅自動整列()
With Forms![W004_オブジェクト種別マスタ_FM]![W004_オブジェクト種別マスタ_FM_SUBF01]
.Requery
.Form.RowHeight = 312 'データシートの高さ 15.6 1=20
Dim ctl As Control
For Each ctl In .Form.Controls
If ctl.ControlType <> acLabel Then
ctl.ColumnWidth = -2
End If
Next ctl
End With
End Sub
カラーダイアログの使用方法
「Color Dialog」ボタンのクリックした時のイベントプロシージャは以下の通りです。
Private Sub ColorDialog1_Click()
Dim Color_設定値 As String
If IsNull(前景色) Then 前景色 = 0
Color_設定値 = 前景色
前景色 = str(GetColorDlg(前景色))
DoEvents
If 前景色 = -1 Then 前景色 = Color_設定値
表示例.ForeColor = 前景色
Me.Repaint
End Sub
標準プロシージャーで以下を作成します。名前は GetColor_Dialog
Option Compare Database
Private Type ChooseColor
lStructSize As LongPtr
hWndOwner As LongPtr
hInstance As LongPtr
rgbResult As LongPtr
lpCustColors As String
flags As LongPtr
lCustData As LongPtr
lpfnHook As LongPtr
lpTemplateName As String
End Type
'Access x64 x86の切替え
#If VBA7 And Win64 Then
'64bit版
Private Declare PtrSafe Function ChooseColor Lib "comdlg32.dll" Alias "ChooseColorA" (pChoosecolor As ChooseColor) As LongPtr
#Else
'32bit版
Private Declare Function ChooseColor Lib "comdlg32.dll" Alias "ChooseColorA" (pChoosecolor As ChooseColor) As Long
#End If
Private Const CC_RGBINIT = &H1 '色のデフォルト値を設定
Private Const CC_LFULLOPEN = &H2 '色の作成を行う部分を表示
Private Const CC_PREVENTFULLOPEN = &H4 '色の作成ボタンを無効にする
Private Const CC_SHOWHELP = &H8 'ヘルプボタンを表示
'機能 : 色の設定ダイアログを表示し、そこで選択された色のRGB値を返す
'引数 : lngDefColor デフォルト表示する色
'返値 : 成功時 RGB値 キャンセル時-1 エラー時 -2 (ゼロは黒なので注意)
Function GetColorDlg(lngDefColor As LongPtr) As LongPtr
Dim udtChooseColor As ChooseColor
Dim lngRet As LongPtr
With udtChooseColor
'ダイアログの設定
.lStructSize = Len(udtChooseColor)
.hWndOwner = Application.hWndAccessApp
.lpCustColors = String$(64, Chr$(0))
.flags = CC_RGBINIT + CC_LFULLOPEN
.rgbResult = lngDefColor
'ダイアログを表示
lngRet = ChooseColor(udtChooseColor)
'ダイアログからの返り値をチェック
If lngRet <> 0 Then
If .rgbResult > RGB(255, 255, 255) Then
'エラー
GetColorDlg = -2
Else
'正常終了、RGB値を返り値にセット
GetColorDlg = .rgbResult
End If
Else
'キャンセルが押されたとき
GetColorDlg = -1
End If
End With
End Function