Excel VBA 手書きで入力する InkEditコントロール

スポンサーリンク
スポンサーリンク

手書きで入力する InkEdit【インクエディット】コントロール

InkEdit【インクエディット】コントロールは
手書きで入力した内容を文字列データに変換して
セルなどに代入することができます。

タッチ操作に対応したデバイスの場合は
ペンや指先による手書き入力が可能になります。
また、タッチ操作に対応していないデバイスでも
マウス操作による手書き入力が可能です。

英数字だけでなく、漢字を含む日本語も認識できます。

InkEdit【インクエディット】コントロールをツールボックスに追加する方法

規定の設定では
InkEdit【インクエディット】コントロールは
ツールボックスには表示されません。
VBEの「コントロールの追加」ダイアログボックスで
InkEdit【インクエディット】コントロールを追加します。








RecognitionTimeout【レコギネッションタイムアウト】プロパティ

手書き入力が終了したあと、InkEdit【インクエディット】コントロールが
入力内容の認識を開始するまでの時間を設定するには
インクエディットコントロールを表す
InkEdit【インクエディット】コントロールオブジェクトの
RecognitionTimeout【レコギネッションタイムアウト】プロパティを使用します。
Recognition【レコギネッション】は「認識」という意味があります。

RecognitionTimeout【レコギネッションタイムアウト】プロパティの書式

オブジェクト.RecognitionTimeout = 設定値


  • オブジェクト(必須)
    インクエディットを表す
    InkEdit【インクエディット】オブジェクト名を指定します。
  • 設定値(必須)
    認識開始までの時間をミリ秒単位で指定します。
    認識開始時間を早くし過ぎると、入力途中で認識され
    思うような認識結果が得られない場合があります。
    既定値は「2000ミリ秒(2秒)」です。

UseMouseForinput【ユーズマウスフォアインプット】プロパティ

InkEdit【インクエディット】コントロールの入力方法で手書き入力以外に
マウスによる入力を可能にするかどうするかを設定するには
インクエディットを表す
InkEdit【インクエディット】コントロールオブジェクトの
UseMouseForinput【ユーズマウスフォアインプット】プロパティを使用します。

UseMouseForinput【ユーズマウスフォアインプット】プロパティの書式

オブジェクト.UseMouseForinput = 設定値


  • オブジェクト(必須)
    インクエディットコントロールを表す
    InkEdit【インクエディット】コントロールのオブジェクト名を指定します。
  • 設定値(必須)
    設定値内容
    Trueマウス入力可能
    Falseマウス入力不可能(既定値)

※既定値ではマウス入力は不可能で
タッチ操作可能なデバイスのみ対応します。

入力内容の認識開始時間とマウス入力を可能にするコード例

Private Sub UserForm_Initialize()
With InkEdit1
     .RecognitionTimeout = 1500
     .UseMouseForInput = True
End With
End Sub

コードの解説

1行目
【Private Sub UserForm_Initialize()】

マクロ実行ダイアログボックスに表示されない
Private Sub【プライベートサブ】プロシージャの
ユーザーフォームがメモリーに読み込まれ
画面に表示される直前に発生する
Initialize【イニシャライズ】イベントプロシージャに記述し
ユーザーフォームの初期状態を設定します。
ユーザーフォームを開くには
UserForm【ユーザーフォーム】オブジェクトの
Show【ショー】メソッドを使用します。

Sub ユーザーフォーム表示
  UserForm1.Show
End Sub

2行目
【With InkEdit1】

InkEdit【インクエディット】オブジェクトをオブジェクト名で
Withステートメントで指定します。


3行目
【.RecognitionTimeout = 1500】

Withステートメントで指定した
InkEdit【インクエディット】オブジェクトの
入力内容の認識を開始するまでの時間を設定する
RecognitionTimeout【レコギネッションタイムアウト】プロパティ
に1.5秒を表す1500ミリ秒を指定します。


4行目
【.UseMouseForInput = True】

Withステートメントで指定した
InkEdit【インクエディット】オブジェクトの
マウス操作による入力をどうするかを設定する
UseMouseForInput【ユーズマウスフォアインプット】プロパティに
マウス操作を可能にするTrueを設定します。


実行結果


Text【テキスト】プロパティ

