Posso emitir um bipe no Excel quando um cálculo é concluído?


13

Eu tenho esses cálculos muito longos no Excel. Gostaria de desviar minha atenção da tela e fazer algo na minha mesa, mas ser avisado quando o cálculo for concluído.

Alguma ideia?


1
Como exatamente você está fazendo o cálculo? Se estiver no VBA, por que não usar o método "Beep" do VBA ? O que você já tentou?
Ƭᴇcʜιᴇ007

2
@ techie007 não VBA. Apenas funciona em grandes planilhas do Excel.
Eliyahu

1
Ainda assim, você provavelmente pode usar a função Beep, especialmente se o SS estiver realmente usando "funções" para calcular em vez de "fórmulas". Mas "como" você pode usá-lo depende muito de como sua planilha funciona, o que não sabemos. Como se você estivesse digitando um valor em uma célula e depois precisando esperar muito tempo para terminar, ou pressionou um botão para iniciar o cálculo depois de preencher as células? Se você pressionar F11 para abrir o editor VBA, há um monte de código lá?
Ƭᴇcʜιᴇ007

@ techie007 Estou usando fórmulas. Pressionarei F9 depois de muito trabalho e tenho que esperar.
Eliyahu

Você teria que fazer seus cálculos de outra maneira. O que você quer não é possível se tudo que você está fazendo é dizer Excel para executar os cálculos sobre o livro aberto
Ramhound

Respostas:


21

OK, algo para tentar (as instruções assumem o Excel 2007 ou mais recente):

  • Abra sua pasta de trabalho.
  • Salve-o como um SS habilitado para macro ( .XLSM).
  • Pressione Alt-F11 para abrir a janela de codificação VBA.
  • Clique com o botão direito do mouse em VBAProject ( yourbook.xlsm) e escolha Inserir → Módulo.
  • Abra o recém-criado "Módulo1".
  • No módulo, cole este trecho:

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

    Isso fará com que a tecla F9 seja reatribuída sempre que o SS for aberto. Quando você pressiona F9, ele será executado em F9Handlervez do cálculo usual.

  • No módulo, cole este trecho:

    Sub F9Handler()
        Application.Calculate
        Beep
    End Sub
    

    Agora é isso que será executado quando você pressionar F9. A primeira linha executa o Application.Calculate(que é o que F9 geralmente executa) e, em seguida, o Bip.

  • Guarde tudo.

  • Feche o Excel.
  • (Re) Abra o XLSM que você criou.
  • Lucro. :)

Nota: Você provavelmente precisará ativar macros e / ou tornar o documento um documento "confiável" para garantir que as macro sejam executadas conforme o esperado.

Mais informações:


5

Assim como os outros mencionados, use o beepcomando no Visual Basic (VB):

Function beepNow()
Beep 
End Function

Para obter a codificação VB, você precisa Developer tabdisponibilizar (consulte: Visibilidade da guia Desenvolvedor )

Portanto, quando você altera uma célula ou condição, ele emite um sinal sonoro. Macro de exemplo para chamar o código VBS acima:=IF(C2<>C3,beepNow(),"")


2
Lembre-se de que, se você não estiver usando UDFs VBA no momento, apresentá-los pode levar a uma degradação maciça do desempenho (como, diferentemente das funções normais, elas são executadas apenas no encadeamento principal). Não deve ser um problema com um único bipe, mas se você começar a borrifar isso em todos os lugares, terá problemas.
sapi

1
Infelizmente, esta função usa o alto-falante do PC - não a placa de som e os alto-falantes, mas o alto-falante interno. FYI - Em muitas empresas, o alto-falante do PC foi removido ou desativado para que você não ouça nada.
Raddevus

1

Como alternativa, coloque o módulo no ss, você pode colocá-lo no seu Personal.xlsb. Isso permitiria que você tivesse o "bipe" disponível para qualquer ss. Para executá-lo, modifique a Barra de Ferramentas de Acesso Rápido ou insira um botão / forma para clicar no seu ss e atribua a macro a ele.


Bem-vindo ao superusuário. Parece ser um comentário sobre as outras respostas, em vez de uma solução substancialmente diferente, que é o objetivo das postagens de resposta. Com um pouco mais de rep, você poderá postar comentários.
fixer1234

0

A resposta postada por @ Ƭᴇcʜιᴇ007 é excelente, com uma exceção sobre a qual outros comentaram: o Beepmétodo baseia-se no alto-falante interno (e às vezes desativado) do computador e não usa os alto-falantes, para que você não escute nada.

Estou postando uma solução alternativa com base nessa resposta. Se houvesse menos conteúdo envolvido, eu teria postado um comentário.

Aqui está o que eu uso para reproduzir um som com o VBA no Windows. Ele usa os alto-falantes normais do computador em vez do alto-falante interno e muitas vezes desativado acessado com o Beepmétodo.

Comece com a resposta por @ Ƭᴇcʜιᴇ007. Apenas mude Beeppara isso:

PlaySound sound_Up

Você pode alterar o som alterando sound_Uppara outro item da enumeração SoundType (lista) no código abaixo, como sound_Completeou 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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.