カレントデータベース内にあるフォーム名の一覧とともに、それぞれのフォームに配置されているコントロールのフォントの種類とフォントのサイズを収集します。
- 「Database」オブジェクトや「Container」オブジェクトを設定し、「Documents」コレクションの中から、For Each〜Nextステートメントでひとつずつフォーム情報を取り出し、「Document」オブジェクトの変数「doc」にセットしていきます。
- 取り出されたひとつのフォーム情報のうち、フォーム名である「Name」プロパティの値を、ここではそれを何度か使用するため、いったん変数「strFormName」にセットします。
- フォーム内のオブジェクトを参照するので、そのフォームを”デザインビュー”(引数に「acDesign」を指定)で開きます。
- まずフォーム名をイミディエイトウィンドウに出力します。
- そのフォーム内に配置されているすべてのコントロールのコレクションである「Controls」の中から、For Each〜Nextステートメントでひとつずつコントロール情報を取り出し、「Control」オブジェクトの変数「ctl」にセットしていきます。
- 取り出されたひとつのコントロール情報のうち、下記の3つのプロパティ値をイミディエイトウィンドウに出力します。
- Name → 名前
- FontName → フォントの種類
- FontSize → フォントのサイズ
このプロパティ値を出力する前後ではエラー処理を行っています。フォントに関するプロパティは文字を画面に出力する種類のコントロールしか持っていないため、それ以外のコントロールで参照しようとするとエラーとなるからです。
- まず「On Error Resume Next」ステートメントで以降に発生するエラーを無視するようにします。
- 次の行で変数strFontNameにFontNameプロパティの値をセットしようとします。
- もしそのプロパティがあれば正しく変数にセットされますが、なければ実際にはエラーが発生します(無視するようになっているのでプログラムは止まりません)。
- 次の行で、「Err.Number」をチェックします。前行でエラーが発生していなければその値は「0」ですので、イミディエイトウィンドウへの出力を行います。エラーが発生してれば「0以外」の値になっていますので、出力は行わずに次へ進みます。
- 「On Error GoTo 0」ステートメントによっていったんエラー無視を念のため解除しておきます。
- そのフォームを閉じます。
ここではデータ収集のみでデザイン変更はありませんので、引数に「acSaveNo」を指定することで意図的に変更を保存せずに閉じます。
Sub Sample_4_05()
'各フォームのコントロールのフォントの種類とサイズを収集する
Dim dbs As Database
Dim ctn As Container
Dim doc As Document
Dim ctl As Control
Dim strFormName As String
Dim strFontName As String
Set dbs = CurrentDb
Set ctn = dbs.Containers!Forms
For Each doc In ctn.Documents
strFormName = doc.Name
DoCmd.OpenForm strFormName, acDesign
Debug.Print "■" & strFormName
For Each ctl In Forms(strFormName).Controls
With ctl
On Error Resume Next
strFontName = .FontName
If Err.Number = 0 Then
Debug.Print .Name,
Debug.Print .FontName,
Debug.Print .FontSize
End If
On Error GoTo 0
End With
Next ctl
Debug.Print "------------------"
DoCmd.Close acForm, strFormName, acSaveNo
Next doc
End Sub
実行例:
|