レポートとのイベントを表示するお手本データベース

図7-1-1 レポートのイベントを表示するサンプルデータベース
このサンプルデータベースは、Access のレポートのイベントシーケンスをフォーム上のリストボックスに表示します。イベントログのフォームには、レポートを開閉するコマンドボタン。それから、イベントの表示を開始/停止するトグルボタンなどが配置されています。レポートを開くボタンをクリックすると、サンプルレポートが開かれて商品マスタが商品区分毎にプレビュー印刷されます。フォームのリストボックスには、レポートのイベントが発生順にシーケンス番号が付けられて表示されます。リストボックスには、一定の間隔でイベントの境界線(------)が表示されますので、一連のイベントの流れを理解するのに便利です。フォームの最下位には、チェックボックスが配置されていますので、これらのチェックボックスを外すことにより、リストボックスに表示されるイベントを制御することができます。例えば、レポートのページヘッダー/フッターのイベントのみ興味がある場合、Page Header/Footerのチェックをクリックして、その他のイベントのチェックを外します。
このサンプルデータベースのイベントシーケンスを分析することにより、請求書を業者指定伝票に印刷するサンプルデータベースのように、グループ単位でページ番号を(1/99)のように印字したり、先頭ページにのみ請求額合計を印字することができます。
このサンプルデータベース(CH7-1.mdb)では、以下に示すノウハウを習得することができます。
◆ レポートのイベントをフォームのリストボックスに表示させる方法
◆ フォームのタイマー機能の使い方
◆ フォームサイズに合わせて、リストボックスの幅を自動調整する方法
◆ リストボックスの値集合タイプに、ユーザー定義関数を指定して値集合ソースを作成する方法
◆ コレクション型のメモリ変数にメンバを登録/削除する方法
● サンンプルデータベースで使用するテーブル/クエリを準備するには
1 Accessを起動したら作業フォルダに、新規データベースCH7-1.mdbを作成します。
2 メニューから外部データベースの取り込み、インポートをクリックします。インポートのダイアログが表示されたら、Access のサンプルデータベースNorthwind.mdbを選択してインポートのボタンをクリックします。(Northwind.mdbは、デフォルトでは、”C:\Program Files\Microsoft Office\Office\Samples”にインストールされます。)
3 オブジェクトのインポートのダイアログが表示されたら、テーブルのタブをクリックして商品、商品区分テーブルを選択してOKボタンをクリックします。

図7-1-2 Northwind.mdbから商品、商品区分テーブルをインポートする
4 テーブルをインポートしたら、データベースウィンドウにNorthwind.mdbの商品、商品区分テーブルが表示されているか確認します。
5 データベースウィンドウからクエリ
をクリックしたら、一覧からデザインビューでクエリを作成するをダブルクリックします。テーブルの表示ダイアログが表示されたら、閉じるのボタンをクリックして閉じます。メニューからSQLのアイコン
をクリックして、SQLビューのウィンドウを表示させたら、リスト7-1-1のSQLを入力します。(SQLを入力する代わりに、CH7-1.mdbからqryProductsbyCategoryをインポートしてもよい。)クエリをデザインモードで開いたら、図7-1-3のようになっているか確認します。クエリをqryProductsbyCategoryの名称で保存して閉じます。
リスト7-1-1 qryProductsbyCategoryのSQL
|
SELECT 商品区分.区分コード, 商品区分.区分名, 商品.商品コード, 商品.商品名, 商品.梱包単位, 商品.単価 FROM 商品区分 INNER JOIN 商品 ON 商品区分.区分コード = 商品.区分コード; |

