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

时间:2018-02-14 15:07:38

标签: excel-vba speech vba excel

现在假设它是11h11分钟。它读取" ONE ONE"小时和"十一"分钟,如:

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

但是,以下内容为" 11"小时和"十一"分钟

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

相反,它会读到" ONE ONE"小时和"十一"分钟,如:

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

如何才能将这些数字作为单词阅读?

3 个答案:

答案 0 :(得分:5)

您需要创建/修改字符串以产生您想要的结果。

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

也会这样做。一旦确定了计算机要求的内容,就可以格式化/重新格式化字符串以产生结果。

修改#1:

在我的电脑上:

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

也按预期工作。

看起来需要首先执行连接。

答案 1 :(得分:2)

通过SpeakXML参数进行接近

<强>语法

  

.Speak(文字,SpeakAsync, SpeakXML ,清除)

如果将第3个参数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

注意/警告

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

答案 2 :(得分:1)

葡萄牙语有一些有趣的发音挑战。除了其他之外,我们还有像圣保罗那样的词语“-ão”终止。 -ão的发音几乎与“母猪”中的-ow一样,这意味着当你发出元音时,空气应该部分来自你的鼻子。那就是说......

Application.Speech.Speak "Já são" & Hour(Now()) & "horas e 11 minutos" - &gt;读到“这是一个小时,十分钟”

Application.Speech.Speak "11" - &gt;读为“ELEVEN”

Application.Speech.Speak "Já são" & "11" & "horas" - &gt;读“这是一个小时”

Application.Speech.Speak "Já sao" & Hour(Now()) - &gt;读到“这是十一小时”。请注意,在这种情况下,鼻子 - “ão”被删除了。所以,数字发音是单词

Application.Speech.Speak "Já são^" & Hour(Now()) - &gt;读到“这是十一小时”。请注意,鼻子 - “ão”现在存在,并且之后还有一个“^”符号

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