Condividi:        

Leggere con voce il valore o contenuto della cella

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Leggere con voce il valore o contenuto della cella

Postdi zanatta77 » 11/12/12 17:30

Salve a tutti
Mi chiedevo, è possibile in un foglio di excel far leggere il contenuto di una o più celle (sia esso numero o testo) ?
Mi spiego meglio per fare capire il mio intento, scrivo in una cella carico1, nel momento che avviene questo oppure altro parte una voce audio del tipo; "carico1" oppure personalizzata del tipo; "la sua richiesta è soddisfatta prema cella lampeggiante"
Tutto questo per non fare file audio da associare ad ogni inserimento in cella del tipo; se uguale a, se diverso da ecc ecc
Quante strade ci sono per ottenere quanto richiesto ??
Grazie
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Sponsor
 

Re: Leggere con voce il valore o contenuto della cella

Postdi Anthony47 » 11/12/12 18:58

Trovi le informazioni sul text-to-speech in questo articolo Microsoft:
http://office.microsoft.com/en-us/excel ... c307831251
Converting text to speech in Excel

Temo che sia supportato solo l' Inglese, ma non ho provato.

Inserisci per favore la descrizione del tuo ambiente di lavoro, vedi viewtopic.php?f=26&t=97449

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Leggere con voce il valore o contenuto della cella

Postdi zanatta77 » 12/12/12 21:54

Grazie
Ho letto le info e provando il comando di speak su un foglio, sono riuscito a modificare la mia macro in modo che leggesse l'interno di una cella se il contenuto fosse quello dichiarato, diversamente rimane in silenzio.
Vorrei se possibile aggiungere del testo alla lettura di una cella, come posso fare ???
Esempio; come si può vedere dallo script che riporto sotto , se nella "C5" viene scritto "carico1" allora nella cella "G2" compare scritto "Documento visionabile" e avviene la sintesi vocale della cella "C5" cliccando da una cella all'altra, a questo punto vorrei aggiungere altro testo da leggere sempre via comando Speak insieme alla cella "C5" tipo: "cario1 Materiali acquistati al commercio totale 20000 euro in data ecc ecc" (ovviamente questo deve avvenire solo se nella "C5" viene scritto "carico1")
In attesa di risposte vi ringrazio


Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 If Cells(5, 3) = "carico1" Then
    Range("G2") = "Documento visionabile"
    Range("C5").Speak
ElseIf Cells(5, 3) = "carico2" Then
    Range("G2") = "Documento visionabile"
    Range("C5").Speak
Else
    Hyperlinks.Delete
    Range("G2") = "DOCUMENTO NON ELABORATO"
End If
End Sub


Ambiente di lavoro WINDOWS 7 + Microsoft Office 2010
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Leggere con voce il valore o contenuto della cella

Postdi Anthony47 » 13/12/12 02:57

Invece di usare Range("C5").Speak prova a usare Application.Speech.Speak "Testo a piacere " & Range("C5")

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Leggere con voce il valore o contenuto della cella

Postdi zanatta77 » 13/12/12 09:17

Esattamente quello che cercavo, adesso va benissimo per l'uso che devo farne.
Facendo delle prove, e sentendo l'assistente vocale che descrive il documento mi sembra un pò come dire "palloso" sentirlo ogni volta che cambio cella (Sub Worksheet_SelectionChange) soprattutto se la breve descrizione del documento vocale è abbastanza lunga, è possibile modificarlo in modo che legga una sola volta in automatico senza cambiare celle, semplicemente scrivendo carico1 in cella "C5" mi parte la sintesi vocale per una sola volta.

Provo a scrivere lo script che sicuramente andrà rivisto ma soprattuttto non saprei se metterlo dentro un modulo nuovo oppure sempre su Worksheet ma non ovviamente su SelectionChange.

Codice: Seleziona tutto
If Cells(5, 3) = "carico1" Then
   Application.Speech.Speak "Acquisto al commercio fattura milletrecentoventuno  " & Range("C5")