図 7-1-3 qryProductsbyCategoryをデザインビューで表示した例
6 テーブルとクエリの準備ができたらAccess を終了させます。
● イベントを発生させるためのサンプルレポートを作成するには
1 Access を起動したら、作業フォルダに作成したCH7-1.mdbを開きます。
2 データベースウィンドウが表示されたら、レポート
をクリックします。新規作成のボタンをクリックして、レポートの新規作成ダイアログを表示させます。ダイアログのリストボックスから、デザインビューを選択します。基になるテーブル/クエリのコンボボックスからは、qryProductsbyCategoryを選択してOKボタンをクリックします。
3 レポートのデザインウィンドウが表示されたら、メニューから並べ替え/グループ化のアイコン
をクリックします。ダイアログのフィールドの1行目のコンボボックスから、区分コードを選択します。並べ替え順序のコンボボックスからは、昇順を選択します。グループプロパティのグループヘッダー/グループフッターのコンボボックスからは、“はい”を選択します。フィールドの2行目のコンボボックスから商品コードを選択します。並べ替え順序のコンボボックスからは、昇順を選択します。ダイアログの閉じるのボタン(X)をクリックして閉じます。

図7-1-4 ダイアログから区分コード、商品コードを選択して並べ替え順序とグループプロパティを設定する
4 メニューからフィールドリストのアイコン
をクリックして、ダイアログを表示させます。ダイアログから区分コードと区分名をドラッグして、レポートの区分コードヘッダーに配置します。ダイアログから、商品コード、商品名、梱包単位、単価のフィールドをドラッグして、レポートの詳細に配置します。テキストボックスのラベルを切り取って、区分コードヘッダーに貼り付けたら、図7-1-5のように再配置します。

