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
我希望能够让 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