エクセルVBAで献立自動化、栄養士さんお助けツール、ボタンの点滅とポップアップ

Excel VBA
21世紀の森公園

前書き

VBAで様々な帳票を自動化する作業の中では、よくコマンドボタンを使うと思います。

一つのフォームの中で複数のコマンドボタンを配置することは結構あると思いますが、ユーザーがどのボタンを押すのか迷わないようにすることも、大事な発想だと思います。

今回は最も簡単な手法で、コマンドボタンを目立たせる処理をご紹介いたします

コマンドボタンを目立たせる処理 点滅GIFイメージ

■点滅処理の要は繰り返し処理と待ち時間です。

繰り返し処理は数回で処理しますが、何もしないとあっという間に処理が終わってしまうので点滅を表現できません。ここで繰り返しの時待ち時間をつくることで点滅タイミングを調整できるようにします。

For繰り返しの最後の段階で下記の二行を記述しています。これが無いと点滅しません。ここでは0.3秒間待ち時間を取っています


DoEvents   ’これでウインドウズに処理を渡してボタンを描画するため表示の更新が行われます。

コマンドボタンを目立たせる処理 ポップアップGIFイメージ

■ポップアップ処理も点滅と同様の繰り返しと待ち時間で構成していますが、点滅部分とポップアップ部分を一緒に処理しています。また、ポップアップについてはボタンのHeight(高さ)を調整しますが通常ボタンの高さを調節するとTop値を基準に高さが調整されるので、上から下に向かってポップダウンしてしまいます、ここではポップアップにしたいのでTop値をもともとのボタンの高さ分を加算して位置調整しています、ちょっとわかりにくいですが、繰り返しの回数ごとにTop値をずらしていく方法にしました。

UserFormでボタンを利用する

■Formには3個のボタンを配置しています。

■Formの使い方については下のカードに詳しく解説しています。

小規模老人保健施設の給食業務向けExcelVBA練習帳、給食帳票管理にVBAを活用、UserFormからセルを操作する1、フォームを作って表示する
UserFormからセルを操作する1 今回からVBAの初心者用解説を始めます。 第一回目はフォームを作って様々なコントロールを配置する要領を練習します。 UserForm作成 ■Excelの無地のシートを開く(青枠部分) ...

■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がありますが、こちらも上手くいきませんでした。

結局この処理はフォームに貼り付けたボタンでないとだめでした。

この辺のことに気づくのに数時間を要してしまいました。

毎度トホホ・・・です。

ダウンロード

■ボタンの点滅、ポップアップを再現したファイルをお試しいただけます

下のカードからダウンロードしてみて下さい。

コメント

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