Czy mogę wygenerować dźwięk Excela po zakończeniu obliczeń?


13

Mam te naprawdę długie obliczenia w Excelu. Chciałbym odwrócić uwagę od ekranu i zrobić coś przy biurku, ale ostrzegam o zakończeniu obliczeń.

Jakieś pomysły?


1
Jak dokładnie wykonujesz obliczenia? Jeśli jest w VBA, dlaczego nie zastosować metody „Beep” VBA ? Czego już próbowałeś?
— ᴇcʜιᴇ007

2
@ techie007 nie VBA. Po prostu działa w dużych arkuszach kalkulacyjnych Excel.
— Eliyahu

1
Nadal możesz prawdopodobnie użyć funkcji Beep, szczególnie jeśli SS używa faktycznie „funkcji” do obliczania zamiast „formuł”. Ale „sposób” korzystania z niego zależy w dużej mierze od tego, jak działa Twój arkusz kalkulacyjny, czego nie wiemy. Czy po prostu wpisujesz wartość w komórce, a następnie musisz naprawdę długo czekać, aż się zakończy, czy naciskasz przycisk, aby rozpocząć obliczenia po wypełnieniu komórek? Jeśli naciśniesz klawisz F11, aby otworzyć edytor VBA, czy jest tam sporo kodu?
— ᴇcʜιᴇ007

@ techie007 Używam formuł. Naciskam F9 po kilku pracach i muszę czekać.
— Eliyahu

Miałbyś wykonać swoje obliczenia w inny sposób. To, czego chcesz, nie jest możliwe, jeśli wszystko, co robisz, to każe
— Excelowi

Odpowiedzi:


21

OK, spróbuj czegoś (instrukcje zakładają Excel 2007 lub nowszy):

  • Otwórz skoroszyt.
  • Zapisz go jako SS ( .XLSM) z obsługą makr .
  • Naciśnij Alt-F11, aby otworzyć okno kodowania VBA.
  • Kliknij prawym przyciskiem myszy VBAProject ( yourbook.xlsm) i wybierz Wstaw → Moduł.
  • Otwórz nowo utworzony moduł „Module1”.
  • W module wklej ten fragment:

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

    Spowoduje to, że klawisz F9 będzie przypisany ponownie przy każdym otwarciu SS. Kiedy naciśniesz F9, uruchomi się F9Handlerzamiast zwykłego obliczenia.

  • W module wklej ten fragment kodu:

    Sub F9Handler()
        Application.Calculate
        Beep
    End Sub
    

    To będzie teraz uruchamiane po naciśnięciu F9. Pierwszy wiersz uruchamia Application.Calculate(co zwykle wykonuje F9), a następnie Sygnał dźwiękowy.

  • Zaoszczędź wszystko.

  • Zamknij program Excel.
  • (Re) Otwórz utworzony XLSM.
  • Zysk. :)

Uwaga: prawdopodobnie będziesz musiał włączyć makra i / lub uczynić dokument „zaufanym” dokumentem, aby upewnić się, że makra działają zgodnie z oczekiwaniami.

Więcej informacji:


5

Podobnie jak inne wspomniane, użyj beeppolecenia w języku Visual Basic (VB):

Function beepNow()
Beep 
End Function

Aby uzyskać kodowanie VB, musisz uzyskać Developer tabdostępne (patrz: Wyświetlanie karty Deweloper )

Kiedy więc zmienisz komórkę lub stan, usłyszysz sygnał dźwiękowy. Przykładowe makro do wywołania powyższego kodu VBS:=IF(C2<>C3,beepNow(),"")


2
Pamiętaj tylko, że jeśli nie używasz obecnie żadnych VD UDF, ich wprowadzenie może doprowadzić do znacznego pogorszenia wydajności (ponieważ, w przeciwieństwie do normalnych funkcji, działają tylko w głównym wątku). Nie powinno to stanowić problemu z pojedynczym sygnałem dźwiękowym, ale jeśli zaczniesz to zraszać wszędzie, będziesz mieć problemy.
— sapi

1
Niestety ta funkcja korzysta z głośnika komputera - nie karty dźwiękowej i głośników, ale głośnik wewnętrzny. FYI - W wielu firmach głośnik PC został usunięty lub wyłączony, więc nic nie usłyszysz.
— raddevus

1

Alternatywnie do umieszczenia modułu w ss, możesz umieścić go w pliku Personal.xlsb. Umożliwi to dostęp do „beep” dla każdego ss. Aby go uruchomić, zmodyfikuj pasek narzędzi szybkiego dostępu lub wstaw przycisk / kształt, aby kliknąć ss i przypisać mu makro.


Witamy w Super User. To wydaje się być komentarzem do innych odpowiedzi, a nie zasadniczo innym rozwiązaniem, do czego przeznaczone są posty z odpowiedziami. Przy odrobinie powtórzenia będziesz mógł dodawać komentarze.
— fixer1234

0

Odpowiedź wysłana przez @ Ƭᴇcʜιᴇ007 jest doskonała, z jednym wyjątkiem, że inni skomentowali: Beepmetoda polega na twoim (i czasem wyłączonym) głośniku w komputerze i nie używa głośników, więc możesz nic nie słyszeć.

Publikuję obejście na podstawie tej odpowiedzi. Gdyby było mniej treści, zamieściłbym komentarz.

Oto, czego używam do odtwarzania dźwięku w VBA na Windowsie. Używa zwykłych głośników komputerowych zamiast wbudowanych i często wyłączanych głośników, do których dostęp uzyskuje się za pomocą tej Beepmetody.

Zacznij od odpowiedzi @ Ƭᴇcʜιᴇ007. Po prostu zmień Beepto:

PlaySound sound_Up

Możesz zmienić dźwięk, zmieniając sound_Upna inny element z wyliczenia (listy) SoundType w poniższym kodzie, takim jak sound_Completelub 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.