
taka



最新記事 by taka (全て見る)
- 『雑記』最近の私の話~ - 2019年9月26日
- 【動画】自作パソコン構成変更!ケースをNZXT H500に交換しました! - 2019年6月5日
- VBA 『Array関数』指定した要素で配列を作成する - 2019年5月23日
- 「動画」初完全ワイヤレスイヤホン『Jabra Elite Active 65t』 - 2019年5月17日
- VBA 日付で令和を簡単に判定してみよう - 2019年5月7日
VBAのユーザーフォームのデザインを考えてみる
どうもtakaです、Excel VBAでは自分自身のオリジナルなダイアログボックス(ユーザーフォーム)を作成することができます。このダイアログボックスは自分自身でデザインを作成することができすごく便利な機能です。
ですがこの素晴らしいユーザーフォームですが、すごく残念なことにデザインがダサい物が多いです←
でも実際↓このようなデザインが多いのも事実ではないでしょうか?


まあ業務で使用するシステムがほとんどでのはずのExcel VBAのシステムですので、あまりデザインにこだわる必要もないのですが・・・でもやはりこのような残念なデザインでは使用する側もつまらないですよね(。-∀-)
なので今回は少しでもユーザーフォームのデザインをマシにする方法を考えみましたのでお付き合いください。
今回作るフォーム
今回作るフォームは【frameコントロール】と【commandbuttonコントロール】を使用します。
下の画像のように【frameコントロール】を普段は閉じた状態にしておいて、マウスがコントロール上に来た時に広がるようにしてアニメーション効果を表すようにしてみました。




- frameコントロール:適量
- commandbuttonコントロール:適量
プログラムの流れ
今回のデザインの流れは各コントロールの【MouseMoveイベント】を使用して、
- コントロール上にポインターが来たら高さ・幅を変更する
- コントロール上から離れたら高さ・幅を戻す
の繰り返しをすることで簡単なアニメーション効果を得るようにしました。
※普通に【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
ダウンロード
当サイトの免責事項をお読みになってからお使いください。

FormdesignSample
フォロー・チャンネル登録お願いします
VBA以外についてのブログはこちら↓
https://yb-log.com/■Twitterフォロー
Follow @taka_pc1027■YouTubeチャンネル登録
コメントを残す