ロゴ(青) Excel/VBA Tips ロゴ(緑)

Tips09: UserForm のラベルを点滅させるクラスモジュール

( Ver 1.2 で x64 対応となりました )

  UserForm を使っていて『文字を点滅させたい』と思った事はありませんか?
残念ながら、VBAのUserForm には【点滅】という機能はサポートされていません。
 点滅動作をVBAで実現させる為には、一定時間ごとに文字色を「元の色⇔背景色」と交互に
切り換える必要があります(Visible プロパティの変更で表示/非表示の切り換えでも可)。
  この処理を毎回プログラミングするのは大変ですので、クラスモジュール化して簡単に利用できる
ようにしてみましたので、興味のある方は試してみて下さい。

  ただし、点滅動作中は制御が戻って来ませんので、『処理実行中』の案内表示には使えません
あくまでも、「ユーザーへの注意喚起 または 呼び出し」というユーザー応答待ちの利用に限られます。

(利用方法)
  1.下記のサンプルブックをダウンロードして、クラスモジュール[clsBlinkLabel ]を各自のブックに
      インポートしてください。
            サンプルブック( BlinkLabel_V12.zip  23KB )    (2011/9/20 Ver1.2)
                    2005/3/10  Ver1.1  解説文・クラスソース・サンプルソースにおいて、オブジェクト定義時での[New]指定
                                              を止めて、Initialize 時にインスタンス生成(Set ステートメント)するように修正しました。

                    2011/9/20  Ver1.2  Win32-API 処理に [ x64 ] 対応の修正を行ないました。

            アドイン化しました [ 2005/3/8 初版 ] [ 2011/9/27 x64対応版で再構築 ]

  2.UserFormのモジュール宣言セクションにて、点滅させるラベルを登録するオブジェクト変数を
      定義します。
  Private  BlinkLabel1  As clsBlinkLabel        '点滅させるラベル

  3.Initialize / Terminateイベントで、上記のオブジェクト変数の設定/廃棄処理を記述します。
  Private Sub UserForm_Initialize()
    '点滅ラベルの登録
    Set BlinkLabel1 = New clsBlinkLabel
    BlinkLabel1.Cmd = Me.Label1
  End Sub

  Private Sub UserForm_Terminate()
    Set BlinkLabel1 = Nothing
  End Sub
  アドイン化したクラスを利用している場合は、New キーワードを使わずに下記のようにします。
           Set  BlinkLabel1  =  CreateBlinkLabelCls ( )
      (CreateBlinkLabelCls 関数は、クラスアドイン で用意してある関数です)

  4.ラベル点滅を行なう場所にBlink メソッドを記述すれば、それだけでラベルの点滅ができます。
      点滅は「0.5秒間隔」で、ラベルをクリックするか、指定回数に達するまで繰り返されます。
      点滅が終了(指定回数に達する or BlinkStopメソッド発行)するまでは、Blinkメソッドの次のス
      テップには進みません。

  Label1.Caption = "ラベル点滅テスト"    '点滅させる内容をセット
  BlinkLabel1.Blink 20      '20回点滅
  'BlinkLabel1.Blink 20, vbRed, vbBlue, True, 3     '赤⇔青20回点滅でメール着信音付
  Label1.Caption = ""          '点滅が終わったので消しておく

  5.点滅は、ラベルをクリックするか指定回数に達した時に止まりますが、ラベルクリック以外のユー
      ザー応答でも止められるように、UserForm_Click と TextBox1_Enter 等フォーカス移動で起動
      するイベントにBlinkStopメソッドを記述します(BlinkStopメソッドは、単に停止フラグを立てて
      いるだけですので、点滅していない状態でBlinkStopメソッドを行なっても支障はありません)。
  Private Sub UserForm_Click()
    'UserFormクリックのユーザー応答で点滅停止
    BlinkLabel1.BlinkStop
  End Sub

  Private Sub TextBox1_Enter()
    'フォーカス移動などのユーザー応答で点滅停止
    BlinkLabel1.BlinkStop
  End Sub

  6.Blink メソッドの引数
      Blink ( BlinkCount, [BlinkColor1], [BlinkColor2], [Buzzer], [Sound] )
   BlinkCount 以外の引数は省略可能です。
BlinkCount 点滅回数を指定します。無限指定はありません。
指定回数に達するか、ラベルをクリックした時点、もしくは、
BlinkStopメソッド実行で点滅は止まります。
 
BlinkColor1 省略時はLabelの文字色になります。色を直接指定する場合は、
16進定数/RGB関数/vbRed等のカラー定数/vbWindowText等の
システムカラー定数で指定してください。
 
BlinkColor2 省略時はLabelの背景色になります。色を直接指定する場合は、
16進定数/RGB関数/vbRed等のカラー定数/vbWindowText等の
システムカラー定数で指定してください。
 
Buzzer 点滅に合わせて音を鳴らす場合は[True]を指定します。
省略すると[False]になります。
 
Sound Buzzer=True の場合に、音の種類を指定します。
    0(Beep音), 1(Ding.wav), 2(Chord.wav), 3(Notify.wav)
  Ding.wav(一般の警告音) / Chord.wav(警告,情報,問合せ)
  Notify.wav(メール着信音)は[Windowsフォルダ\Media]内にある
  Windows標準音です
 

 7.メッセージ専用フォームで使う場合(表示と同時に点滅、ユーザー応答で点滅停止&
    フォームを閉じる)には、下記のように『Activate イベント』でBlink メソッドを使います。
    Label1 と CommandButton1 をフォームに貼り付けて、下記のコードを記述します。
  Private BlinkLabel1 As clsBlinkLabel      '点滅させるラベル

  Private Sub UserForm_Initialize()
    '点滅ラベルの登録
    Set BlinkLabel1 = New clsBlinkLabel
    BlinkLabel1.Cmd = Me.Label1
  End Sub

  Private Sub UserForm_Terminate()
    Set BlinkLabel1 = Nothing
  End Sub

  Private Sub UserForm_Activate()
    'UserForm表示と同時にラベルの点滅を開始
    Label1.Caption = "ラベル点滅テスト"      '点滅させる内容をセット
    BlinkLabel1.Blink 100, , , True      '回数を少し多めにしてユーザー応答を待つ
    Label1.Caption = ""      '点滅が終わったので消しておく

    Unload Me      '点滅終了でUserFormも閉じる
  End Sub

  Private Sub UserForm_Click()
    'UserFormクリックのユーザー応答で点滅停止
    BlinkLabel1.BlinkStop
    'UserFormのUnLoadは、Activateイベントの[Blink]後処理に任せる
  End Sub

  Private Sub CommandButton1_Click()
    'ユーザー応答で点滅停止
    BlinkLabel1.BlinkStop
    'UserFormのUnLoadは、Activateイベントの[Blink]後処理に任せる
  End Sub




 Home   Back Page   Next Page

ロゴ(ゴールド)   ロゴ(ゴールド)

角田 桂一 Mail:addinbox@h4.dion.ne.jp CopyRight(C) 2001 Allrights Reserved.