【问题标题】:Allow Excel to execute actions while application.Speech.Speak is active允许 Excel 在 application.Speech.Speak 处于活动状态时执行操作
【发布时间】:2015-05-08 05:50:15
【问题描述】:

我有一个用作倒数计时器的代码(一张纸上最多三个计时器),并且在计时器处于活动状态时会发生一些动作。现在一切正常。当任何计时器达到 0 时,将运行以下 sn-p 代码:

If Sheets("Sheet1").Range("C8").Interior.Color = 255 Or Sheets("Sheet1").Range("G8").Interior.Color = 255 Or Sheets("Sheet1").Range("K8").Interior.Color = 255 Then

Beep
Application.Speech.Speak ("Part is done")
Beep

Call AlertTIMER
Else
Exit Sub
End If

从上面的 sn-p 调用的 AlertTIMER sub 运行 Application.Wait,在它最后一次调用和下一次调用之间创建一个 3 秒的暂停。我包含等待功能的原因是,当Application.Speech 正在运行时,我无法完成任何其他操作(例如单击终止警报子的“停止”命令按钮)。

有没有办法允许在 Application.Speech 处于活动状态时按下命令按钮,以便我可以删除 Application.Wait 功能?还是我需要保留 Application.Wait 的解决方法?

我曾尝试使用DoEvents,将它放在第一次哔声之前,但它不起作用。

【问题讨论】:

  • 另外,如果您希望我提供代码的其他部分或进一步解释,我可以...只是发生了很多事情,所以我尽量简洁。
  • 我不太清楚您要做什么。如果你只是想在执行时打破application.speech.speak,你可以ctrl+break。
  • 好的,所以 Alert sub(Beep “Part is done” Beep)正在响起,然后有 3 秒的暂停(由于 Application.Wait)。此暂停允许某人单击命令按钮(停止),这将导致警报子停止被触发。如果他们不这样做,则在 3 秒过后,将再次调用 Alert 子。如果我不包括暂停(理想情况下我想删除),那么当警报子处于活动状态时,就不可能单击命令按钮(停止)。我正在寻找一种能够在子警报处于活动状态时执行操作的方法(哔声“部分完成”哔声)。
  • 我不想使用 ctrl+break,因为有时我会执行一个动作,但希望 Alert 子继续。一个例子是有多个计时器。因此,如果有两个触发警报,我希望能够单击一个停止,然后完成一个动作......而警报子继续,因为没有点击第二个停止。 ctrl+break 会让我从两者中跳出来。另外,我想避免使用 ctrl+break,因为我不想在键盘上单击某些东西,而且我不相信 sendkeys 被认为是可靠的 - 所以我不想将它作为代码的一部分。

标签: vba excel doevents


【解决方案1】:
Application.Speech.Speak "Part is done", SpeakAsync:=True

来源:https://wellsr.com/vba/2016/excel/make-excel-talk-with-application-speech-speak-vba/

【讨论】:

    【解决方案2】:

    您可以添加指令 DoEvents 它将允许操作系统检查任何其他交互,例如点击...查看有关此的一些教程

    【讨论】:

    【解决方案3】:
    Application.Speech.Speak ("Part is done",true)
    

    这应该使您能够维护工作簿的功能

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 2020-03-09
      • 1970-01-01
      • 1970-01-01
      • 2020-06-24
      • 2019-08-02
      相关资源
      最近更新 更多