HOME > 即効テクニック > AccessVBA > ユーザーインターフェース > ステータスバーに進行状況インジケータを表示する(SysCmdメソッド)

即効テクニック

ユーザーインターフェース

ステータスバーに進行状況インジケータを表示する(SysCmdメソッド)

(Access 2000/2002)
SysCmdメソッドを使って、ステータスバーに進行状況インジケータを表示する事ができます。
サンプルプロシージャでは、テーブル「商品管理」の全レコードを編集する処理の進行状況をSysCmdメソッドを使って表示しています。
フォームにコマンドボタン「コマンド0」を配置して、イベント「クリック時」に次のイベントプロシージャを作成します。

Private Sub コマンド0_Click()
    Dim rs      As Recordset
    Dim rsCount As Long
    Dim i, j    As Long

    DoCmd.Hourglass True
    
    Set rs = CurrentDb.OpenRecordset("商品管理", dbOpenTable)
    
    'レコードをカウントします。
    rs.MoveFirst
    rsCount = rs.RecordCount
    MsgBox "データは" & rsCount & "件です。"
    
    SysCmd acSysCmdInitMeter, "処理実行中です", rsCount
    
    For i = 1 To rsCount
        SysCmd acSysCmdUpdateMeter, i
        
        '★ レコードを編集する処理 ★
        For j = 1 To 1000000
        Next j

    Next i
    
    SysCmd acSysCmdRemoveMeter
    
    DoCmd.Hourglass False
        
End Sub

サンプルでは「★ レコードを編集する処理 ★」に仮にFor...Nextステートメントを使って、変数jが1000000になるまでループ処理を行っていますが、実際はレコードを編集する処理等を記述します。
SysCmdメソッドの構文は次のとおりです。
<構文> SysCmd action[, text][, value]

進行状況インジケータをステータスバーに表示するには、引数actionに定数acSysCmdInitMeterを指定し、引数textと引数valueを指定します。
引数actionには、組み込み定数を指定しますが、サンプルプロシージャで指定している定数の内容は次のとおりです。

定数        内容
acSysCmdInitMeter  進行状況インジケータを初期化します。
acSysCmdUpdateMeter 進行状況インジケータを指定した値に更新します。
acSysCmdRemoveMeter 進行状況インジケータを消去します。

引数textには、ステータスバーに左揃えに表示する文字列を指定します。
引数actionに定数acSysCmdInitMeterを指定した場合の引数valueは、インジケータの最大値または100%に相当します。
インジケータに表示される操作の進行状況を更新するには、引数actionに定数acSysCmdUpdateMeterを指定し、引数valueを指定します。
引数actionに定数acSysCmdUpdateMeterを指定した場合は、SysCmdメソッドが引数valueの値を使ってインジケータに表示する割合を計算します。
たとえば、最大値が200のときに引数valueに100を指定すると、進行状況インジケータが半分まで進みます。

DAOを使用するには、[ツール(T)]メニューの[参照設定(R)]をクリックすると表示される[参照設定]ダイアログボックスで、「Microsoft DAO 3.6Object Library」をチェックします。