図7-1-5 イベントを発生させるサンプルレポートのレイアウト
5 メニューからツールボックスを表示させたら、ラベルのアイコン
をクリックして、レポートヘッダーに“区分別商品一覧”のラベルを作成します。ツールボックスからテキストボックスのアイコン
をクリックしたら、ページヘッダーに日付を印字するテキストボックスを作成します。テキストボックスのコントロールソースには、=Now()を埋め込みます。ツールボックスからテキストボックスのアイコン
をクリックしたら、区分コードフッターとレポートフッターに配置します。これらのテキストボックスのコントロールソースには、=Sum([単価])を埋め込んで単価の合計金額を印字させます。ツールボックスからテキストボックスのアイコン
をクリックして、ページフッターに配置します。テキストボックスのコントロールソースに、="("
& [Page] & "/" & [Pages] & ")"を埋め込んで、ページ番号を(1/999)の形式で印字させます。
レポートに配置したコントロールの、プロパティを表7-1-1のように設定します。
表7-1-1 レポートに配置したコントロールのプロパティ
|
プロパティの種類 |
プロパティ |
値 |
|
レポートヘッダー |
名前 |
ReportHeader |
|
ページヘッダー |
名前 |
PageHeader |
|
区分コードヘッダー |
名前 |
GroupHeader |
|
詳細 |
名前 |
Detail |
|
区分コードフッター |
名前 |
GroupFooter |
|
ページフッター |
名前 |
PageFooter |
|
レポートフッター |
名前 |
ReportFooter |
|
ラベル |
標題 |
区分別商品一覧 |
|
フォントサイズ |
20 |
|
|
テキストボックス1 |
名前 |
txtPageHeader_Date |
|
コントロールソース |
=Now() |
|
|
テキストボックス2 |
名前 |
txtGroupID |
|
コントロールソース |
区分コード |
|
|
テキストボックス3 |
名前 |
txtGroupName |
|
コントロールソース |
区分名 |
|
|
テキストボックス4 |
名前 |
txtDetail_ProductID |
|
コントロールソース |
商品コード |
|
|
テキストボックス5 |
名前 |
txtDetail_ProductName |
|
コントロールソース |
商品名 |
|
|
テキストボックス6 |
名前 |
txtDetail_Unit |
|
コントロールソース |
梱包単位 |
|
|
テキストボックス7 |
名前 |
txtDetail_Cost |
|
コントロールソース |
単価 |
|
|
テキストボックス8 |
名前 |
txtGroupFooter_Total |
|
コントロールソース |
=Sum([単価]) |
|
|
テキストボックス9 |
名前 |
txtPageFooter_Page |
|
コントロールソース |
="(" & [Page] & "/" & [Pages] & ")" |
|
|
テキストボックス10 |
名前 |
txtReportFooter_Total |
|
コントロールソース |
=Sum([単価]) |
6 メニューからコードのアイコン
をクリックして、レポートモジュールを表示させます。CH7-1.mdbを開いてrptEventのモジュールをコピーして貼り付けます。レポートモジュールのソースコードは、リスト7-1-2を参照してください。CH7-1.mdbから、モジュールbasEvents, basMyLibをコピーします。(CH7-1.mdbのデータベースウィンドウからモジュールをドラッグして、作業フォルダのCH7-1.mdbのデータベースウィンドウに貼り付けるとコピーされます。)
7 サンプルレポートをrptEventの名称で保存したら、Access を終了させます。
rptEventのレポートモジュールには、レポートでサポートしている各種イベントが登録されています。これらのイベントからは、イベントのログを取得するために、LogEvent_FSを呼びます。LogEvent_FSには、引数としてイベント名とイベントタイプを指定します。イベントタイプは、イベントの表示を制御するのに使用します。
LogEvent_FS
"Report_Open(Cancel)", conFocus
LogEvent_FSでは、フォームfrmLogに登録されているAddItemメソッドを使用して、フォーム上のリストボックスにイベントを表示させます。
Public Sub
LogEvent_FS(strEvent As String, Optional intEventType As Integer = 0)
On Error Resume Next
Forms("frmLog").AddItem strEvent,
intEventType
On Error GoTo 0
End Sub
レポートrptEventに登録されているイベントの種類:
Report_Activate(),Report_Deactivate(),Report_Error(),Report_Open(),Report_Close(),
Report_Page(),ReportHeader_Format(),ReportHeader_Print(),ReportFooter_Format(),
ReportFooter_Print(),PageHeader_Format(),PageHeader_Print(),PageFooter_Format(),
PageFooter_Print(),GroupHeader_Format(),GroupHeader_Print(),GroupFooter_Format(),GroupFooter_Print(),Detail_Format(),Detail_Print()
リスト7-1-2 rptEventのモジュール
|
Option Compare Database Option Explicit Dim mfDetailPrint As Boolean Dim mfDetailFormat As Boolean Private Sub Detail_Format(Cancel As Integer, FormatCount As Integer) If Not mfDetailFormat Then mfDetailFormat = True LogEvent_FS "Detail_Format(Cancel=" & Cancel & _ ", FormatCount=" & FormatCount & ") * N times", conDetail End If End Sub Private Sub Detail_Print(Cancel As Integer, PrintCount As Integer) If Not mfDetailPrint Then mfDetailPrint = True LogEvent_FS "Detail_Print(Cancel:" & Cancel & _ ", PrintCount=" & PrintCount & ") * N times", conDetail End If End Sub Private Sub Detail_Retreat() LogEvent_FS "Detail_Retreat()", conDetail End Sub Private Sub GroupFooter_Format(Cancel As Integer, FormatCount As Integer) LogEvent_FS "GroupFooter_Format(Cancel=" & Cancel & _ ", FormatCount=" & FormatCount & "," & Me.txtGroupName & ")", conGroupFooter End Sub Private Sub GroupFooter_Print(Cancel As Integer, PrintCount As Integer) LogEvent_FS "GroupFooter_Print(Cancel=" & Cancel & _ ", PrintCount=" & PrintCount & "," & Me.txtGroupName & ")", conGroupFooter End Sub Private Sub GroupFooter_Retreat() LogEvent_FS "GroupFooter_Retreat()", conGroupFooter End Sub Private Sub GroupHeader_Format(Cancel As Integer, FormatCount As Integer) mfDetailFormat = False LogEvent_FS "GroupHeader_Format(Cancel=" & Cancel & _ ", FormatCount=" & FormatCount & "," & Me.txtGroupName & ")", conGroupHeader End Sub Private Sub GroupHeader_Print(Cancel As Integer, PrintCount As Integer) mfDetailPrint = False LogEvent_FS "GroupHeader_Print(Cancel=" & Cancel & _ ", PrintCount=" & PrintCount & "," & Me.txtGroupName & ")", conGroupHeader End Sub Private Sub GroupHeader_Retreat() LogEvent_FS "GroupHeader_Retreat()", conGroupHeader End Sub Private Sub PageFooter_Format(Cancel As Integer, FormatCount As Integer) LogEvent_FS "PageFooter_Format(Cancel=" & Cancel & _ ", FormatCount=" & FormatCount & ",Page=" & Me.Page & "/" & Me.Pages _ & ")", conPageFooter If Not mfDetailPrint Then LogEvent_FS "----------------------------------------------------------", conAddLine End If End Sub Private Sub PageFooter_Print(Cancel As Integer, PrintCount As Integer) LogEvent_FS "PageFooter_Print(Cancel=" & Cancel & _ ", PrintCount=" & PrintCount & ",Page=" & Me.Page & "/" & Me.Pages _ & ")", conPageFooter LogEvent_FS "----------------------------------------------------------", conAddLine End Sub Private Sub PageHeader_Format(Cancel As Integer, FormatCount As Integer) mfDetailFormat = False LogEvent_FS "PageHeader_Format(Cancel=" & Cancel & _ ", FormatCount=" & FormatCount & ",Page=" & Me.Page & "/" & Me.Pages _ & ")", conPageHeader End Sub Private Sub PageHeader_Print(Cancel As Integer, PrintCount As Integer) mfDetailPrint = False LogEvent_FS "PageHeader_Print(Cancel=" & Cancel & _ ", PrintCount=" & PrintCount & ",Page=" & Me.Page & "/" & Me.Pages _ & ")", conPageHeader End Sub Private Sub Report_Activate() LogEvent_FS "Report_Activate()", conFocus End Sub Private Sub Report_Close() LogEvent_FS "Report_Close()", conFocus End Sub Private Sub Report_Deactivate() LogEvent_FS "Report_Deactivate()", conFocus End Sub Private Sub Report_Error(DataErr As Integer, Response As Integer) LogEvent_FS "Report_Error(DataErr, Response)", conMisc End Sub Private Sub Report_NoData(Cancel As Integer) LogEvent_FS "Report_NoData(Cancel)", conMisc End Sub Private Sub Report_Open(Cancel As Integer) LogEvent_FS "Report_Open(Cancel)", conFocus SetAppTitle_FS "Event Log Demo (C) " & Year(Date) & " by Akio Kasai" End Sub Private Sub Report_Page() LogEvent_FS "Report_Page()", conMisc End Sub Private Sub ReportFooter_Format(Cancel As Integer, FormatCount As Integer) LogEvent_FS "ReportFooter_Format(Cancel=" & Cancel & _ ", FormatCount=" & FormatCount & ")", conReportFooter End Sub Private Sub ReportFooter_Print(Cancel As Integer, PrintCount As Integer) LogEvent_FS "ReportFooter_Print(Cancel=" & Cancel & _ ", PrintCount=" & PrintCount & ")", conReportFooter End Sub Private Sub ReportFooter_Retreat() LogEvent_FS "ReportFooter_Retreat()", conReportFooter End Sub Private Sub ReportHeader_Format(Cancel As Integer, FormatCount As Integer) LogEvent_FS "ReportHeader_Format(Cancel=" & Cancel & _ ", FormatCount=" & FormatCount & ")", conReportHeader End Sub Private Sub ReportHeader_Print(Cancel As Integer, PrintCount As Integer) LogEvent_FS "ReportHeader_Print(Cancel=" & Cancel & _ ", PrintCount=" & PrintCount & ")", conReportHeader End Sub Private Sub ReportHeader_Retreat() LogEvent_FS "ReportHeader_Retreat()", conReportHeader End Sub |
● レポートのイベントを表示させるフォームを作成するには
1 Access を起動したら、作業フォルダに作成したCH7-1.mdbを開きます。
2 データベースウィンドウからフォーム
をクリックしたら、一覧からデザインビューでフォームを作成するをダブルクリックします。フォームのデザインビューが表示されたら、ツールボックスを表示させます。ツールボックスからリストボックスのアイコン
をクリックして、フォーム詳細の右側に配置します。ツールボックスから、コマンドボタンのアイコン
をクリックしたら、リストボックスの左に3個のコマンドボタン(上から順番に、Clear, Open,Close)を作成します。ツールボックスからオプショングループのアイコン
をクリックしたら、コントロールウィザード
を利用して、2個のトグルボタンを作成します。ツールボックスからチェックボックスのアイコン
をクリックしたら、リストボックスの下に7個のチェックボックスを作成します。ツールボックスから、四角形のアイコン
をクリックしたら、チェックボックスを四角形で囲みます。最後に、ツールボックスからラベルのアイコン
をクリックしたら、四角形の左側に配置して標題に”Filter Events:”を入力します。このフォームでは、タイマを使用しますのでフォームのプロパティを表示させたら、タイマ間隔に5000(5秒)を設定します。この設定によりタイマ時のイベントには、5秒間隔で定期的に制御が渡ります。フォームに作成したコントロールのプロパティは、表7-1-2のように設定します。
表7-1-2 フォームに作成したコントロールのプロパティ
|
コントロールの種類 |
プロパティ |
値 |
|||||
|
リストボックス |
名前 |
lstLog |
|||||
|
値集合タイプ |
FillLog |
||||||
|
コマンドボタン1 |
名前 |
cmdClear |
|||||
|
コマンドボタン2 |
名前 |
cmdOpen |
|||||
|
コマンドボタン3 |
名前 |
cmdClose |
|||||
|
オプショングループ |
名前 |
grpStartStop |
|||||
|
既定値 |
1 |
||||||
|
|
トグルボタン
|
||||||
|
チェックボックス1 |
名前 |
chkReportHeaderFooter |
|||||
|
チェックボックス2 |
名前 |
chkPageHeaderFooter |
|||||
|
チェックボックス3 |
名前 |
chkGroupHeaderFooter |
|||||
|
チェックボックス4 |
名前 |
chkDetail |
|||||
|
チェックボックス5 |
名前 |
chkFocus |
|||||
|
チェックボックス6 |
名前 |
chkTimer |
|||||
|
チェックボックス7 |
名前 |
chkMisc |
|||||
|
四角形 |
立体表示 |
枠囲み |
|||||
|
ラベル |
標題 |
Filter Events: |
|||||
|
フォーム |
タイマ間隔 |
5000(5秒) |

