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.