当计算完成时,我可以让 Excel 发出蜂鸣声吗?

当计算完成时,我可以让 Excel 发出蜂鸣声吗?

我在 Excel 中有一些很长的计算。我想将注意力从屏幕上转移开,在办公桌上完成一些事情,但又希望在计算完成时收到提醒。

有任何想法吗?

答案1

好的,可以尝试一下(说明假设使用 Excel 2007 或更新版本):

  • 打开您的工作簿。
  • 将其保存为启用宏的 SS ( .XLSM)。
  • 按 Alt-F11 打开 VBA 编码窗口。
  • 右键单击 VBAProject ( yourbook.xlsm),然后选择插入 → 模块。
  • 打开新创建的“Module1”。
  • 在模块中粘贴此代码片段:

    Sub Auto_Open()
        Application.OnKey "{F9}", "F9Handler"
    End Sub
    

    这将导致每次打开 SS 时重新分配 F9 键。当您按下 F9 时,它将运行,F9Handler而不是通常的计算。

  • 在模块中粘贴此代码片段:

    Sub F9Handler()
        Application.Calculate
        Beep
    End Sub
    

    这是当您按下 F9 时将运行的内容。第一行运行Application.Calculate(这是 F9 通常执行的操作),然后发出哔声。

  • 把一切都存起来。

  • 关闭 Excel。
  • (重新)打开您制作的 XLSM。
  • 利润。 :)

注意:您可能必须启用宏和/或使文档成为“受信任”的文档,以确保宏按预期运行。

更多信息:

答案2

正如其他人提到的那样,使用beepVisual Basic (VB) 中的命令:

Function beepNow()
Beep 
End Function

要获取 VB 编码,您需要获取Developer tab可用的(请参阅:使“开发人员”选项卡可见

因此,当单元格或条件发生变化时,它会发出哔哔声。调用上述 VBS 代码的示例宏:=IF(C2<>C3,beepNow(),"")

答案3

除了将模块放入 ss 中,您还可以将其放入 Personal.xlsb 中。这样,您就可以在任何 ss 上使用“哔哔声”。要运行它,请修改快速访问工具栏或插入按钮/形状以在您的 ss 中单击并为其分配宏。

答案4

@Ƭᴇcʜιᴇ007 发布的答案非常好,但其他人也评论过一个例外:该Beep方法依赖于计算机内的板载(有时已禁用)扬声器,并且不使用您的扬声器,因此您可能听不到任何声音。

我正在根据该答案发布一个解决方法。如果涉及的内容较少,我就会发布一条评论。

这是我在 Windows 上使用 VBA 播放声音的方法。它使用普通的计算机扬声器,而不是使用该Beep方法访问的板载且经常被禁用的扬声器。

从@Ƭᴇcʜιᴇ007 的回答开始。只需将Beep其更改为:

PlaySound sound_Up

sound_Up您可以通过从以下代码中的 SoundType 枚举(列表)中更改为另一项(例如sound_Complete或 )来更改声音sound_Notify

Option Explicit
' --------------------------------------------------
' --------------------------------------------------
'   REQUIRED DLL REFERENCE AND CONSTANTS
' --------------------------------------------------
' Reference to external procedure in DLL to play sounds

#If VBA7 Then
    ' 64-bit MS Office
    Private Declare PtrSafe Function sndPlaySound32bit Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As LongPtr) As LongPtr
#Else
    ' 32-bit MS Office
    Private Declare Function sndPlaySound32bit Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As LongPtr) As LongPtr
#End If

' --------------------------------------------------
' --------------------------------------------------
'   CONSTANTS
' --------------------------------------------------
'
Public Const SOUND_DO_NOT_WAIT          As String = "&H1"
Private Const SOUND_FILES_PATH          As String = "C:\Windows\Media\"

' --------------------------------------------------
' --------------------------------------------------
'   PUBLIC ENUMERATIONS
' --------------------------------------------------
'
Public Enum SoundType
    sound_None = 0
    sound_Up = 1
    sound_Down = 2
    sound_Attention = 3
    sound_Blocked = 4
    sound_Boop = 5
    sound_Complete = 6
    sound_Critical = 7
    sound_Ding = 8
    sound_Error = 9
    sound_Exclamation = 10
    sound_FastDown = 11
    sound_Information = 12
    sound_Notify = 13
    sound_PhoneRing = 14
    sound_RingOut = 15
    sound_Stop = 16
    sound_Tada = 17
    sound_Tone = 18
End Enum

' --------------------------------------------------
' --------------------------------------------------
'   PUBLIC METHODS
' --------------------------------------------------
'
Public Sub PlaySound(ByVal sound As SoundType)
' Plays a sound from a list (see the 'SoundType' Enum).  Code execution continues
'   while sound is playing.
    Dim soundFileName                   As String
    soundFileName = GetSoundFileName(sound)

    If Not soundFileName = vbNullString Then
        sndPlaySound32bit SOUND_FILES_PATH & soundFileName, SOUND_DO_NOT_WAIT
    End If
End Sub

' --------------------------------------------------
' --------------------------------------------------
'   PRIVATE DEPENDENCIES
' --------------------------------------------------
'
Private Function GetSoundFileName(ByVal soundToGet As SoundType) As String
' Returns a windows sound file name (not path) from a member of the custom
'   'SoundType' enumeration.

    Dim fName                           As String

    Select Case soundToGet
    Case sound_Up:          fName = "Speech On.wav"
    Case sound_Down:        fName = "Speech Off.wav"
    Case sound_Attention:   fName = "Windows Battery Low.wav"
    Case sound_Blocked:     fName = "Windows Pop-up Blocked.wav"
    Case sound_Boop:        fName = "Speech Misrecognition.wav"
    Case sound_Complete:    fName = "Windows Print complete.wav"
    Case sound_Critical:    fName = "Windows Critical Stop.wav"
    Case sound_Ding:        fName = "Windows Ding.wav"
    Case sound_Error:       fName = "Windows Error.wav"
    Case sound_Exclamation: fName = "Windows Exclamation.wav"
    Case sound_FastDown:    fName = "Speech Sleep.wav"
    Case sound_Information: fName = "Windows Information Bar.wav"
    Case sound_Notify:      fName = "notify.wav"
    Case sound_PhoneRing:   fName = "Windows Ringin.wav"
    Case sound_RingOut:     fName = "Windows Ringout.wav"
    Case sound_Stop:        fName = "chord.wav"
    Case sound_Tada:        fName = "tada.wav"
    Case sound_Tone:        fName = "Windows Balloon.wav"
    Case Else:              fName = vbNullString
    End Select

    GetSoundFileName = fName
End Function

相关内容