図7-1-6 レポートのイベントを表示するフォームのレイアウト
3 メニューからコードのアイコン
をクリックしてフォームモジュールを表示させます。CH7-1.mdbを開いたら、frmLogのフォームモジュールをコピーして貼り付けます。フォームモジュールのソースコードは、リスト7-1-3を参照してください。
4 フォームをビューモードで表示させたら、Openのコマンドボタンをクリックしてサンプルレポートをプレビュー印刷モードで開きます。図7-1-7のように、レポートのイベントが発生順に番号付けされてリストボックス上に表示されます。行001のReportHeader_Formatは、レポートのフォーマット時のイベントを意味します。イベント名の()は、引数を意味します。行番号001~021までは、引数Pageの分子に、ページ番号が表示されていますが、分母の合計ページ数は0になっています。これらのフォーマットイベントは、Accessがレポートの合計ページ数を計算していることを意味します。行番号025~026のイベントでは、Page=1/4のように表示されていますが、これはレポートの合計ページ数が決定したことを意味します。レポートで="(" & [Page] & "/" & [Pages] & ")"のように、Page/Pagesプロパティを使用して合計ページ数も表示させるように設定すると、フォーマット時のイベントには2回制御が渡ります。
フォーム最下位のチェックボックスをクリックすることにより、リストボックスに表示されるイベントを制御することができます。例えば、Group Header/Footerのイベントのみ表示させたいときは、その他のイベントのチェックを外して、Group Header/Footerにチェックを付けます。

