计算完成后可以发出Excel提示音吗?


13

我在Excel中有这些非常长的计算。我想转移我的注意力从屏幕上移开,在办公桌前做一些事情,但会在计算完成时提醒您。

有任何想法吗?


1
您如何精确地进行计算?如果在VBA中,为什么不使用VBA的“提示”方法?您已经尝试了什么?
Ƭᴇcʜιᴇ007

2
@ techie007不是VBA。只能在大型Excel电子表格中使用。
Eliyahu 2014年

1
仍然可以使用Beep函数,尤其是在SS实际上使用“函数”而不是“公式”进行计算的情况下。但是您如何使用它“很大程度上”取决于电子表格的工作方式,而我们尚不清楚。就像您只是在一个单元格中键入一个值,然后必须等待很长时间才能完成它一样,还是在填充单元格后按下按钮开始计算?如果您按F11键以打开VBA编辑器,其中是否有很多代码?
Ƭᴇcʜιᴇ007

@ techie007我正在使用公式。我要做一堆工作后按F9键,必须等待。
Eliyahu 2014年

您将用另一种方式进行计算。如果您只是想告诉Excel在打开的工作簿上执行计算,那么您想要的就是不可能的
Ramhound 2014年

Answers:


21

OK,尝试一下(说明假定为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。
  • 利润。:)

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

更多信息:


5

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

Function beepNow()
Beep 
End Function

要获得VB编码,您需要获得Developer tab可用的代码(请参阅:使开发人员标签可见

因此,当您更改单元格或条件时,它将发出蜂鸣声。调用上面的VBS代码的示例宏:=IF(C2<>C3,beepNow(),"")


2
请注意,如果您当前不使用任何VBA UDF,则引入它们可能会导致性能大幅下降(因为与常规函数不同,它们仅在主线程上运行)。发出一声哔哔声应该不成问题,但是如果您开始将其撒在任何地方,都会遇到问题。
sapi 2014年

1
不幸的是,此功能使用您的PC扬声器-不是您的声卡和扬声器,而是内部扬声器。仅供参考-在许多公司中,PC扬声器已被卸下或禁用,因此您听不到任何声音。
raddevus 2014年

1

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


欢迎来到超级用户。这似乎是对其他答案的评论,而不是实质上不同的解决方案,这是答案帖所针对的。再增加一点代表,您就可以发表评论。
fixer1234 2007年

0

@Ƭᴇcʜιᴇ007发布的答案是一个很好的答案,但其他人对此予以评论:该Beep方法依赖于计算机上的内置扬声器(有时是禁用的),并且不使用扬声器,因此您可能听不到任何声音。

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

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

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

PlaySound sound_Up

您可以通过sound_Up以下代码中的SoundType枚举(列表)更改为另一个项目来更改声音,例如sound_Completesound_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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.