VBA ユーザーフォームのデザインを考えてみる(アニメーション効果作成)



The following two tabs change content below.
アバター

taka

あることがキッカケでVBAを独学で勉強しました、今ではブログを通してVBAでできることを解説しつつ、VBAや他の言語の勉強、ブログ運営の勉強をしています(^^♪

VBAのユーザーフォームのデザインを考えてみる

どうもtakaです、Excel VBAでは自分自身のオリジナルなダイアログボックス(ユーザーフォーム)を作成することができます。このダイアログボックスは自分自身でデザインを作成することができすごく便利な機能です。

ですがこの素晴らしいユーザーフォームですが、すごく残念なことにデザインがダサい物が多いです←

でも実際↓このようなデザインが多いのも事実ではないでしょうか?

まあ業務で使用するシステムがほとんどでのはずのExcel VBAのシステムですので、あまりデザインにこだわる必要もないのですが・・・でもやはりこのような残念なデザインでは使用する側もつまらないですよね(。-∀-)

なので今回は少しでもユーザーフォームのデザインをマシにする方法を考えみましたのでお付き合いください。

今回作るフォーム

今回作るフォームは【frameコントロール】と【commandbuttonコントロール】を使用します。

下の画像のように【frameコントロール】を普段は閉じた状態にしておいて、マウスがコントロール上に来た時に広がるようにしてアニメーション効果を表すようにしてみました。

 

  1. frameコントロール:適量
  2. commandbuttonコントロール:適量

プログラムの流れ

今回のデザインの流れは各コントロールの【MouseMoveイベント】を使用して、

  1. コントロール上にポインターが来たら高さ・幅を変更する
  2. コントロール上から離れたら高さ・幅を戻す

の繰り返しをすることで簡単なアニメーション効果を得るようにしました。
※普通に【DO~LOOP】処理してしまうと高速すぎて【アニメーション】としては役に立たないのでSleep APIを使用して処理速度を調整しています。
※ループ処理で動いているのでパソコンのスペックによっては重くなる可能性がありますのでご留意ください。

デザインを変更するコード

今回の処理のコードをご紹介します。はっきり言ってキレイなコードではありません(笑)ですのでアイデアとして受け取っていただき、ご自由に改変してください(。-∀-)

処理イメージが想像つかない場合はダウンロードファイルで確認してください(。-`ω-)

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) 'モジュールの一番上にペーストしてください。
Dim h As Long 'Height
Dim w As Long 'Width
Dim th As Long 'Topの高さ
Private Sub Frame1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'Frame1上にマウスが来た時の処理
     h = Frame1.Height
     w = Frame1.Width
     th = Frame2.Top


  Do While th < 175 'Frame2コントロール縦位置を調整
    Frame2.Top = th
    Sleep 0.3
    th = th + 1
    Loop

  Do While h < 84  'Frame1の高さを調整
    Frame1.Height = h
    Sleep 0.3
    h = h + 1
    Loop
  Do While w < 336 'Frame1の幅を調整
     Frame1.Width = w
     Sleep 0.3
     w = w + 1
  Loop
   
End Sub
Private Sub Frame2_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'Frame2上にマウスが来た時の処理

     h = Frame2.Height
     w = Frame2.Width
  Do While h < 84
    Frame2.Height = h
    Sleep 0.3
    h = h + 1
    Loop
  Do While w < 336
     Frame2.Width = w
        Sleep 0.3
        w = w + 1
  Loop
   
End Sub

Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'UserForm上にマウスが来た時に書くコントロールの高さ・幅をもとに戻す。
     h = Frame1.Height
     w = Frame1.Width
     th = Frame2.Top
     h2 = Frame2.Height
     w2 = Frame2.Width

  Do While th > 60
    Frame2.Top = th
    Sleep 0.3
    th = th - 1
    Loop

    Do While h > 17
    Frame1.Height = h
    Sleep 0.5
    h = h - 1
    Loop
  
     Do While w > 60
     Frame1.Width = w
        Sleep 0.3
        w = w - 1
     Loop
 
    Do While h2 > 17
    Frame2.Height = h2
    Sleep 0.5
    h2 = h2 - 1
    Loop
  
     Do While w2 > 70
     Frame2.Width = w2
        Sleep 0.3
        w2 = w2 - 1
     Loop
     
     
End Sub

 

ダウンロード

当サイトの免責事項をお読みになってからお使いください。

フォロー・チャンネル登録お願いします

VBA以外についてのブログはこちら↓

https://yb-log.com/

■Twitterフォロー

■YouTubeチャンネル登録

ファイルやコードの利用、WEBサイトの利用について

サンプルコードなどは当サイトの免責事項をよくお読みになってからお使いください。

Sponsored Link

 

WordPressでブログを始めるなら

WordPress簡単インストール&安心の安定性

レンタルサーバー Xserver

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です