ElseIf Cells(5, 3) = "carico2" Then
    Application.Speech.Speak "Donazione a titolo gratuito non oneroso da ONLUS " & Range("C5")
End If
End Sub
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Leggere con voce il valore o contenuto della cella

Postdi zanatta77 » 13/12/12 09:39

Credo di esserci riuscito, dopo aver come dire smanettato un pò (non essendo preparato in tal senso)
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)

If Cells(5, 3) = "carico1" Then
   Application.Speech.Speak "Acquisto al commercio fattura milletrecentoventuno  " & Range("C5")

ElseIf Cells(5, 3) = "carico2" Then
    Application.Speech.Speak "Donazione a titolo gratuito non oneroso da ONLUS " & Range("C5")
End If
End Sub
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Leggere con voce il valore o contenuto della cella

Postdi zanatta77 » 13/12/12 17:17

Come al solito c'è un problema se scrivo entrambi gli script su Worksheet alla fine mi ripete sempre ad ogni cambio cella, mentre io vorei che lo facesse una sola volta quando scrivo "carico1" se lascio solo Worksheet_change lo fa ma se aggiungo anche il Worksheet_selectionchange mi ripete sempre ad ogni cambio cella
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(5, 3) = "carico1" Then
    Application.Speech.Speak "Acquisto al commercio fattura duecento " & Range("C5")
End If
End Sub

Private Sub Worksheet_selectionChange(ByVal Target As Range)
If Cells(5, 3) = "carico1" Then
    Range("G2") = "Documento visionabile"
    Foglio1.Hyperlinks.Add Anchor:=Range("G2"), Address:="C:/Servito/1  di carico.pdf"
ElseIf Cells(5, 3) = "carico2" Then
    Range("G2") = "Documento visionabile"
    Range("C5").Speak
    Foglio1.Hyperlinks.Add Anchor:=Range("G2"), Address:="C:/Servito/2 CM  di carico.pdf"
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Leggere con voce il valore o contenuto della cella

Postdi Anthony47 » 14/12/12 00:04

Mi pare che vuoi attivare il processo di Text-to-Speech quando "scrivi in C5 il valore Carico1".
Per questo userai solo la Worksheet_Change cosi' articolata:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If target.address <> $C$5 or target.value <> "Carico1" then exit sub
Application.Speech.Speak "Acquisto al commercio fattura duecento " & Range("C5")
End sub

Pero'in questo modo "pronuncerai" sempre la stessa frase, e non ne capisco il senso.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Leggere con voce il valore o contenuto della cella

Postdi zanatta77 » 14/12/12 17:47

Praticamente vorrei fare due cose nello stesso tempo.
Esattamente vorrei; scrivere sempre e solamente nella cella "C5" del foglio numero1 dal carico1 al carico234 e per ogni carico inserito mi deve aprire un collegamento ipertestuale, dove si trova il file .Pdf contenente l'intero documento e in più vorrei che mi eseguisse una sintesi vocale inserita manualmente con testo per ogni documento.
Per rendere maggiormente comprensibile cosa vorrei fare faccio un esempio pratico, scrivo "carico1" in cells"C5" e mi deve creare un collegamento ipertestuale sulla cells "G2" dove facendo click con il mouse mi si apre il file .Pdf contenuto in un CD dati( che sarebbe praticamente il documento completo "carico1") nello stesso tempo mi deve eseguire una sintesi vocale (che non è altro che una descrizione breve del documento con i punti salienti tipo date,prezzi,verbali,fatture ecc ecc) tutto questo per far in modo che durante una eventuale ricerca di documenti prima di aprire il documento con il click su "G2" ci rendiamo subito conto tramite la sintesi vocale se è quello che cerchiamo oppure no.
Meglio di così non saprei come spiegarlo, lo script per la ricerca dei .Pdf è funzionante e testato ma vorrei implementarlo con la sintesi vocale, coa devo inserire e come ???
Attualmente il file funzionante della ricerca documenti e questo
Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Cellss(5, 3) = "carico1" Then
    Range("G2") = "Documento visionabile"
    Foglio1.Hyperlinks.Add Anchor:=Range("G2"), Address:="C:/Servito/1 CM 1 2 3 di carico.pdf"
