Чи можу я зробити звуковий сигнал Excel, коли розрахунок закінчений?


13

У мене є справді довгі розрахунки в Excel. Я хотів би відвернути свою увагу від екрана і щось зробити за своїм столом, але попередити про те, коли розрахунок закінчено.

Будь-які ідеї?


1
Як саме ви робите розрахунок? Якщо він знаходиться в VBA, чому б не використати метод "Beep" VBA ? Що ви вже пробували?
Ƭᴇcʜιᴇ007

2
@ techie007 не VBA. Просто функціонує у великих електронних таблицях Excel.
Еліяху

1
Тим не менш, ти можеш користуватися функцією Beep, особливо якщо ти SS фактично використовуєш "функції" для обчислення замість "формул". Але те, як ви можете це використовувати, дуже залежить від того, як працює ваша електронна таблиця, про що ми не знаємо. Начебто, ви просто набираєте значення в комірку, а потім доводиться чекати дуже довго, щоб воно закінчилося, або ви натискаєте кнопку, щоб розпочати обчислення після заповнення комірок? Якщо ви натискаєте F11, щоб відкрити редактор VBA, чи є там купа коду?
Ƭᴇcʜιᴇ007

@ techie007 Я використовую формули. Я натискаю F9 після великої роботи і доведеться чекати.
Еліяху

Ви б зробили свої розрахунки іншим способом. Те, що ви хочете, неможливо, якщо все, що ви робите,
наказати

Відповіді:


21

Гаразд, щось спробувати (інструкції передбачають Excel 2007 або новішу версію):

  • Відкрийте свою робочу книжку.
  • Збережіть його як SS ( .XLSM) з підтримкою макросу .
  • Натисніть Alt-F11, щоб відкрити вікно кодування VBA.
  • Клацніть правою кнопкою миші VBAProject ( yourbook.xlsm) та виберіть Вставити → Модуль.
  • Відкрийте новостворений "Модуль1".
  • В модуль вставити цей фрагмент:

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

    Це призведе до перепризначення клавіші F9 щоразу, коли SS відкривається. Коли ви натиснете F9, він буде працювати F9Handlerзамість звичайного обчислення.

  • В модуль вставте цей фрагмент:

    Sub F9Handler()
        Application.Calculate
        Beep
    End Sub
    

    Це те, що тепер буде запущено, коли ви натиснете F9. Перший рядок запускає Application.Calculate(який зазвичай виконує F9), а потім звуковий сигнал.

  • Збережіть усе.

  • Закрити Excel.
  • (Re) Відкрийте зроблений вами XLSM.
  • Прибуток. :)

Примітка. Вам, ймовірно, доведеться ввімкнути макроси та / або зробити документ "довіреним" документом, щоб забезпечити виконання макросів (ив), як очікувалося.

Більше інформації:


5

Як і інші згадані, використовуйте beepкоманду в Visual Basic (VB):

Function beepNow()
Beep 
End Function

Щоб отримати кодування VB, вам потрібно отримати Developer tabдоступне (див.: Отримання вкладки "Розробник" )

Тож, коли у вас зміниться клітина або стан, вона пролунає звуковий сигнал. Приклад макросу для виклику коду VBS вище:=IF(C2<>C3,beepNow(),"")


2
Просто пам’ятайте, що якщо ви зараз не використовуєте жодних UBA-файлів VBA, їх введення може призвести до масового зниження продуктивності (оскільки, на відміну від звичайних функцій, вони працюють лише в основному потоці). Не повинно бути проблеми з одним звуковим сигналом, але якщо ви почнете розповсюджувати це скрізь, у вас виникнуть проблеми.
сапі

1
На жаль, ця функція використовує динамік вашого ПК - не вашу звукову карту та динаміки, а внутрішній динамік. FYI - У багатьох компаніях динамік ПК був вилучений або вимкнено, тому ви нічого не почуєте.
raddevus

1

Крім того, щоб розмістити модуль в ss, ви можете помістити його у свою Personal.xlsb. Це дозволить вам отримати "звуковий сигнал" доступним для будь-яких повідомлень. Щоб запустити його, змініть панель інструментів швидкого доступу або вставте кнопку / форму, щоб натиснути на ваш ss та призначити макрос їй.


Ласкаво просимо до Супер Користувача. Це здається, що це коментар до інших відповідей, а не суттєво інше рішення, саме для чого призначені пости відповідей. З трохи більше представників ви зможете публікувати коментарі.
fixer1234

0

Відповідь, опублікована @ Ƭᴇ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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.