来週不在になる前にそこそこ動くようにしないといけないなと、
いろいろやっていたが、それなりに動く環境が完成して一安心?
今回、作り込んだ機能の1つにメンテナンスポートがある。
メンテナンスポートのシリアル通信でコマンドを送るとあれこれできるのだが……
問題はこのコマンドがテキストベースではないということである。
テキストデータの送受信ならTeraTermなど使えばよいわけだが、
バイナリデータの送受信となるとそれでは面倒である。
将来的には操作用のツールを作る話はあるが、暫定的に送受信できるツールが必要と、
これをExcelでVBAを使って作ることにした。
通常はワークシート上からVBAのプログラムを呼び出すにはボタンを置くが、
コマンドが多数ある中でボタンを多数並べるのは大変である。
それで調べるとハイパーリンクを使った方法があるという。
適当なセルに向けてハイパーリングを貼る。
このリンクはHyperlink関数で生成したものではダメである。
そしてWorksheet_FollowHyperlinkルーチンを定義する。
ハイパーリンクのクリックでマクロを実行する (グローウィン)
するとクリックすると、ハイパーリンクの情報とともにこのルーチンが呼び出される。
この方法のよいところはハイパーリンクの情報をもとに処理を振り分けられることである。
例えばハイパーリンクのセルのテキストにコマンドの入力・出力に使うセル名などの情報を書いておいて、
Worksheet_FollowHyperlinkルーチンではこれを解析して実行すると。
リンクテキストに情報を書き込むのは見た目がよくないが、
リンクのあるセルの右隣に必要な情報を書いておくとか、
機能のバリエーションが多い場合には有効な方策ではないか。
この方策によりメンテナンスポートで実行できる機能はほとんどExcelのワークシートから実行できるようになった。
これを使っていろいろ動作確認をしていたけど、やりたいことはだいたいできているように見える。
未実装機能はいくつか残っているし、ソースコードもいろいろ残骸が残って汚いが、
不在中の他のメンバーの作業には足りるぐらいの機能はあるんじゃないかね。