Posso emettere un segnale acustico Excel al termine di un calcolo?


13

Ho questi calcoli davvero lunghi in Excel. Vorrei distogliere la mia attenzione dallo schermo e fare qualcosa sulla mia scrivania, ma essere avvisato quando il calcolo è finito.

Qualche idea?


1
Come stai facendo esattamente il calcolo? Se è in VBA, perché non utilizzare il metodo "Beep" di VBA ? Cosa hai già provato?
Ƭᴇcʜιᴇ007,

2
@ techie007 non VBA. Funziona solo in grandi fogli di calcolo Excel.
Eliyahu,

1
Probabilmente puoi comunque usare la funzione Beep, specialmente se SS stai effettivamente usando "funzioni" per calcolare invece di "formule". Ma "come" puoi usarlo dipende molto da come funziona il tuo foglio di calcolo, che non sappiamo. Ad esempio, stai semplicemente digitando un valore in una cella e poi devi aspettare molto tempo prima che finisca, oppure premi un pulsante per iniziare il calcolo dopo aver riempito le celle? Se premi F11 per aprire l'editor VBA, c'è un sacco di codice lì dentro?
Ƭᴇcʜιᴇ007,

@ techie007 Sto usando le formule. Premerò F9 dopo un sacco di lavoro e devo aspettare.
Eliyahu,

Avresti dovuto fare i tuoi calcoli in un altro modo. Quello che vuoi non è possibile se tutto ciò che stai facendo è dire a Excel di eseguire i calcoli sulla cartella di lavoro aperta
Ramhound

Risposte:


21

OK, qualcosa da provare (le istruzioni presuppongono Excel 2007 o versioni successive):

  • Apri la tua cartella di lavoro.
  • Salvalo come SS ( .XLSM) con attivazione macro .
  • Premi Alt-F11 per aprire la finestra di codifica VBA.
  • Fai clic con il pulsante destro del mouse su VBAProject ( yourbook.xlsm) e seleziona Inserisci → Modulo.
  • Apri il "Modulo1" appena creato.
  • Nel modulo incolla questo frammento:

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

    Questo farà sì che il tasto F9 venga riassegnato ogni volta che si apre SS. Quando premi F9 verrà eseguito F9Handlerinvece del solito calcolo.

  • Nel modulo, incolla questo frammento:

    Sub F9Handler()
        Application.Calculate
        Beep
    End Sub
    

    Questo è ciò che verrà eseguito quando premi F9. La prima riga esegue il Application.Calculate(che è ciò che F9 esegue normalmente), quindi Bip.

  • Salva tutto.

  • Chiudi Excel.
  • (Ri) Apri XLSM che hai creato.
  • Profitto. :)

Nota: probabilmente dovrai abilitare le macro e / o rendere il documento un documento "attendibile" per garantire che le macro vengano eseguite come previsto.

Ulteriori informazioni:


5

Proprio come gli altri menzionati, usa il beepcomando in Visual Basic (VB):

Function beepNow()
Beep 
End Function

Per ottenere la codifica VB, è necessario disporre della Developer tabdisponibilità (vedere: Visualizzazione della scheda Sviluppatore )

Quindi, quando si verifica un cambiamento in una cella o condizione, verrà emesso un segnale acustico. Macro di esempio per chiamare il codice VBS sopra:=IF(C2<>C3,beepNow(),"")


2
Basta essere consapevoli del fatto che se attualmente non si utilizza alcun UDF VBA, la loro introduzione può portare a un notevole peggioramento delle prestazioni (poiché, a differenza delle normali funzioni, vengono eseguite solo sul thread principale). Non dovrebbe essere un problema con un singolo segnale acustico, ma se inizi a spruzzarlo ovunque avrai problemi.
sapi

1
Purtroppo questa funzione utilizza l'altoparlante del PC, non la scheda audio e gli altoparlanti, ma l'altoparlante interno. Cordiali saluti - In molte aziende l'altoparlante del PC è stato rimosso o disattivato in modo da non sentire nulla.
Raddevus,

1

In alternativa, posizionando il modulo in SS, è possibile inserirlo nel proprio Personal.xlsb. Ciò consentirebbe di avere il "segnale acustico" disponibile per tutti gli SMS. Per eseguirlo, modifica la barra di accesso rapido o inserisci un pulsante / forma per fare clic nel tuo SS e assegnare la macro ad esso.


Benvenuto in Super User. Questo sembra essere un commento sulle altre risposte piuttosto che una soluzione sostanzialmente diversa, a cui sono destinati i post delle risposte. Con un po 'più di rappresentante, sarai in grado di pubblicare commenti.
fixer1234

0

La risposta postata da @ Ƭᴇcʜιᴇ007 è eccellente con un'eccezione che altri hanno commentato: il Beepmetodo si basa sull'altoparlante di bordo (e talvolta disabilitato) all'interno del computer e non utilizza gli altoparlanti, quindi potresti non sentire nulla.

Sto postando una soluzione alternativa basata su quella risposta. Se fossero stati coinvolti meno contenuti, avrei invece pubblicato un commento.

Ecco cosa uso per riprodurre un suono con VBA su Windows. Utilizza i normali altoparlanti del computer anziché quelli integrati e spesso disabilitati a cui si accede con il Beepmetodo.

Inizia con la risposta di @ Ƭᴇcʜιᴇ007. Passa Beepa questo:

PlaySound sound_Up

È possibile modificare l'audio passando sound_Upa un altro elemento dall'enumerazione (elenco) SoundType nel codice seguente come sound_Completeo 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.