処理の進み具合を示す方法【テキストボックス編】

スポンサーリンク

今日はマイクロソフト・アクセスのネタです。

アクセスのすごいところって、大量のレコードをほぼ一瞬で処理してしまうところですよね。

しかし、めっちゃ大量のレコードを更新するときなど、どうしても時間がかかってしまうときがあります。

こんなとき、処理の進み具合が気になりませんか?

「待つ」という動作は、意外とエネルギーがいるものです。あと何分待てば良いかどうかが分かるか分からないかで、心の持ちようが変わってきます。

特に自分が書いたコードは、ちゃんと進んでいるのか、止まっているのか不安になります。

そこで和休は、時間のかかる処理を行うコードを書くときは、進み具合が分かるようにしています。

使用される際は、そちらの環境で十分テストのうえ使用してください。

スポンサーリンク

テキストボックスを使う方法

最初に紹介する方法は、テキストボックスを使う方法です。

こんなフォームを用意しました。

進行状況を示すテキストボックスのあるフォーム

ボタンが一つと、テキストボックスが一つです。

ボタンの名前は、「btn_実行」、テキストボックスの名前は、「txt_進行状況」です。

ボタンを押すと、テキストボックスに進み具合を表示する仕組みです。

名前txt_進行状況
書式0%
14cm
高さ0.5cm
使用可能いいえ
編集ロックはい
テキストボックス「txt_進行状況」のプロパティ(既定値から変更した箇所です)

では、btn_実行のクリック時イベントに、次のコードを割り当ててください。

Private Sub btn_実行_Click()

Dim syori As Long '現在処理した件数を格納
Dim kensu As Long  '処理する件数を格納

'処理件数を50件と仮定
kensu = 50

For syori = 1 To kensu

    'txt_進行状況に処理した件数を代入
    Me.txt_進行状況 = syori / kensu
    MsgBox syori

Next syori

Me.txt_進行状況 = Null
End Sub

実行ボタンを押して、コードを実行してみましょう。

50回メッセージボックスが表示され、テキストボックスには、メッセージボックスが表示された回数÷50回の割合をパーセント表示します。

1回目のメッセージボックスが表示された

メッセージボックスにループ回数が表示され、テキストボックスに2%が表示されました。

10回目のメッセージボックスが表示された

10回繰り返したところです。

メッセージボックスに10が表示され、テキストボックスに20%が表示されました。

最終回のメッセージボックスが表示された

50回繰り返したところです。

メッセージボックスに50が表示され、テキストボックスに100%が表示されました。

こんな感じで進行状況を表現します。

スポンサーリンク

バーグラフを組み合わせる

でも%表示だけでは味気ないですね。

では、ウィンドウズのファイルコピーなんかでおなじみの、バーグラフを組み合わせてみましょう。

ボックスオブジェクトを配置

先ほどのフォームに、ボックスオブジェクトを配置します。

名前box_進行状況
可視いいえ
13.7cm
高さ0.4cm
背景スタイル普通
背景色#C0504D
境界線スタイル透明
ボックス「box_進行状況」のプロパティ(既定値から変更した箇所です)

テキストボックス「txt_進行状況」についても、プロパティに一部変更を加えます。

背景スタイル透明
テキストボックス「txt_進行状況」のプロパティ(追加で変更した箇所)
ボックスオブジェクトをテキストボックスに重ねる

「txt_進行状況」と「box_進行状況」を重ねます。

テキストボックスを最前面へ移動

「txt_進行状況」を選択し、順序を「最前面へ移動」を押してください。

順序とは、オブジェクトの重なる順番のことです。「最前面へ移動」を押すと、その名の通り最前面にオブジェクトが配置されます。

つまり、「box_進行状況」の上に「txt_進行状況」が乗っかっている状態です。

では、btn_実行のクリック時イベントに、次のコードを割り当ててください。

Private Sub btn_実行_Click()

Dim syori As Long '現在処理した件数を格納
Dim kensu As Long  '処理する件数を格納
Dim boxwidth As Long

'処理件数を50件と仮定
kensu = 50

'box_進行状況の幅を設定する

'現在の幅を取得し、変数 boxwidth に格納
boxwidth = Me.box_進行状況.Width

'box_進行状況の幅を0にする
Me.box_進行状況.Width = 0

'box_進行状況を表示する
Me.box_進行状況.Visible = True


For syori = 1 To kensu

    'txt_進行状況に処理した件数を代入
    Me.txt_進行状況 = syori / kensu
    
    ''box_進行状況の幅を増やす
    Me.box_進行状況.Width = boxwidth * syori / kensu
    
    MsgBox syori

Next syori

Me.txt_進行状況 = Null

'box_進行状況を非表示
Me.box_進行状況.Visible = False
End Sub

フォームビューに切り替えて、実行ボタンを押してください。

1回目のメッセージボックスを表示したところ

メッセージボックスにループ回数が表示され、テキストボックスに2%が表示されるところは先ほどと同様。さらにバーグラフが表示されました。

10回目のメッセージボックスを表示したところ

10回繰り返したところです。

メッセージボックスに10が表示され、テキストボックスに20%が表示されました。

最終回のメッセージボックスを表示したところ

50回繰り返したところです。

メッセージボックスに50が表示され、テキストボックスに100%が表示されました。

バーグラフはいっぱいまで伸びています。

これなら処理の進み具合が分かりますね。

(b^ー°)

次回、アクセスの機能を使って、ステータスバー領域へのメッセージの表示と進行状況メーターの使い方をご紹介します。

コメントをどうぞ!

タイトルとURLをコピーしました