PowerPoint 中的演讲 (VBA)

Speech in PowerPoint (VBA)

我希望能够让 PowerPoint 说话,说点什么。

我试过这段代码让 PP 说话:

Private Sub CommandButton1_Click()
Application.Speech.Speak "Hello World"
End Sub

但是代码不起作用,它不存在。我该怎么办,正确的代码是什么?

它说:

Compile Error Method or Data member not found.

抱歉我的问题有任何错误。

它不起作用的原因是PPT对象模型中没有Application.Speech property/method。我在某处看到过调用 Excel 来完成提升的代码,但这是 PPT Alchemy 的 John Wilson 的回答似乎更直接:

我们网站上有一个关于对话消息框的页面 http://www.pptalchemy.co.uk/PowerPoint_speech.html

可以很容易地修改为在幻灯片放映模式下读出形状中的文本。

Sub speak(oshp As Shape)
  Dim strSpeak As String
  Dim SAPIObj As Object
  Set SAPIObj = CreateObject("SAPI.SPvoice")
  SAPIObj.Rate = -2
  If oshp.HasTextFrame Then
    If oshp.TextFrame.HasText Then
      strSpeak = oshp.TextFrame.TextRange.Text
    End If
  End If

  SAPIObj.speak "<pitch middle='-15'>" & strSpeak

End Sub

如果您不需要从特定形状中拾取文本,可以按照以下行进行修改:

Sub SayThisAloud(sText as String)

  Dim SAPIObj As Object
  Set SAPIObj = CreateObject("SAPI.SPvoice")
  SAPIObj.Rate = -2

  SAPIObj.speak "<pitch middle='-15'>" & sText

End Sub

关于 MSDN 页面,需要一些 editing/modification 才能将其转换为更有用的内容。例如,这是一个如何获取可用语音列表的示例:

在声明部分:

Private V As Object
Private T As Object

然后

Sub ListVoices()

    On Error GoTo EH

    Dim strVoice As String
    Dim SAPIObj As Object
    Set SAPIObj = CreateObject("SAPI.SPvoice")

    'Get each token in the collection returned by GetVoices
    For Each T In SAPIObj.GetVoices
        strVoice = T.GetDescription     'The token's name
        'List1.AddItem strVoice          'Add to listbox
        Debug.Print strVoice
    Next

Exit Sub

EH:
    If Err.Number Then ShowErrMsg
End Sub

Private Sub ShowErrMsg()

    ' Declare identifiers:
    Dim T As String

    T = "Desc: " & Err.Description & vbNewLine
    T = T & "Err #: " & Err.Number
    MsgBox T, vbExclamation, "Run-Time Error"
    End
End Sub