为什么 Application.Speech.Speak 单独读取一些数字而不是将它们放在一起?

Why does Application.Speech.Speak read some numbers individually rather than put them together?

假设现在是 11 点 11 分。它显示 "ONE ONE" 小时 "eleven" 分钟,如:

Sub TEST1() 
  Application.Speech.Speak "It is " & Hour(Now()) & " hours and " & Minute(Now()) & " minutes"
End Sub

但是,下面是 "eleven" 小时 "eleven" 分钟

Sub TEST2() 
  Application.Speech.Speak "It is 11 hours and 11 minutes"
End Sub

相反,它显示 "ONE ONE" 小时 "eleven" 分钟,如:

Sub TEST3() 
  Application.Speech.Speak "It is " & "11" & " hours and " & "11" & " minutes"
End Sub

我怎样才能让它把这些数字读成文字?

您需要 create/modify 字符串才能产生您想要的结果。

Sub dural()
    Application.Speech.Speak "11"
    Application.Speech.Speak "eleven"
End Sub

会重复同样的事情。

Sub dural()
    Application.Speech.Speak "1 1"
    Application.Speech.Speak "one one"
End Sub

也会这样做。一旦你决定了你想让计算机说什么,你可以 format/re-format 字符串来产生那个结果。

编辑#1:

在我的电脑上:

Sub dmral()
    Dim s As String
    s = "It is " & "11" & " hours and " & "11" & " minutes"
    MsgBox s
    Application.Speech.Speak s
End Sub

也按预期工作。

看来需要先进行串联

通过说话接近XML 争论

语法

.Speak(Text, SpeakAsync, SpeakXML, Purge)

如果将第三个参数 SpeakXML 设置为 True,则可以在文本字符串中使用 XML 标签。

XML <spell> 标签强制语音拼出所有文本,而不是使用其默认的单词和句子中断规则。所有字符都应扩展为相应的单词(包括标点符号、数字等)。 注意 <spell> 标签不能为空,不要忘记结束标签 </spell>.

尝试将以下内容与 11 的两种变体一起使用:

代码

Sub TEST()
  Application.Speech.Speak "It is " & "<spell>11</spell>" & " hours and " & "11" & " minutes", False, SpeakXML:=True
End Sub

Note/caveat

我使用的是中欧语言版本,而你的例子在我的例子中没有说出一个,所以可能还有另一个本地设置问题。

葡萄牙语有一些有趣的发音挑战。我们有,除其他外,鼻音“-ão”词尾,如在圣保罗。 -ão 的发音几乎与 "sow" 中的 -ow 相似,这意味着当您发出元音时,空气应该部分从鼻子排出。话虽这么说...

Application.Speech.Speak "Já são" & Hour(Now()) & "horas e 11 minutos" --> 读取 "It is ONE ONE hours and ELEVEN minutes"

Application.Speech.Speak "11" --> 读取 "ELEVEN"

Application.Speech.Speak "Já são" & "11" & "horas" --> 读取 "It is ONE ONE hours"

Application.Speech.Speak "Já sao" & Hour(Now()) --> 读取 "It is ELEVEN hours"。请注意,在这种情况下,鼻音 -“ão”已被删除。所以,数字发音是单词

Application.Speech.Speak "Já são^" & Hour(Now()) --> 读取 "It is ELEVEN hours"。请注意,现在出现了鼻音 -“ão”,并且紧接着还有一个“^”符号

我不知道为什么 Excel 会这样。 但是,问题解决了 :)