› Sviluppare funzionalita su Microsoft Office con VBA › Errore "loop senza do", ma do c'è ….
-
AutoreArticoli
-
Ciao a tutti. Rieccomi qui con un altro problema strano che mi sta capitando.
Spero non sia un abbaglio banale come l'ultima volta.
Questa volta sto programmando un giochino per i miei nipotini. Ho un problema con il countdown, nel senso che nel codice ho un ciclo do while ... loop, ma mi dà errore " loop senza do".
Allego il file e spero nel vostro aiuto.
Ciao e grazie fin da ora
Allegati:
You must be logged in to view attached files.If CLESSIDRA Mod 2 = 0 Then With Range("G3") .Interior.Color = vbYellow .Font.Color = vbRed End With End If <<<<<<<<<<<<<<<<<< mancaSub crono() Dim minuti, secondi As Integer Dim tempo, inizio, k, CLESSIDRA As Integer Dim risposta As StringLe variabili
"minuti", "tempo", "inizio", "k"
non sono correttamente tipizzate a Integer,
qualcuno sa perche'?
<code class=" language-c"> If CLESSIDRA Mod 2 = 0 Then With Range("G3") .Interior.Color = vbYellow .Font.Color = vbRed End With End If <<<<<<<<<<<<<<<<<< manca
Lo sapevo che avrei fatto una svista banale ...... grazie raffaele
<code class=" language-c">Sub crono() Dim minuti, secondi As Integer Dim tempo, inizio, k, CLESSIDRA As Integer Dim risposta As String
Forse perchè devono essere inizializzate come double?
Manca Un
End If
prima del Loop
Ho visto solo adesso la correzione di Raffaele Scusate
Option Explicit Sub crono() Dim minuti, secondi As Integer Dim tempo, inizio, k, CLESSIDRA As Integer Dim risposta As String tempo = InputBox("IMPOSTARE IL TEMPO DI GIOCO?") risposta = MsgBox("HAI IMPOSTATO A < " & tempo & " > MINUTI IL TEMPO" & Chr(13) & "CONFERMI?", vbOKCancel) If risposta = vbCancel Then Exit Sub risposta = MsgBox("PRONTI .... VIA !!!!", vbYesNo) If risposta = vbNo Then Exit Sub tempo = tempo * 60 minuti = Int(tempo / 60) secondi = tempo - minuti * 60 inizio = Timer Do While Timer - inizio <= tempo k = Timer - inizio CLESSIDRA = tempo - k If CLESSIDRA <= 30 Then With Range("G3") .Interior.Color = vbYellow .Font.Color = vbRed End With End If If CLESSIDRA <= 10 Then If CLESSIDRA Mod 2 = 0 Then With Range("G3") .Interior.Color = vbYellow .Font.Color = vbRed End With Else With Range("G3") .Interior.Color = vbRed .Font.Color = vbYellow End With End If End If minuti = Int(CLESSIDRA / 60) secondi = CLESSIDRA - minuti * 60 Range("G3").Value = minuti & ":" & secondi DoEvents Loop With Range("G4") .Value = "STOP" .Interior.Color = vbBlue .Font.Color = vbWhite End With End Sub>>> Dim tempo, inizio, k, CLESSIDRA As Integer
@vecchio frac >>>>>>>>>>qualcuno sa perche'?
Scrivere l'ultima "As Integer" non significa che le prime tre siano "Integer"
Ps. Integer inoltre si intende che il valore non superi circa 32.000 e rotti"Dim tempo As Integer, inizio As Integer, k As Integer, CLESSIDRA As Integer"
>>> Dim tempo, inizio, k, CLESSIDRA As Integer @vecchio frac >>>>>>>>>>qualcuno sa perche'?
Scrivere l'ultima "As Integer" non significa che le prime tre siano "Integer"
Ps. Integer inoltre si intende che il valore non superi circa 32.000 e rotti
Allego un file di test per il timer realizzato con le API che permette un'interazione vera col foglio senza errori.
Dovrebbe funzionare su tutte le versioni di Excel.
Allegati:
You must be logged in to view attached files.Carino l'avanzamento colorato.
Solo una volta andato in Debug (si è chiuso e riaperto come xlsb), riprovato e riprovato tutto regolare.>>>If VBA7 And Win64 Then
Perché la fase 32bit è in rosso?>>>Public timerID As LongPtr
Mi spieghi cosè " LongPtr "..........................capito causa 64bitGrazie ragazzi per l'aiuto. Il mio timer funziona tutto ok.
Vorrei ancora un altro aiuto perchè per questa cosa che vorrei fare, non so proprio da che parte iniziare. Ho provato a guardare un pò dappertutto ma non ho cavato alcunchè.
Vorrei inserire un file (gong.mp3) audio a tempo scaduto.
Se chiedo troppo non importa, ne farò a meno.
Ciao
1) Non saprei con MP3 solo con i WAV
2) Non capisco perché hai messo il codice in "QUESTA CARTELLA DI LAVORO" ???Prima di End Sub scrivi…. Call Suona
Adesso aggiungi un MODULO1 e scrivici dentro
`'Presumendo che hai W10 oppure W11 Option Explicit Public Declare PtrSafe Function sndPlaySound32 _ Lib "winmm.dll" _ Alias "sndPlaySoundA" ( _ ByVal lpszSoundName As String, _ ByVal uFlags As LongLong) As LongLong Sub Suona() sndPlaySound32 "C:\Windows\Media\Alarm08.wav", 0& 'da modificare End Sub`Vorrei inserire un file (gong.mp3) audio a tempo scaduto.
Guarda anche qui se può interessarti:
Perché la fase 32bit è in rosso?
Perchè per un sistema a 64 bit ci vuole la direttiva PtrSafe altrimenti le API non vengono eseguite e il compilatore segnala errore.
Grazie ragazzi per l'aiuto. Il mio timer funziona tutto ok.
Vorrei ancora un altro aiuto perchè per questa cosa che vorrei fare, non so proprio da che parte iniziare. Ho provato a guardare un pò dappertutto ma non ho cavato alcunchè.
Vorrei inserire un file (gong.mp3) audio a tempo scaduto.
Se chiedo troppo non importa, ne farò a meno.
Ciao
Non ho capito cosa significa a tempo scaduto
Comunque per aprie File MP3 la soluzione migliore è convertire OnLine il File mp3 in Wav lo puoi fare gratuitamente
Oppure inserisci il lettore multimediale che te li apre anche in formato mp3
'Presumendo che hai W10 oppure W11Option ExplicitPublic Declare PtrSafe Function sndPlaySound32 _ Lib "winmm.dll" _ Alias "sndPlaySoundA" ( _ ByVal lpszSoundName As String, _ ByVal uFlags As LongLong) As LongLong Sub Suona()sndPlaySound32 "C:\Windows\Media\Alarm08.wav", 0& 'da modificareEnd Sub`
Grazie infinite. Funziona ok. Ho scaricato un gong in mp3, l'ho convertito in wav e va tutto ok.
grazie a te e a tutti. Ciao
Non ho capito cosa significa a tempo scaduto
Guarda il codice: dopo il Loop, che e' impostato sui secondi definiti dall'utente.
Guarda il codice: dopo il Loop, che e' impostato sui secondi definiti dall'utente.
Ha era quello che intendeva dire quando finiva il tempo adesso si che ho capito , meglio tardi che mai !
-
AutoreArticoli
