temo che devi scegliere tra due opzioni:
o fai partire media player esterno dandogli come suono uno integrato nel foglio
o integri media player nel tuo foglio e fai partire un suono da file esterno.
Il realta' la seconda opzione e' prestazionalmente simile a quella che usa oggi.
Comunque queste cose sono piu' prestazioni di sistema che del vba, e' un'area di cui non sono gran conoscitore.
Per quel che e' la mia esperienza:
- sndPlaySound32 puo' eseguire un file wav, che pero' deve esistere sul filesystem locale (disco locale, server di rete)
- invece con il metodo "Verb" si potrebbe eseguire un file audio integrato in excel (per integrarlo: Menu /Inserisci; gruppo Test, Oggetto; tab Crea da file)
La modalita' Verb si appoggia su WindowsMediaPlayer, che ha la tendenza di portarsi in primo piano; con i sistemi operativi di oggi e' abbastanza duro (ma non impossibile) forzarlo in secondo piano o minimizzarlo.
Un esempio lo si trova nel mio "gadget natalizio 2016", vedi
viewtopic.php?f=26&t=107965&p=633056&hilit=buone+feste#p633056Con sndPlaySound32 si potrebbe o usare un file audio distribuito in un pacchetto che comprende anche il file Excel, da installare sul pc degli utenti.
Oppure installare il file audio su un web server e poi farlo scaricare via macro sul pc utente; ovviamente richiede che il pc utente sia collegato a internet.
Se vuoi usare il metodo dell'oggetto integrato in Excel, la parte di codice che ti servira' potrebbe essere
- Codice: Seleziona tutto
Sheets("QualeFoglio").Shapes("QualeOggetto").Select '"QualeFoglio" deve essere gia' selezionato
Selection.Verb Verb:=xlPrimary
(Vedi Sub builtree in Modulo3 nel gadget natalizio)
Se vuoi invece usare sndPlaySound32 con un file da scaricare da Internet, ti servira' una funzione per scaricare il file; corrisponde al seguente codice:
- Codice: Seleziona tutto
#If VBA7 Then
Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As LongPtr, ByVal szURL As String, ByVal _
szFileName As String, ByVal dwReserved As LongPtr, ByVal lpfnCB As LongPtr) As Long
Declare Function sndPlaySound32 Lib "winmm.dll" Alias "sndPlaySoundA" _
(ByVal lpszSoundName As String, ByVal uFlags As LongPtr) As Long
#Else
Declare Function URLDownloadToFile Lib "urlmon" Alias _
"URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal _
szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Declare Function sndPlaySound32 Lib "winmm.dll" Alias "sndPlaySoundA" _
(ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
#End If
Function GetWebFile(ByVal myURL, ByVal myPath As String) As Variant
'byAnthony, ritorna File Path & name OPPURE 0 se fail
Dim PathNName As String, URL As String
Dim mySplit, Resp As Long
mySplit = Split(myURL, "/")
PathNName = myPath & mySplit(UBound(mySplit))
Resp = URLDownloadToFile(0, myURL, PathNName, 0, 0)
If Resp = 0 Then
GetWebFile = PathNName
Exit Function
Else
GetWebFile = 0
End If
End Function
La funzione e' la GetWebFile, il resto del codice sono le dichiarazioni necessarie per le librerie contenenti sia il comando sndPlaySound32 (necessaria per la riproduzione) che URLDownloadToFile (necessaria per il download)
Ho visto che hai fatto le dichiarazioni per Excel 64bit, il codice proposto e' bivalente (sia 32 bit che 64); le dichiarazioni, a partire dalla riga #If VBA7 Then, devono stare rigorosamente in testa al modulo, prima di qualsiasi Function o Sub
Potrai poi sfruttare il tutto con un codice simile a questo:
- Codice: Seleziona tutto
Dim myFile
myFile = GetWebFile("http://www.astrofili.it/am/felizNav_8kbps.wav", Environ("Temp") & "\")
If myFile <> 0 Then
sndPlaySound32 myFile, 1 '0 = modo sincrono
Else
Beep 'impossibile scaricare file
End If
Questa scarica un file audio da
http://www.astrofili.it/am/felizNav_8kbps.wav e lo riproduce tramite sndPlaySound32.
Si noti che sndPlaySound32 puo' lavorare in modo sincrono o modo asincrono:
-col secondo parametro pari a 1 l'esecuzione della macro continua dopo aver avviato la riproduzione
-col parametro pari 0 la macro continuera' solo al completamento della riproduzione
Ciao