ElseIf Cells(5, 3) = "carico22" Then
    Range("G2") = "Documento visionabile"
    Foglio1.Hyperlinks.Add Anchor:=Range("G2"), Address:="C:/Servito/22 CM 1 2 3 di carico.pdf"
ElseIf Cells(5, 3) = "carico222" Then
    Range("G2") = "Documento visionabile"
    Foglio1.Hyperlinks.Add Anchor:=Range("G2"), Address:="C:/Servito/222 CM 1 2 3 di carico.pdf"
Else
    Hyperlinks.Delete
    Range("G2") = "DOCUMENTO NON ELABORATO"
End If
End Sub
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Leggere con voce il valore o contenuto della cella

Postdi Anthony47 » 15/12/12 19:47

L' evento giusto che devi usare e' Worksheet_Change, seguito dal controllo che la modifica sia evvenuta nella cella C5 (If target.address <> $C$5 Then Exit Sub); se usi Worksheet_SelectionChange la macro partira' tutte le volte che muovi la selezione.

Per il resto mi non ho capito che cosa ora funziona e che cosa no; forse devi separare le prestazioni che vuoi realizzare, passando alla successiva quando la precedente e' funzionante.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Leggere con voce il valore o contenuto della cella

Postdi zanatta77 » 16/12/12 19:26

Ciao se uso il Worksheet_Change mi ripete sempre la sintesi vocale in continuazione :-? finche non mi da un errore di run time "50290"
Se inserisco solo questo mi va bene :)
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(5, 3) = "carico1" Then
   Application.Speech.Speak "Acquisto al commercio fattura milletrecentoventuno  " & Range("C5")
End If
End Sub


Ma visto che il lavoro che deve farmi non è solo la sintesi vocale, ma c'è anche una scritta in Range("G2") = "Documento visionabile" qualora risultasse inserito il documento, e soprattutto deve farmi il collegamento ipertestuale al documento Foglio1.Hyperlinks.Add Anchor:=Range("G2"), Address:="C:\Users ecc ecc, quando vado ad inserire il tutto in questo modo
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
If Cells(5, 3) = "carico10" Then
   Application.Speech.Speak "Acquisto" & Range("C5")
    Range("G2") = "Documento visionabile"
    Foglio1.Hyperlinks.Add Anchor:=Range("G2"), Address:="C:\10 CM 1 2 3 di carico.pdf"

ElseIf Cells(5, 3) = "carico1" Then
    Application.Speech.Speak "Donazione a titolo gratuito non oneroso da ONLUS " & Range("C5")
    Range("G2") = "Documento visionabile"
    Foglio1.Hyperlinks.Add Anchor:=Range("G2"), Address:="C:\1 CM 1 2 3 di carico.pdf"
    Else
    Hyperlinks.Delete
    Range("G2") = "DOCUMENTO NON ELABORATO"
End If
End Sub
Mi viene fuori il famoso errore "50290"
Questo perchè se vado nella cells "C5" e scrivo "carico1" ad esempio inizia in continuazione a ripetere la sintesi vocale "Donazione a titolo gratuito non oneroso da ONLUS"
Io vorrei che la sintesi vocale la facesse solo e solamente una volta per ogni carico (ricordo che in totale nella mia macro ci sono circa 400 carichi) quando in cells "C5" scriviamo "carico1" oppure "carico22" - "carico234" ecc ecc deve eseguire la sintesi vocale associata una sola volta. :cry:
Per ogni documeto io mettero una sintesi vocale diversa chiaramente...., quindi la sintesi vocale è sempre diversa per tutti e 400 documenti,(ovviamente anche i collegamenti ipertestuali saranno diversi per tutti e 400 doc.) quind se scrivo "carico33" ad esempio dirà "trapianto in conformita diretta" se metto "carico345" dirà "soluzione di fosforo a base due" ecc ecc
Meglio di così non so proprio come farmi capire ...perdonatemi se potete :D
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Leggere con voce il valore o contenuto della cella

