エクセルVBAを始めてみましょう。第5回プログラミングの手法応用編、テキストボックスを利用した電光掲示板を作ってみます。

エクセルVBA
ANNE PROⅡ
この記事は約5分で読めます。

今回は電光掲示板もどきを作ってみます。

今回は、電光掲示板風に見えるプログラムを開設します。
約12年前に筆者がまだVBAを覚えたてのころ作ったものですから、あまりうまくできていませんが、素人の初心者でもこの程度の物は作れるようになるという代物です。

概要

フォームのコンボボックスにメッセージを書き込んでボタンを押すと真っ黒の画面の上に緑の文字が右端から左端に向かって移動します。

ポイント

PC画面には掲示板を表現したフォームだけが表示されます。エクセル本体は見えなくなります。
PCのディスプレーの左端に追い出してエクセル本体は見えない状態にして、単体のアプリケーションっぽく見せるようにしました。

掲示板フォームを×ボタンで終了するとき、エクセルを元の位置に戻すようにしています。

フォームのコンボボックスにメッセージを蓄積するようにしました

メッセージデータはSheet2の特定のセル範囲に蓄積されます。

メッセージが流れるスピードを調節できるようにしました。
使用しているPCの処理能力によっては流れのスピードが極端に速かったり遅かったりするので調整できるようにしたのですが、いまいちその設定がうまくいっていないようです。改善の余地ありです。ですが、あえてそのままにのこしていますから、アタックしてみてください。

コードの説明

文字が流れる仕組みはすごく簡単です。
ラベルのロードの上にメッセージ用のテキストボックスを配置して、繰り返し処理を使ってテクストボックスのLeft位置をロードの右端から移動していくようにしています。
テキストボックスはメッセージの文字列の長さに自動的に長さを調節するように設定し、そのテキストボックスの右端がロードの左端に達したら、再度ロードの右端に戻すようにしているので、見た目にはstopボタンを押すまでロードを延々と流れ続けるように見えます。
それでは具体的にプログラムを見ていきましょう

Labelの上をTextBoxが流れる

掲示板のフォーム全体の様子

フォーム上に配置したオブジェクト

ラベル  (メッセージを走らせるロード用とオブジェクトの説明用に全部で3個)

テキストボックス  (メッセージ用)

ボタン  (Goとstop用に2個)

スクロールバー  (メッセージが流れるスピードの調整用)

スピンボタン  (スピード調整のしきい値調整用)

デザインポイント

フォームにラベルを貼り付ける。デザイン画面のLabelのプロパティーで背景色を黒にします。

その上にTextBoxを配置します。プロパティーで背景色を黒にして、ラベルと同化するようにします。ボーダーカラーも黒にしておきます。FontColorを緑に設定します。Fontはポップ調にしましたがこの辺は好みで設定してください。フォントサイズは24にしてますがこの辺もお好みで調整ください。

ポイントはTextBoxのAutoSizeをTrueにしてください(デフォルトはFalse)。文字列の長さに応じてTextBoxの幅を自動的に調整してくれます。

 

 

コードのポイント

電光掲示板の文字が流れる動作の表現の要はDo~Loopの繰り返し処理とDoEventsです。
繰り返し処理の中でTextBoxのLeft値に左側に-1を与えて移動を表現しますが、繰り返し処理の動作中はエクセル本体の処理が繰り返しの処理に占有されているためUI(オブジェクト移動の状態)の変化を検知できません。テキストボックスが移動する状態を目に見て取れるようにするのがDoEventsです。この一行を入れることで繰り返し処理一回ごとにその処理の結果をUIに知らせることが出来るのだそうです。

具体的には、繰り返しが無限に続かないようにボタンを押したら繰り返しを終了する条件判断文を入れておきます。
If CommandButton1.Caption = “stop” Then Exit Do
この繰り返し処理が始まるのはGoボタンが押されたときです。
このGoボタンはStopボタンと連動するようにしています。最初Stopボタンは見えないようになったいます。Goボタンを押して処理が開始されると同時にStopボタンを表示してGoボタンは見えないようになります。繰り返し処理を終わらせるためにStopボタンを押すと同時にGoボタンのキャプションを ”GO” → ”stop” と変更します。するとDo Loopの中で、CommandButton1.Caption = “stop” がTrueとなり繰り返しが終了します。繰り返しが終了したらキャプションは”GO”に戻しています。

エクセル本体を消す

Application.Left = -Application.Width

Applicationというのはエクセル本体の事です。エクセルのLeft値に現在の表示幅の値をマイナスで与えるとディスプレーの左側端から追い出すことが出来ます。エクセルは消えたわけではなく画面の左側外に開いたままになっています。(消えたように見えるだけです。)

エクセルを追い出す前に元の位置を覚えておいてフォームが閉じたときこの位置をエクセルに与えれば追い出したエクセルは元の位置に戻ります。

エクセルが画面から追い出された状態のまま、エクセルの他のファイルを開いても見た目には何も変わりません。(画面から追い出されていると他のエクセルファイルは起動できない様です)

この設定には少し問題があります。このマクロが稼働中(フォームが開いてる間)に何らかの原因でエラーが起きるとマクロが終了してしまいます。そうなると、画面の外に追い出されたままの状態になるので、手動でエクセルを元に戻さないとなりません。(それはちょいと面倒ですね。)タスクバーに生きているエクセルがあるので、それをポイントして右クリックメニューから「移動」を選択して右矢印キーを数回押せば画面の左端からエクセルが出てきます。
ですが、エラーが起きそうな場所には、マクロが終了しないうちにエクセルを元の位置に戻すようにしていますから大丈夫だと思います。まぁ、エクセルが消えてフォームだけ表示されていたほうが、なんとなく単体のアプリケーションの様に見えるので、意味のない動きでもないとは思います。
プログラムのポイントはだいたいこんなところです。

練習用エクセルファイルのダウンロードは下記から

 

プログラム全部

 

 

 

コメント

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