Могу ли я издать звуковой сигнал Excel после завершения расчета?


13

У меня есть эти действительно длинные вычисления в Excel. Я хотел бы отвлечь свое внимание от экрана и сделать что-то на моем столе, но будьте предупреждены, когда вычисление закончится.

Есть идеи?


1
Как именно вы делаете расчет? Если это в VBA, почему бы не использовать метод VBA "Beep" ? Что ты уже пробовал?
Ƭᴇcʜιᴇ007

2
@ techie007 не VBA. Просто функции в больших таблицах Excel.
Элиягу

1
Тем не менее, вы, вероятно, можете использовать функцию Beep, особенно если ваш SS фактически использует «функции» для вычисления вместо «формул». Но «как» вы можете использовать это в значительной степени зависит от того, как работает ваша электронная таблица, чего мы не знаем. Например, вы просто вводите значение в ячейку и затем ждете действительно долгое время, чтобы оно закончилось, или вы нажимаете кнопку, чтобы начать вычисление после заполнения ячеек? Если вы нажали F11, чтобы открыть редактор VBA, там есть куча кода?
Ƭᴇcʜιᴇ007

@ techie007 Я использую формулы. Я нажму F9 после большого количества работы и буду ждать.
Элиягу

Вы бы сделали свои расчеты по-другому. То, что вы хотите, не возможно, если все, что вы делаете, это говорите Excel выполнить вычисления на открытой рабочей
книге

Ответы:


21

Хорошо, что-то попробовать (инструкции предполагают, что Excel 2007 или новее):

  • Откройте вашу рабочую книгу.
  • Сохраните его как SS с поддержкой макросов ( .XLSM).
  • Нажмите Alt-F11, чтобы открыть окно кодирования VBA.
  • Щелкните правой кнопкой мыши VBAProject ( yourbook.xlsm) и выберите «Вставка» → «Модуль».
  • Откройте только что созданный «Module1».
  • В модуле вставьте этот фрагмент:

    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
Просто имейте в виду, что если вы в настоящее время не используете какие-либо пользовательские функции VBA, их внедрение может привести к значительному снижению производительности (поскольку, в отличие от обычных функций, они выполняются только в основном потоке). Не должно быть проблем с одним звуковым сигналом, но если вы начнете распространять его везде, у вас будут проблемы.
Сапи

1
К сожалению, эта функция использует динамик компьютера - не звуковую карту и динамики, а встроенный динамик. К вашему сведению - во многих компаниях динамик ПК был удален или отключен, поэтому вы ничего не услышите.
Раддевус

1

В качестве альтернативы размещению модуля в ss, вы можете поместить его в свой Personal.xlsb. Это позволит вам иметь «звуковой сигнал», доступный для любой сс. Чтобы запустить его, либо измените панель быстрого доступа, либо вставьте кнопку / форму, чтобы щелкнуть мышью по ss и назначить ей макрос.


Добро пожаловать в Супер пользователя. Похоже, что это комментарий к другим ответам, а не существенно другое решение, для которого предназначены посты с ответами. Еще чуть-чуть, вы сможете оставлять комментарии.
fixer1234

0

Ответ, отправленный @ Ƭᴇ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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.