我在 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
正如其他人提到的那样,使用beep
Visual 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