У меня есть эти действительно длинные вычисления в 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ʜι is007, отличный, за одним исключением, которое прокомментировали другие: 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