InkEdit【インクエディット】コントロールに
手書き入力して変換された文字列を取得するには
InkEdit【インクエディット】コントロールオブジェクトの
Text【テキスト】プロパティを使用します。
文字列の取得と設定ができます。

Text【テキスト】プロパティの書式

【取得】
オブジェクト.Text
【戻り値】文字列型(String)
【設定】
オブジェクト.Text = 設定値


  • オブジェクト(必須)
    インクエディットを表す
    InkEdit【インクエディット】コントロールのオブジェクト名を指定します。
  • 設定値(必須)
    InkEdit【インクエディット】コントロールに表示する
    文字列を文字列型(String)の値で指定します。

    「””」(長さ0の文字列)を設定すると
    手書き入力で認識された文字列をクリアすることができます。

手書きの認識をやり直す例

InkEditコントロールに手書き入力した内容が
期待どおりに変換されなかったときに
InkEditコントロールに変換した結果が残っているため
その結果をクリアするボタンを作成しておくと便利です。

結果をクリアするには、
InkEditコントロールのText【テキスト】プロパティに
「””」(長さ0の文字列)を設定します。
例えば、コマンドボタンを追加して
CommandButton1【コマンドボタンワン】をクリックしたときに
InkEdit1【インクエディットワン】に表示されている
変換結果をクリアするには、
CommandButton1【コマンドボタンワン】の
Click【クリック】イベントプロシージャに
以下のように記述します。

コード例

Private Sub CommandButton1_Click()
InkEdit1.Text = ""
End Sub

実行イメージ


手書き入力の認識された文字列を取得してセルに代入する例

手書き入力の認識された文字列を取得するいは
InkEdit【インクエディット】オブジェクトの
Text【テキスト】プロパティを使用します。
例えば、コマンドボタンを追加して
CommandButton2【コマンドボタントゥ】をクリックしたときに
認識された文字列を取得して
指定のセルに取得した文字列を代入するには
CommandButton2【コマンドボタントゥ】の
Click【クリック】イベントプロシージャに
以下のように記述します。

Private Sub CommandButton2_Click()
Dim 文字列 As String
Dim 最終行 As Long
    最終行 = Cells(Rows.Count, 1).End(xlUp).Row +1
    文字列 = InkEdit1.Text
    Cells(最終行, 1).Value = 文字列
    InkEdit1.Text = ""
End Sub

コードの解説

2行目
【Dim 文字列 As String】

InkEditコントロールで手書き入力を
認識して変換した文字列を格納する
変数「文字列」を
文字列型(String)で宣言します。


3行目
【Dim 最終行 As Long】

セルの値が入力されている最終行の
次の行の行番号を格納する
変数「最終行」を
長整数型(Long)で宣言します。


4行目
【最終行 = Cells(Rows.Count, 1).End(xlUp).Row +1】

Cells【セルズ】プロパティの
行番号を表す引数に
行の集まりを表す
Rows【ロウズ】コレクション の
Count【カウント】プロパティ で最終セル番号を設定します。
列番号を表す引数に
1を設定します。
つまり、A列の最終行のセルを表します。
そのセルに対して、
End【エンド】プロパティで方向を表す引数に
xlUpを指定して下から上方向に向かって
Row【ロウ】プロパティで行番号を取得して
1を加算することでデータが入力されている領域の終端セルの
1行下の行番号を取得して引数「最終行」に代入します。


5行目
【文字列 = InkEdit1.Text】

InkEdit【インクエディット】コントロールオブジェクトの
Text【テキスト】プロパティを使用して
手書き入力を認識して変換した文字列を取得して
変数「文字列」に代入します。


6行目
【Cells(最終行, 1).Value = 文字列】

変数「文字列」に格納されている文字列を
Cells【セルズ】プロパティを使用して参照した
1列目のデータが入力されている領域の終端セルの次のセルに
代入します。


7行目
【InkEdit1.Text = “”】

InkEdit【インクエディット】コントロールオブジェクトの
Text【テキスト】プロパティに「長さ0の文字列」を設定して
インクエディットが認識して表示されている文字列をクリアします。


実行結果


以上で
手書きで入力する InkEditコントロールについての解説を終了します。
ありがとうございました。

スポンサーリンク
スポンサーリンク

フォローする

スポンサーリンク
スポンサーリンク