Postdi ricky53 » 16/12/12 20:58

Ciao,
prova con
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False ' <<====== Aggiunta
On Error GoTo Fine ' <<====== Aggiunta
If Cells(5, 3) = "carico10" Then
....
....
....
End If
Fine:  ' <<====== Aggiunta
Application.EnableEvents = True ' <<====== Aggiunta
End Sub


Attenzione se la macro va in errore
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Leggere con voce il valore o contenuto della cella

Postdi zanatta77 » 16/12/12 22:35

Grazie mille ricky53
Finalmente funziona tutto(collegamento ipertestuale+scritta in "G2"+sintesi vocale unica esecuzione) senza errori ecco alla fine come si presenta la macro, ovviamente inserisco solo 2 documenti ma in realtà ci sono 400 doc.
Grazie ancora a tutti e Felice NATALE.
Sempre che il mondo non finisca :eeh: :eeh:

Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
On Error GoTo Fine
If Cells(5, 3) = "carico10" Then
   Application.Speech.Speak "Acquisto" & Range("C5")
    Range("G2") = "Documento visionabile"
    Foglio1.Hyperlinks.Add Anchor:=Range("G2"), Address:="C:\10 CM 1 2 3 di carico.pdf"

ElseIf Cells(5, 3) = "carico1" Then
    Application.Speech.Speak "Donazione a titolo gratuito non oneroso da ONLUS " & Range("C5")
    Range("G2") = "Documento visionabile"
    Foglio1.Hyperlinks.Add Anchor:=Range("G2"), Address:="C:\1 CM 1 2 3 di carico.pdf"
    Else
    Hyperlinks.Delete
    Range("G2") = "DOCUMENTO NON ELABORATO"
End If
Fine: 
Application.EnableEvents = True
End Sub
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Leggere con voce il valore o contenuto della cella

Postdi zanatta77 » 09/02/13 18:57

Ciao a tutti !!
Il file funziona
Unica miglioria che vorrei apportare è questa: il file excel dove si trova la macro realizzata in precedenza inizia la sintesi vocale anche se il "cd" non è presente nel lettore.
Esempio; se nella cella (5, 3) scrivo "prova1" anche se il cd non è inserito e l'estrazione dei .rar non è effettuata mi parte la sintesi vocale, e questo vale per tutti i documenti che nel mio caso sono 400.
Come posso fare :?: :?: Per far in modo :idea: che la sintesi vocale sia riprodotta solo se il cd "d'interesse" è presente nel lettore.
Avevo pensato :idea: come soluzione anche questo; di far comparire un msgbox che avvisi in modo continuo l'invito dell'inserimento cd sino a termine dell'estrazione, oppure una Application.Speech.Speak che richieda l'inserimento del "CD" dati per proseguire
Secondo voi come posso fare, e quale soluzione adoperare per raggiungere il mio fine, nel modo migliore.
Vi ringrazio :) in anticipo
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Leggere con voce il valore o contenuto della cella

Postdi zanatta77 » 11/02/13 21:01

Qualcuno che mi auti
Grazie !! :cry: :cry:
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Leggere con voce il valore o contenuto della cella

Postdi Anthony47 » 12/02/13 00:06

Nell' ipotesi che tu sappia come si chiama il drive cd, potresti usare una struttura come questa per decodificare se il tuo CD e' inserito:
Codice: Seleziona tutto
On Error Resume Next
Forse=""
Forse = fso.GetFolder("E:\ ")
On Error GoTo 0
La variabile Forse conterra' una stringa nulla ("") se non pronto, oppure "E:\" se e' pronto; poi su questa situazione decidi che cosa fare (terminare, msgbox informativo, loop di attesa pericoloso, etc)

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Leggere con voce il valore o contenuto della cella

