三流君 ken3のmemo置き場

三流プログラマーのメモ書きです。主にVBAやWindowsの話題が多いです

挨拶・自己紹介:
失敗続きのAB型の変わり者 :三流プログラマー Ken3です
フリーのエンジニア・個人事業主です・・と書くと聞こえはイイが(それとなくカッコよく聞こえるが)、 現在は小さな案件の受注請負 と 短期派遣 で 日々つつましく?ほそぼそと暮らしてます。

よく検索されるキーワード: [質問回答XXXXさんへ] [CreateObject] [VBA] [JRA競馬オッズ]

Access OLE型で登録された Wordアートの文字列を取り出し 文字を読み上げる

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でテストしました。

単体テスト
1.Access VBAで文字を読み上げる

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を私がワードアートと勘違いをしてしまった感じもしないでもないが、、、

Ken3 ホームページ 目次

分類:HPを大きく分けると4つの柱(分類)です。

  1. [VBA・マクロ プログラミング]の解説
    当店の人気はVBA系のCreateObject("XXXXXX.application")で他のアプリケーションを操作するサンプルが人気です
  2. [プログラマーの愚痴]では、あまり見せたくない三流プログラマーの内面かな。
    三流君を踏み台にする
  3. [古いクラシック ASP(Active Server Pages)]の解説。
  4. [元コンビニ店長時代の話]が弟に巻き込まれ、失敗した脱サラ、畑違い?の仕事で失敗。
主に上記4つの分類でHP作成やメルマガの発行を行ってます。
※更新頻度が落ちていて情報の鮮度が悪いです。



本当に三流なんです(笑):たまにスゴイですねなんて言われることもありますが、
真実は→ [三流君の真実は...] ←を初めに見てくださるとわかると思います。
(からくりは、成功例↑しか載せてなくて ヒドイ失敗例はお蔵入り迷宮入りが多かったりします)