図7-1-7 レポートのイベントシーケンスがリストボックスに表示された例
5 フォームをfrmLogの名称で保存したらAccess を終了させます。
Form_Load()イベントの処理
このイベントは、フォームが開かれてデータをロードするときに発生します。このイベントでは、モジュールレベルのメモリ変数を初期化します。
Form_Close()イベントの処理
このイベントは、フォームが閉じられるときに発生します。このイベントでは、コレクションのメモリ変数を解放します。
Form_Resize()イベントの処理
このイベントは、フォームのサイズを変更したときに発生します。このイベントでは、フォームサイズに合わせて、リストボックスの幅を自動調整します。
lstLog.Width = Me.WindowWidth - 1440
lstLog.ColumnWidths = lstLog.Width
Form_Timer()イベントの処理
このイベントは、タイマ間隔で設定した時刻になると発生します。このイベントでは、リストボックスに5秒間隔で境界線(------)を表示します。
cmdClear_Click()イベントの処理
このイベントは、フォームからClearボタンをクリックしたときに発生します。このイベントでは、イベントを格納するコレクション変数mcolLogItemsを初期化します。
cmdOpen_Click()イベントの処理
このイベントは、フォームからOpenのコマンドボタンをクリックしたときに発生します。このイベントでは、DoCmdのOpenReportメソッドでサンプルレポートをプレビュー印刷モードで開きます。
cmdClose_Click()イベントの処理
このイベントは、フォームからCloseのボタンをクリックしたときに発生します。このイベントでは、DoCmdのCloseメソッドでサンプルレポートを閉じます。
grpStartStop_AfterUpdate()イベントの処理
このイベントは、オプショングループからStart/Stopのトグルボタンをクリックしたときに発生します。このイベントでは、フォームのタイマを使用してリストボックスにレポートのイベントを表示させる処理を開始/停止します。タイマ間隔に0を設定すると、イベントの表示が停止されます。タイマ間隔に5000を設定すると5秒間隔で、イベントを表示します。
FillLog()関数
この関数は、リストボックスの値集合タイプに指定されていて、リストボックスが再クエリされたときに実行されます。この関数では、コレクション変数mcolLogItemsに格納されているレポートのイベントをリストボックスに表示します。Select Case… End Selectでは、引数intCodeに対応した処理を行います。acLBInitializeの条件では、AddItemToListを呼び出して、mvarNewItemに格納されているイベントをコレクション変数mcolLogItemsに追加します。acLBGetRowCountの条件では、コレクションのアイテム数を返します。acLBGetValueの条件では、コレクション変数に格納されているアイテムを順番に返します。
Select Case intCode
Case acLBInitialize
AddItemToList
ctl =
mcolLogItems.Count - 1
FillLog = True
Case acLBOpen
FillLog = Timer
Case acLBGetRowCount
FillLog =
mcolLogItems.Count
Case acLBGetValue
FillLog =
mcolLogItems(lngRow + 1)
End Select
AddItemメソッド
このメソッドは、フォーム独自に追加したメソッドでLogEvent_FSから呼ばれます。
Forms("frmLog").AddItem strEvent,
intEventType
AddItemメソッドは、OkToAdd()関数を呼んで、引数で指定されたイベントを表示してよいか調べます。OkToAdd()からTrueが返されたときは、イベントに3桁のシーケンス番号を付加してリストボックスに表示します。Me.lstLog.Requeryで、リストボックスを再クエリすると、値集合タイプに指定されているFillLogが実行されます。FillLog()では、mvarNewItemに格納されているイベントを、コレクション変数mcolLogItemsに追加してリストボックスに表示します。
If OkToAdd(intEventType) Then
mintSeqNo = mintSeqNo + 1
mvarNewItem = Format(mintSeqNo,
"000") & " " & varItem
Me.lstLog.Requery
End If
AddItemToList()
このサブプロシージャは、mvarNewItemに格納されているイベントをコレクション変数mcolLogItemsに追加します。コレクションにアイテムを追加するにはAddメソッド、アイテムを削除するにはRemoveメソッドを使用します。コレクションからアイテムを取得するには、Itemメソッドを使用します。
If Len(mvarNewItem) Then
mcolLogItems.Add mvarNewItem
mvarNewItem = vbNullString
End If
OkToAdd()関数
この関数は、引数で指定されたイベントを表示するか調べてTrue/Falseを返します。フォームのリストボックスに表示させるイベントは、チェックボックスでON/OFFに設定することにより自由に制御することができます。
リスト7-1-3 frmLogのフォームモジュール
|
Option Compare Database Option Explicit Dim mcolLogItems As New Collection Dim mvarNewItem As Variant Dim mintSeqNo As Integer Dim mvarSeqNo As Variant Private Sub AddItemToList() If Len(mvarNewItem) Then mcolLogItems.Add mvarNewItem mvarNewItem = vbNullString End If End Sub Private Sub cmdClear_Click() Set mcolLogItems = New Collection mvarNewItem = vbNullString Me.lstLog.Requery End Sub Private Function FillLog(ctl As Control, _ lngID As Long, lngRow As Long, _ lngCol As Long, intCode As Integer) As Variant Select Case intCode Case acLBInitialize AddItemToList ctl = mcolLogItems.Count - 1 FillLog = True Case acLBOpen FillLog = Timer Case acLBGetRowCount FillLog = mcolLogItems.Count Case acLBGetValue FillLog = mcolLogItems(lngRow + 1) End Select End Function Private Sub cmdClose_Click() DoCmd.Close acReport, "rptEvent" End Sub Private Sub cmdOpen_Click() DoCmd.OpenReport "rptEvent", acViewPreview End Sub Private Sub Form_Close() Set mcolLogItems = Nothing End Sub Private Sub Form_Load() mintSeqNo = 0 End Sub Private Sub Form_Resize() On Error Resume Next lstLog.Width = Me.WindowWidth - 1440 lstLog.ColumnWidths = lstLog.Width End Sub Public Sub AddItem(ByVal varItem As Variant, ByVal intEventType As Integer) If OkToAdd(intEventType) Then mintSeqNo = mintSeqNo + 1 mvarNewItem = Format(mintSeqNo, "000") & " " & varItem Me.lstLog.Requery End If End Sub Private Function OkToAdd(intEventType As Integer) As Boolean Dim fShowIt As Boolean
If Me.grpStartStop = 1 Then ' Start Log Select Case intEventType Case conReportHeader, conReportFooter fShowIt = Me.chkReportHeaderFooter Case conPageHeader, conPageFooter fShowIt = Me.chkPageHeaderFooter Case conGroupHeader, conGroupFooter fShowIt = Me.chkGroupHeaderFooter Case conDetail fShowIt = Me.chkDetail Case conFocus fShowIt = Me.chkFocus Case conMisc fShowIt = Me.chkMisc Case conAddLine fShowIt = True Case Else fShowIt = False End Select Else fShowIt = False End If OkToAdd = fShowIt End Function Private Sub Form_Timer() If Me.chkTimer Then mintSeqNo = 0 mvarNewItem = "-----------------------------------------------------------" Me.lstLog.Requery End If End Sub Private Sub grpStartStop_AfterUpdate() If Me.grpStartStop = 1 Then Me.TimerInterval = 5000 ' 5 Sec Else Me.TimerInterval = 0 ' ReSet Timer End If End Sub |