Postdi zanatta77 » 12/02/13 20:39

la mia unità DVD RW è (D:)
Quindi su open Work devo mettere il tutto oppure Private Sub Worksheet_Change ??
Quello che vorrei che facesse è semplicemente questo, se in "D" non trova all'interno dell'unità DVD RW un "cd" con al suo interno una cartella nominata "Documenti anno 2000"
vada in play continuo un Application.Speech.Speak del tipo "Attenzione se intende proseguire deve necessariamente munirsi del cd dati di riferimento" , se al contrario rileva il "cd" d'interesse funzionasse il tutto esattamente come funziona ora.
va bene il codice seguente;
Codice: Seleziona tutto
Private Sub Workbook_Open()
On Error Resume Next
Forse=Application.Speech.Speak "Attenzione se intende proseguire deve necessariamente munirsi del cd dati di riferimento""
Forse = fso.GetFolder("D:\Documenti anno 2000")
On Error GoTo 0
End Sub
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12

Re: Leggere con voce il valore o contenuto della cella

Postdi Anthony47 » 12/02/13 22:28

L' evento Workbook_Open capita una sola volta quando apri il file; Worksheet_Change capitera' tutte le volte che qualcuno /qualcosa (una macro, ad esempio) modifica una cella del foglio; quale e' l' evento piu' giusto da usare dipende dall' applicazione e dal tipo di utente che la subira'.

Comunque nella macro proposta ("va bene il codice seguente;" io non la interpreto come una affermazione ma come una domanda) hai usato male il mio codice:
-prima devi sondare se il cd e' inserito, POI potrai sondare il contenuto della variabile Forse e decidere che cosa farci.
Ad esempio
Codice: Seleziona tutto
Private Sub Workbook_Open()
Set fso = CreateObject("scripting.filesystemobject")   'Questa l' avevo dimenticata :-))
On Error Resume Next
Forse = ""
Forse = fso.GetFolder("D:\Documenti anno 2000")
On Error GoTo 0
If Forse = "" Then
    MsgBox ("Non puoi lavorare su questo file senza il cd dal titolo Questo e quello" & _
        vbCrLf & "Procurarsi il Cd, inserirlo nel drive e riaprire il file")
    ThisWorkbook.Close savechanges:=False
End If
End Sub
In questo modo se all' apertura del file il cd non e' in posizione l' utente ricevera' il messaggio e il file si chiudera'.

Ma questa applicazione tu la vuoi inviare ad altri utenti? Hai fatto un piccolo test per verificare se il text-to-speech e' una prestazione disponibile come standard sui pc? Poi se lo distribuisci non sarai piu' sicuro che il drive sia D, quindi dobbiamo inserire il test di quale e' la sigla del drive (si puo' fare, sperando che quanto valido per Xp sia ancora valido per Win7; del Mac meglio non parlare).
Insomma, e' possibile che tu abbia trascurato qualche particolare?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Leggere con voce il valore o contenuto della cella

Postdi zanatta77 » 13/02/13 17:33

Ciao
Effettivamente per l'uso che devo farne è meglio usarlo una sola volta in workbook open.
Ho provato il tutto e non mi andava poi facendo delle prove ho visto che cambiado da getfolder a getfile il tutto funzionava.
Diciamo che il file girera su pochi pc e in tutti ci siamo assicurati che D: sia il drive di lettura cd RW, abbiamo installato la voce italiana di windows ufficiale, settato la velocita di lettura uguale per tutti, problemi al momento non si presentano.
Grazie mille del supporto ciao00000
Windows 8
Office 2010
Avatar utente
zanatta77
Utente Senior
 
Post: 127
Iscritto il: 01/12/12 16:12


Torna a Applicazioni Office Windows


Topic correlati a "Leggere con voce il valore o contenuto della cella":

BTp Valore
Autore: MarioLombardi
Forum: Forum off-topic
Risposte: 2

Chi c’è in linea

Visitano il forum: Marius44 e 43 ospiti