Forum di Excel e VBA, per condividere esperienze e risolvere problemi su: Excel, Word, Access, Power Point, Microsoft Office, macro, Visual Basic e Visual Studio.
Domanda su funzione RND di Attilio data: 19/10/2012 10:22:26
Chiedo scusa a quelli che avevano apprezzato il mio sfondo, di aver postato gli sfondi e non quello che era piaciuto vi inserisco anche quello.
Salve a tutti, una domanda....si può fare su comando di un pulsante per una funzione RND da 0 a 40 con variabile tempizzata..........mi spiego, in una cella, supponiamo cella b9, dove viene inserita la variabile in secondi (es. 90 ) e premendo il pulsante genera numero deve girare per 90 secondi prima di tirar fuori il numero?
di Vecchio Frac data: 19/10/2012 11:16:54
Grazie per lo sfondo :)
Naturalmente si può fare, io userei
Application.Wait Now + TimeValue("00:01:30")
per fermare il programma per un minuto e mezzo, ma ricordati di fornire un feedback all'utente che altrimenti si vede congelato lo schermo per tutto quel tempo... ed è un'enormità, credimi, l'utente medio dopo cinque-sette secondi di apparente inattività preme già Ctrl-Alt-Canc ^_^
Il feedback dovrebbe essere costituito dalla clessidra e da una progress bar (anche la status bar va bene, ma va rinfrescata periodicamente altrimenti sembra tutto morto). La progress bar può essere costruita con una semplice form oppure con una piccola tecnica (che avevo letto da qualche parte) direttamente in una cella del foglio. Sempre però con l'uso di Application.Wait oppure, meglio Application.OnTime che dopo tot secondi esegue la procedura specificata e quindi rinfresca la progress bar.
Se il tuo problema è far fare un ciclo lunghissimo di estrazioni per generare un numero certamente causale, non è questa la strada... questo è solo un trucco per impressionare l'utente e dargli l'illusione che c'è stato un mescolamento :)
Infatti ogni numero ha ad ogni estrazione la stessa probabilità di uscire, sia dopo una che dopo centomila estrazioni. Se il problema è generare un numero davvero casuale bisogna affidarsi ad altri schemi (nemmeno Rnd assicura la vera casualità del numero estratto).
di Attilio data: 19/10/2012 12:37:59
adesso mi ha detto una cosa che mi ingrufa, cosa vuoi dire con la funzione RND è solo una cosa volatile (se ho capito bene), e che tipo di processo si deve adottare per un reale random?
di HarryBosch data: 19/10/2012 14:30:28
La funzione "rnd" fa un "brutto" scherzetto, che con la casualità centra forse solo la prima volta...
Fai un test con il codice sotto. Avvia la macro più volte e salva i valori della colonna A nelle colonne adiacenti. Poi chiudi il foglio, ovviamente salvando. Quando lo riapri riesegui la macro più volte e vedi quali serie di numeri ti genera...
Esattamente le stesse delle precedenti!
E tutte le volte che riapri il foglio ripartirà sempre dalla stessa serie.
Ovviamente si può ovviare
Sub crea_matrice()
Dim i As Integer
For i = 1 To 10
Cells(i, 1) = Int(Rnd() * 100)
Next
End Sub
di Vecchio Frac data: 19/10/2012 14:58:32
cit. " una cosa che mi ingrufa "
---> LOL, mai sentito ^_^
Allego un esempietto per simulare in tre modi diversi una semplicissima e artigianale progress bar.
Sui ragionamenti relativi a numeri casuali, si può dire molto, forse per i tuoi scopi basta la funzione Rnd, ma inizializzala sempre con Randomize Timer all'inizio della sub che la utilizza (altrimenti si generano i problemi che Vanni sta suggerendo).
di Attilio (utente non iscritto) data: 19/10/2012 19:09:51
Ringrazio tutti e 2 per l'intervento, ma nel file scaricato, quando abilito l'esecuzione di caricamento generale delle macro, mi dice: IMPOSSIBILE CARICARE UNO O PIU' OGGETTI PERCHE' NON DISPONIBILI IN QUESTO COMPUTER, cosa devo fare per avere questi oggetti mancanti?
P.S. Ingrufa, voce del verbo ingrufare, ahahahaha...........in dialetto abruzzese, traduce in una sola parola l'interessamento a questa o quella soluzione.
di Vecchio Frac data: 19/10/2012 19:15:34
Nella userform c'è un semplice controllo ProgressBar, forse non è compatibile quello che ho messo io con versioni più nuove di Excel. Vai nell'editor di codice, apri l'userform, togli il controllo che dà problemi e inserisci la progress bar aggiornata mediante la toolbox. Funzionerà ugualmente perchè non c'è alcun codice magico o maligno :)
di Attilio (utente non iscritto) data: 19/10/2012 22:04:56
Niente non riesco a farlo funzionare, mi da errore nel range h2 proprio all'inizio
di Vecchio Frac data: 20/10/2012 09:28:39
Ma sei riuscito ad aggiungere all'userform il controllo "Microsoft StatusBar Control" ? è quello l'oggetto mancante...
Nella toolbox (dove c'è l'userform) clic col tasto destro, poi "Controlli agiguntivi", poi scegli il "Microsoft Statusbar control", posizionalo nell'userform e riavvia la macro.
di Vecchio Frac data: 20/10/2012 09:31:21
Nel file "statusbar control.zip" allego un'immagine di quello che ho scritto poco fa.
di Attilio (utente non iscritto) data: 20/10/2012 13:52:45
Ok, fatto tutto a posto, grazie
di Vecchio Frac data: 20/10/2012 14:12:23
Ah sì? funziona?
e quale soluzione adotterai per risolvere il problema iniziale?
cit. " in una cella, supponiamo cella b9, dove viene inserita la variabile in secondi (es. 90 ) e premendo il pulsante genera numero deve girare per 90 secondi prima di tirar fuori il numero"
di Attilio (utente non iscritto) data: 20/10/2012 16:37:17
si proprio così, ma a dire il vero, mi sono spinto oltre e tra un pò emetterò ancora richiesta di aiuto, quindi ancora dialogo aperto, aprirò nuova domada, ciao a risentirci.