テキストファイルを読み上げる


Excel 2002から追加された機能にSpeakメソッドがあります。Speakメソッドは任意のデータを読み上げる命令で、次のように使います。次のコードは、セル範囲A1:A4のデータを読み上げます。

Sub Sample1()
    Range("A1:A4").Speak
End Sub

けっこう笑えます。

さて、このSpeakメソッドは上記のようにRangeオブジェクトのメソッドですが、実はApplicationオブジェクトの配下にSpeachオブジェクトというのがあり、そのSpeachオブジェクトにも同じSpeakメソッドが用意されています。

Sub Sample2()
    Application.Speech.Speak Range("A1")
End Sub

SpeachオブジェクトのSpeakメソッドは引数に単一のテキストを指定しますので、Application.Speech.Speak Range("A1:A4")だとエラーになります。ここで指定できるテキストは何もセルに入力されている必要はありません。たとえば次のように任意の文字列を読み上げることが可能です。

Sub Sample3()
    Application.Speech.Speak "電子メールを受信しました"
End Sub

ということは、テキストファイルから文字列を取得すれば、任意のテキストファイルを読み上げさせることもできるわけです。次のコードは、C:\Sample.txtの内容を1行ずつ読み上げます。

Sub Sample4()
    Dim buf As String
    Open "C:\Sample.txt" For Input As #1
        Do Until EOF(1)
            Line Input #1, buf
            Application.Speech.Speak buf
        Loop
    Close #1
End Sub

いろいろなテキストで試してください。かなり笑えます。

SpeachオブジェクトのSpeakメソッドにはおもしろい機能があります。引数SpeakXMLにTrueを指定すると、そのテキストをXMLファイルと認識してくれて、XMLのタグを無視してくれるのです。試してみましたが、どうやら無視するのはXMLのタグに限らず、HTMLのように<と>で囲われたタグはとりあえず無視してくれるようです。下記のコードを実行して、その違いをお聞きください。

Sub Sample5()
    ''普通のテキストとして読み上げる
    Application.Speech.Speak Text:="<font color=BLACK>電子メールを受信しました</font>", _
                             SpeakXML:=False
    ''タグを無視して読み上げる
    Application.Speech.Speak Text:="<font color=BLACK>電子メールを受信しました</font>", _
                             SpeakXML:=True
End Sub

インターネットからHTMLファイルを取得すれば、そのページを読み上げることもできますね。

ちなみに、オートメーションでIEを起動して任意のページを開くテクニックは「ホームページ(URL)を開く」をご覧ください。また、IEを使わずXMLHTTPオブジェクトを使ってHTMLソースを取得する方法は「HTMLソースをダウンロードする」を参考にしてください。