Access VBAでOLE型に登録されたWordアート内の文字列を読み上げる
下記、いつもの解説動画です。
youtu.be
https://youtu.be/0ZkhpOj-uDU
目次
00:00 0.あいさつ、テスト実行
03:45 1.単体 Access VBAで文字を読み上げる
04:59 2.単体 ワードアート内の文字列を取り出す
08:24 3.結合 AccessでOLE型 Wordアートを読み上げる
#AccessVBA #OLE型 #WordVBA #読み上げ #マクロ#デバッグ #Speak
0.あいさつ、テスト実行
まず、テスト実行
知恵袋の質問
detail.chiebukuro.yahoo.co.jp
をテストしてみます。
※なんか、word pictureを私がワードアートと勘違いをしてしまった感じもしないでもないが、、、
Win10,Office365 の AccessとWordでテストしました。
Private Sub コマンド13_Click() 'テスト用単語を入力 Dim strMOJI As String strMOJI = InputBox("読み上げたい文字列を入力", "TEST", "ただいまマイクのテスト中") '単純にSAPI.SpVoiceを使用してみた Dim objSAPI As Object Set objSAPI = CreateObject("SAPI.SpVoice") objSAPI.Speak strMOJI '.Speakに文字列を渡す Set objSAPI = Nothing End Sub
2.Word ワードアート内の文字列を取り出す
Wordアートもシェイプの一部として扱われているみたいなので(勘違い?最近から?)
WordVBA TEST
Sub test() Debug.Print Application.Name Dim n As Integer Dim objShp As Shape For Each objShp In ActiveDocument.Shapes Debug.Print ".Name=" & objShp.Name If objShp.TextFrame.HasText = True Then Debug.Print objShp.TextFrame.TextRange.Text End If Next Stop End Sub
↑ActiveDocument内のShapesから文字列を取り出す
※これだと、図形に追加した文字列も取得してしまうが・・・
※※ワードアートと図形の区別をつけないと?
結合テスト
3.Access OLE型に埋め込まれた Wordアート?を読み上げる
Private Sub コマンド14_Click() Dim objDOC As Word.Document '参照設定して、Word.Documentで使う 'フォーム上のコントロール 中身.ObjectがDocumentか聞く If Me!OLE型.OLEType = acOLENone Then 'acOLENone コントロールには OLE オブジェクトは保存されていません。 MsgBox "中身無し" Else If TypeName(Me!OLE型.Object) = "Document" Then Set objDOC = Me!OLE型.Object 'Word文章.Documentとして処理する 'ワードアート内(シェイプ内)の文字列を取得する Dim objShp As Shape '図形などのシェイプ、ここにワードアート? Dim strMOJI As String '読み上げたい文字列 strMOJI = "" For Each objShp In objDOC.Shapes 'OLEのドキュメント内シェイプ If objShp.TextFrame.HasText = True Then 'テキストありなら 'テキストフレーム内(ワードアート?)の文字列を取得する strMOJI = strMOJI & objShp.TextFrame.TextRange.Text End If Next '読み上げる '単純にSAPI.SpVoiceを使用してみた Dim objSAPI As Object Set objSAPI = CreateObject("SAPI.SpVoice") objSAPI.Speak strMOJI '.Speakに文字列を渡す Set objSAPI = Nothing Else MsgBox "Documentではありません(Wordではない?)" End If End If End Sub
3.1 'フォーム上のコントロール 中身.ObjectがDocumentか聞く
Me!OLE型.OLEType = acOLENone
と
If TypeName(Me!OLE型.Object) = "Document" Then
で、Word文章.Documentを判断、
Set objDOC = Me!OLE型.Object 'Word文章.Documentとして処理する
3.2 'ワードアート内(シェイプ内)の文字列を取得する
Dim objShp As Shape '図形などのシェイプ、ここにワードアート? Dim strMOJI As String '読み上げたい文字列 strMOJI = "" For Each objShp In objDOC.Shapes 'OLEのドキュメント内シェイプ If objShp.TextFrame.HasText = True Then 'テキストありなら 'テキストフレーム内(ワードアート?)の文字列を取得する strMOJI = strMOJI & objShp.TextFrame.TextRange.Text End If Next
3.3 '読み上げる
'単純にSAPI.SpVoiceを使用してみた Dim objSAPI As Object Set objSAPI = CreateObject("SAPI.SpVoice") objSAPI.Speak strMOJI '.Speakに文字列を渡す Set objSAPI = Nothing
と、
単体テストで作成したコードを組み合わせました
それを、人は、結合テストと言うのかなぁ(ぉぃぉぃ)
こんな感じで、作成してみました。
処理のヒントとなれば幸いです。
※なんか、word pictureを私がワードアートと勘違いをしてしまった感じもしないでもないが、、、