質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

5回答

2432閲覧

vbaでinkpictureの描画から複数の文字認識結果を取得したいと思います

snowmansnow

総合スコア9

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2020/03/16 15:47

前提・実現したいこと

エクセルのフォームにinkedit とinkpiktureを配置しました
'MSINKAUTLib = Microsoft Tablet PC Type Library, version 1.0と
inkeditを参照しています。
inkeditでは単一候補を取得できます
inkpictureは描画はできます
vc?の例のようにinkpiktureから複数の文字認識候補を取得したいです。

■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

 ※1では、「引数は省略できません」
コメントアウトすると
※2では、「オブジェクト変数またはwithブロック変数が設定されていません。」
となりました。

こちらの質問でvbaでinkpictureの画像の解決をされて、追検できました(ブックのフォルダ修正しました)ので
文字認識も、お願いしたいです。

該当のソースコード

vbaです  vc?を参考に作ってみました Dim recos As InkRecognizers Dim reco As IInkRecognizer Set reco = recos.GetDefaultRecognizer ※2 Dim conte As InkRecognizerContext Set conte = reco.CreateRecognizerContext Set conte.Strokes = InkPicture1.Ink.Strokes conte.EndInkInput Set resu = conte.Recognize ※1

試したこと

いっぱい?試して頭がこながらがっちゃいました。

補足情報(FW/ツールのバージョンなど)

win10 64bit エクセル365です
ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答5

0

inkpicture3つ配置して、参考のhttp://blog.wdnet.jp/tech/archives/148さんの
ボタンを付けたら、3文字の各々の認識修正できそうでした。
楕円とか、四角とかの中の文字の認識もできるのかもしれませんが、誰かいませんか~

Private Sub CommandButton2_Click()

'https://teratail.com/questions/111853
'http://blog.wdnet.jp/tech/archives/148

'MSINKAUTLib = Microsoft Tablet PC Type Library, version 1.0 'https://docs.microsoft.com/en-us/windows/win32/tablet/character-autocomplete-sample Dim recos As InkRecognizers Dim reco As IInkRecognizer Set reco = InkEdit1.Recognizer Dim conte1 As InkRecognizerContext Set conte1 = reco.CreateRecognizerContext Set conte1.Strokes = InkPicture1.Ink.Strokes conte1.EndInkInput Dim reso As IInkRecognitionResult Set reso = conte1.Recognize(&H41) reso2 = reso.TopString Dim conte2 As InkRecognizerContext Set conte2 = reco.CreateRecognizerContext Set conte2.Strokes = InkPicture2.Ink.Strokes conte2.EndInkInput Set reso = conte2.Recognize(&H42) reso2 = reso2 & reso.TopString Dim conte3 As InkRecognizerContext Set conte3 = reco.CreateRecognizerContext Set conte3.Strokes = InkPicture3.Ink.Strokes conte3.EndInkInput Set reso = conte3.Recognize(&H42) reso2 = reso2 & reso.TopString

MsgBox reso2
End Sub

Private Sub CommandButton3_Click()

InkPicture1.EditingMode = MSINKAUTLib.InkOverlayEditingMode.IOEM_Ink
InkPicture2.EditingMode = MSINKAUTLib.InkOverlayEditingMode.IOEM_Ink
InkPicture3.EditingMode = MSINKAUTLib.InkOverlayEditingMode.IOEM_Ink

End Sub

Private Sub CommandButton4_Click()
InkPicture1.EditingMode = MSINKAUTLib.InkOverlayEditingMode.IOEM_Delete
InkPicture2.EditingMode = MSINKAUTLib.InkOverlayEditingMode.IOEM_Delete
InkPicture3.EditingMode = MSINKAUTLib.InkOverlayEditingMode.IOEM_Delete

End Sub

Private Sub CommandButton5_Click()
InkPicture1.EditingMode = MSINKAUTLib.InkOverlayEditingMode.IOEM_Select
InkPicture2.EditingMode = MSINKAUTLib.InkOverlayEditingMode.IOEM_Select
InkPicture3.EditingMode = MSINKAUTLib.InkOverlayEditingMode.IOEM_Select

End Sub

投稿2020/03/18 13:08

snowmansnow

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

解決しました~
inkeditとMicrosoft Tablet PC Type Library, version 1.0と
Microsoft InkDivider Type Libraryに参照いれて
フォームにinkeditとinkpictureとボタン配置して、

Private Sub CommandButton2_Click()

'https://teratail.com/questions/111853
'http://blog.wdnet.jp/tech/archives/129

'MSINKAUTLib = Microsoft Tablet PC Type Library, version 1.0 'https://docs.microsoft.com/en-us/windows/win32/tablet/character-autocomplete-sample Dim recos As InkRecognizers Dim reco As IInkRecognizer Set reco = InkEdit1.Recognizer Dim conte As InkRecognizerContext Set conte = reco.CreateRecognizerContext Set conte.Strokes = InkPicture1.Ink.Strokes conte.EndInkInput Dim reso As IInkRecognitionResult Set reso = conte.Recognize(&H41) Set alts = reso.AlternatesFromSelection For Each alt In alts ResultString = ResultString + vbCr & alt.String Next alt

MsgBox ResultString
で、10個の候補が出ました~
古い遊びですが、遊んでたら、新しいの出ますか?

投稿2020/03/18 11:22

snowmansnow

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

もう一つ解決しました!!
Private Sub CommandButton2_Click()

'https://teratail.com/questions/111853
'http://blog.wdnet.jp/tech/archives/129

'MSINKAUTLib = Microsoft Tablet PC Type Library, version 1.0 'https://docs.microsoft.com/en-us/windows/win32/tablet/character-autocomplete-sample Dim recos As InkRecognizers Dim reco As IInkRecognizer Set reco = InkEdit1.Recognizer Dim conte As InkRecognizerContext Set conte = reco.CreateRecognizerContext Dim st As InkStrokes Set conte.Strokes = InkPicture1.Ink.Strokes conte.EndInkInput Dim reso As IInkRecognitionResult Set reso = conte.Recognize(&H41)

MsgBox reso.TopString

End Sub
で、やっと単独認識できました!あとは複数認識です!!
誰か本当にいませんか~~??

投稿2020/03/17 13:52

snowmansnow

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まだ未解決ですが、
参照でMicrosoft InkDivider Type Libraryにチェックを入れたら
探していたIInkRecognitionResultがDim出来るようになりました。
もう少しな気がしますが、誰か本当にいませんか~?

投稿2020/03/17 13:20

snowmansnow

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

未解決ですが、※2のエラーが回避できて、
recognizerを設定できたようでした?
inkeditもinkpictureも同じ認識エンジンを使用してるらしかったので
同じフォームにあるinkeditのrecognizerを拝借する→
Set reco = recos.GetDefaultRecognizerを
Set reco = inkedit.recognizerと変更したらエラーが出なくなりました。
後は下部の認識依頼の部分でないかと・・・誰か助けて下さい

 参考にしてるのは、http://blog.wdnet.jp/tech/archives/148さんです

投稿2020/03/17 12:54

snowmansnow

総合スコア9

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問