У мене є справді довгі розрахунки в Excel. Я хотів би відвернути свою увагу від екрана і щось зробити за своїм столом, але попередити про те, коли розрахунок закінчено.
Будь-які ідеї?
У мене є справді довгі розрахунки в Excel. Я хотів би відвернути свою увагу від екрана і щось зробити за своїм столом, але попередити про те, коли розрахунок закінчено.
Будь-які ідеї?
Відповіді:
Гаразд, щось спробувати (інструкції передбачають Excel 2007 або новішу версію):
.XLSM
) з підтримкою макросу .yourbook.xlsm
) та виберіть Вставити → Модуль.В модуль вставити цей фрагмент:
Sub Auto_Open()
Application.OnKey "{F9}", "F9Handler"
End Sub
Це призведе до перепризначення клавіші F9 щоразу, коли SS відкривається. Коли ви натиснете F9, він буде працювати F9Handler
замість звичайного обчислення.
В модуль вставте цей фрагмент:
Sub F9Handler()
Application.Calculate
Beep
End Sub
Це те, що тепер буде запущено, коли ви натиснете F9. Перший рядок запускає Application.Calculate
(який зазвичай виконує F9), а потім звуковий сигнал.
Збережіть усе.
Примітка. Вам, ймовірно, доведеться ввімкнути макроси та / або зробити документ "довіреним" документом, щоб забезпечити виконання макросів (ив), як очікувалося.
Більше інформації:
Як і інші згадані, використовуйте beep
команду в Visual Basic (VB):
Function beepNow()
Beep
End Function
Щоб отримати кодування VB, вам потрібно отримати Developer tab
доступне (див.: Отримання вкладки "Розробник" )
Тож, коли у вас зміниться клітина або стан, вона пролунає звуковий сигнал. Приклад макросу для виклику коду VBS вище:=IF(C2<>C3,beepNow(),"")
Крім того, щоб розмістити модуль в ss, ви можете помістити його у свою Personal.xlsb. Це дозволить вам отримати "звуковий сигнал" доступним для будь-яких повідомлень. Щоб запустити його, змініть панель інструментів швидкого доступу або вставте кнопку / форму, щоб натиснути на ваш ss та призначити макрос їй.
Відповідь, опублікована @ Ƭᴇcʜιᴇ007, є чудовою, за винятком одного, що прокоментували інші: Beep
метод покладається на ваш вбудований (а іноді і відключений) динамік у комп'ютері і не використовує ваші динаміки, тому ви можете нічого не чути.
Я публікую рішення, грунтуючись на цій відповіді. Якби було менше вмісту, я б розмістив коментар.
Ось що я використовую для відтворення звуку за допомогою VBA у Windows. Він використовує звичайні комп'ютерні динаміки замість бортового та часто відключений динамік, доступ до якого використовується 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