ハイパーリンクで駆動するVBA

来週不在になる前にそこそこ動くようにしないといけないなと、

いろいろやっていたが、それなりに動く環境が完成して一安心?


今回、作り込んだ機能の1つにメンテナンスポートがある。

メンテナンスポートのシリアル通信でコマンドを送るとあれこれできるのだが……

問題はこのコマンドがテキストベースではないということである。

テキストデータの送受信ならTeraTermなど使えばよいわけだが、

バイナリデータの送受信となるとそれでは面倒である。

将来的には操作用のツールを作る話はあるが、暫定的に送受信できるツールが必要と、

これをExcelでVBAを使って作ることにした。


通常はワークシート上からVBAのプログラムを呼び出すにはボタンを置くが、

コマンドが多数ある中でボタンを多数並べるのは大変である。

それで調べるとハイパーリンクを使った方法があるという。

適当なセルに向けてハイパーリングを貼る。

このリンクはHyperlink関数で生成したものではダメである。

そしてWorksheet_FollowHyperlinkルーチンを定義する。

ハイパーリンクのクリックでマクロを実行する (グローウィン)

するとクリックすると、ハイパーリンクの情報とともにこのルーチンが呼び出される。


この方法のよいところはハイパーリンクの情報をもとに処理を振り分けられることである。

例えばハイパーリンクのセルのテキストにコマンドの入力・出力に使うセル名などの情報を書いておいて、

Worksheet_FollowHyperlinkルーチンではこれを解析して実行すると。

リンクテキストに情報を書き込むのは見た目がよくないが、

リンクのあるセルの右隣に必要な情報を書いておくとか、

機能のバリエーションが多い場合には有効な方策ではないか。


この方策によりメンテナンスポートで実行できる機能はほとんどExcelのワークシートから実行できるようになった。

これを使っていろいろ動作確認をしていたけど、やりたいことはだいたいできているように見える。

未実装機能はいくつか残っているし、ソースコードもいろいろ残骸が残って汚いが、

不在中の他のメンバーの作業には足りるぐらいの機能はあるんじゃないかね。