前書き
VBAで様々な帳票を自動化する作業の中では、よくコマンドボタンを使うと思います。
一つのフォームの中で複数のコマンドボタンを配置することは結構あると思いますが、ユーザーがどのボタンを押すのか迷わないようにすることも、大事な発想だと思います。
今回は最も簡単な手法で、コマンドボタンを目立たせる処理をご紹介いたします
コマンドボタンを目立たせる処理 点滅GIFイメージ
■点滅処理の要は繰り返し処理と待ち時間です。
繰り返し処理は数回で処理しますが、何もしないとあっという間に処理が終わってしまうので点滅を表現できません。ここで繰り返しの時待ち時間をつくることで点滅タイミングを調整できるようにします。
For繰り返しの最後の段階で下記の二行を記述しています。これが無いと点滅しません。ここでは0.3秒間待ち時間を取っています
DoEvents ’これでウインドウズに処理を渡してボタンを描画するため表示の更新が行われます。
コマンドボタンを目立たせる処理 ポップアップGIFイメージ
■ポップアップ処理も点滅と同様の繰り返しと待ち時間で構成していますが、点滅部分とポップアップ部分を一緒に処理しています。また、ポップアップについてはボタンのHeight(高さ)を調整しますが通常ボタンの高さを調節するとTop値を基準に高さが調整されるので、上から下に向かってポップダウンしてしまいます、ここではポップアップにしたいのでTop値をもともとのボタンの高さ分を加算して位置調整しています、ちょっとわかりにくいですが、繰り返しの回数ごとにTop値をずらしていく方法にしました。
UserFormでボタンを利用する
■Formには3個のボタンを配置しています。
■Formの使い方については下のカードに詳しく解説しています。
■Formが開いたときはボタン1だけが見えています。
ボタン1をクリックすると ボタン2が表示されて緑と赤の点滅を繰り返します(点滅は数回で止まります)。次にボタン2をクリックすると ボタン3が表示されて下側から上方向にポップアップします。(緑と赤のポップアップを2回繰り返して止まります)
その他の処理
■Sub UserForm_Activate()
ここではFormの表示位置の調整をしています。Formを表示させるシートのボタンのすぐ隣に移動しています。この処理が無いときは、シートの中央付近に表示されます。
■Sub UserForm_Initialize()
ここではFormに貼り付けた3個のボタンのうち2番目と3番目のボタンを見えないようにしています。
全部
Private Sub CommandButton1_Click() 'コマンドボタン2を表示して点滅させる On Error Resume Next Dim i As Integer CommandButton2.Visible = True Me.CommandButton2.BackColor = RGB(0, 255, 0) '緑色 '点滅 For i = 1 To 6 If i Mod 2 = 0 Then Me.CommandButton2.BackColor = RGB(0, 255, 0) ' 緑色 Else Me.CommandButton2.BackColor = RGB(255, 0, 0) ' 赤 End If '0.3秒待ち時間を入れる Application.Wait [Now()] + 0.3 / 86400 DoEvents Next i End Sub Private Sub CommandButton2_Click() Me.CommandButton3.Visible = True Me.CommandButton3.BackColor = RGB(0, 255, 0) '緑 '点滅 For i2 = 1 To 4 If i2 Mod 2 = 0 Then Me.CommandButton3.BackColor = RGB(255, 0, 0) '赤 Else Me.CommandButton3.BackColor = RGB(0, 255, 0) '緑 End If '=============================== For i = 0 To 24 Step 6 Me.CommandButton3.Height = i Me.CommandButton3.Top = 93 + 24 - i '0.2秒待ち時間を入れる Application.Wait [Now()] + 0.2 / 86400 DoEvents Next i Next i2 End Sub Private Sub UserForm_Activate() UserForm1.Left = UserForm1.Left - 200 UserForm1.Top = UserForm1.Top - 100 End Sub Private Sub UserForm_Initialize() Me.CommandButton2.Visible = False Me.CommandButton3.Visible = False End Sub
まとめ
特別、難しい処理はしていないのですが、繰り返しのタイミングや待ち時間の調整を色々やってこの処理に落ち着きました。
当初はシートに直接コマンドボタンを配置して同様の処理をやるつもりでしたが、シートに貼り付けたボタンでは上手く動作しませんでした。待ち時間の処理が機能しなかったです。待ち時間処理にはWindows関数のSleepがありますが、こちらも上手くいきませんでした。
結局この処理はフォームに貼り付けたボタンでないとだめでした。
この辺のことに気づくのに数時間を要してしまいました。
毎度トホホ・・・です。
ダウンロード
■ボタンの点滅、ポップアップを再現したファイルをお試しいただけます
下のカードからダウンロードしてみて下さい。
コメント