こんにちは、Ryoです。
最近はWindowsタブレットなども普及してペンや指による手書き入力も普通のことになっていますが、VBAでもUserFormのInkEditコントロールを使うことで実行することが出来ます。
このコントロールではタッチ操作未対応デバイスでもマウス操作で手書き入力も可能ですので、知っておくと何かの際に役に立ちそうなので書いてみます。
1.サンプル概要
冒頭に述べましたInkEditは手書き入力出来るインターフェースを提供してくれますので、そのコントロールをUserFormに追加することで手書き入力を行っています。本サンプルはフォーム上にマウスで手書きし、「セルへ入力」ボタンを押すことでセルA1に書込んでいます。
いくらマウス操作とは言え、下手くそすぎてすいません。。。
手書きしてから2秒経過、又は「認識」ボタンを押すと手書きした内容を文字列データに変換してくれます。
その後「セルへ入力」ボタンを押すと、セルA1に書込まれます。
ちなみにフォントはメイリオです。
今回はこのサンプルについて解説していきたいと思います。
2.UserForm及びサンプルコード
◆UserForm作成:InkEditコントロールやボタン追加
サンプルで使用するユーザーフォームの構成は以下の通りです。
先ずInkEditコントロールの追加方法ですが、初期状態ではツールボックスに含まれていないのでエディタ画面からツールボックスへの追加作業を行います。
「ツール」から「その他のコントロール」を選択します。
選択すると「コントロールの追加」ダイアログが表示されますので、その中にある「Microsoft InkEdit Contorol」のチェックボックスをクリックして有効にし、「OK」とすればツールボックスに追加されます。
この作業でInkEdit Contorolが使用可能になりますので、UserForm1に追加します。その際にデフォルトで「InkEdit1」という文字が表示されていると思いますが消してしまってOKです。
その下にあるCommandButtonはサンプル画像の通り配置してください。
◆手書き入力の認識時間について
個人的にはこの部分の設定が重要だと思ってます。理由としては、手書き入力終わってから認識を開始するまでの時間なので、短すぎると書いている最中に認識を始めるので使いにくくなる為ですね。
この認識時間の設定はInkEditコントロールのRecognitionTimeoutプロパティで設定します。
初期状態では2000(ミリ秒単位)なので、2秒となっています。
この数値を増減させることで設定しますが、時間経過で認識させるよりは長めの時間で設定しておいて、フォーム上のボタン操作で認識させた方が使い勝手が良いように思います。
本項とは反れますが、サンプルは「Font」をメイリオ、サイズを12としています。
◆マウス入力を可能な設定にする
InkEditコントロールの初期設定では「手書き入力のみ可能」となっていますので、マウスを使った入力が想定される場合は、上述の認識時間同様にプロパティ設定を変更する必要があります。
マウスによる入力を可能にするには、UseMouseForInputプロパティを「True」に変更すればOKです。もちろん手書きのみ有効にしたい場合はFalseのままで良いです。
では次に各コマンドボタンのサンプルコードについて書いていきます。
◆サンプルコード:CommandButton1「セルへ入力」
Private Sub CommandButton1_Click() Cells(1, 1).Value = InkEdit1.Text End Sub
このボタンの処理は、手書き入力を変換した文字列に対し指定したセルに入力を行います。
InkEditコントロール上で認識された文字列を取得するには、Textプロパティを使用すればOKです。
◆サンプルコード:CommandButton2「クリア」
Private Sub CommandButton2_Click() InkEdit1 = "" End Sub
手書き入力して変換された結果が誤変換されてしまった場合、InkEditコントロール上の文字列をクリアしたいことがありますので、その際に使用します。
クリアする方法は文字列長さが0である””を設定すればOKです。
◆サンプルコード:CommandButton3「認識」
Private Sub CommandButton3_Click() InkEdit1.Recognize End Sub
このボタンを押すことで、認識と変換が即実行されます。
当然ながら手書き入力内容は消去されますが、このボタンを押す時点で手書きは完了していると思いますので問題ないかと思います。
実行する際はRecognizeメソッドを使用しますので、上述でOKです。
3.まとめ
おわかりの通り、手書きに関する重要な部分はInkEditコントロールが実行してくれますので、後は簡単に付随する記述をすれば手軽に手書き入力を行うことが出来るものです。
私の職場でもタブレットPCを使用して工程管理等を行っていますので、用途によっては有効に活用出来ていますので、知っておいて損はないと思います。
英数字だけではなく漢字も含めた日本語を認識できますから使い勝手も悪くありませんので何か機会がありましたら活用をご検討くださいませ!
以上、ユーザーフォームで手書き入力を行う方法についてでした!
今回の記事が何かの参考になれば幸いです。
Ryo