SpinButton e refresh



  • SpinButton e refresh
    di Hellboy (utente non iscritto) data: 04/11/2015 16:29:10

    Ciao ragazzi, rieccomi con un problemino.
    Ho scritto un po di codice con il VBA di Excel, ho inserito uno spinbutton e una textbox, usando lo spinbutton aumento o diminuisco un valore, aggiornando la tetxbox, quando invece entro in un ciclo, non riesco a far aggironare la textbox, mi piacerebbe che si vedessero i numeri aumentare o diminuire ... come faccio ? E' possibile ?
     
    If PosizioneXCrescente.Text <> "" Then
    countit = PosizioneXCrescente.Text
    If PosizioneXCrescente.Text > 0 Then ''SE il valore di X>=0 allora decresci fino a zero
       Do While countit > 0
          countit = countit - 1
          SpinButtonPerMovimentazionAsseX.Value = countit
       Loop
    ElseIf PosizioneXCrescente.Text < 0 Then
       Do While countit < 0
          countit = countit + 1
          SpinButtonPerMovimentazionAsseX.Value = countit
       Loop
    Else
     MsgBox "arrivati a 0"
    End If ''altrimenti SE il valore di X<0 allora cresci fino a zero
    SpinButtonPerMovimentazionAsseX.Value = countit
    PosizioneXCrescente.Text = countit
    End If
    



  • di alfrimpa data: 04/11/2015 16:35:51

    Ciao Hellboy

    Non entro nel merito del codice che hai postato ma mi sembra di averti già detto che una TextBox (a differenza di una ScrollBar) non ha la proprietà Change (ma solo Value) quindi può andare avanti (o indietro) solo per singoli step e non progressivamente.

    Sarei comunque lieto di essere smentito.

    Alfredo





  • di hellboy (utente non iscritto) data: 04/11/2015 16:56:34

    Si lo so, infatti non è quello il problema .....


    Il problema è che ho un contatore che va da X a 0, e vorrei che visualizzasse il suo risultato sulla casella di testo, come se fosse un timer o simile, ma quando vado ad eseguire il codice, Leggo 100 - poi è come se il PC andasse in FREZZE, e poi leggo 0, salta tutti i numeri intermedi.
    Posso risolvere in qualche modo ?
    Vorrei solo visualizzare i valori del contatore.
    Sembra banale, ma non riesco.



  • di tanimon data: 04/11/2015 21:29:12

    ciao,
    non vedendo un tuo file allegato,
    non so se ti può servire ma per testare il codice che scrivo,
    di solito lo eseguo a blocchi passo passo con F8, impostando dei punti di interruzione.

    Non sai come è facile trovare le castronate che scrivo.....
    e trovare la soluzione..... lol

    Ciao
    Frank



  • di alfrimpa data: 04/11/2015 22:06:19

    Ciao Hellboy

    Innanzitutto consentimi un caro saluto Frank.

    Solo per darti uno spunto/suggerimento.

    La macro che vedi sotto incrementa di una unità il valore della cella A1 secondo dopo secondo.

    La seconda macro (provata) fa la stessa cosa ma per una casella di testo messa su una userform.

    Non so se ti può essere utile ai tuoi fini.

    Alfredo 
     
    Sub prova()
    Dim i As Integer
    For i = 1 To 20
        Range("a1").Value = i
        Application.Wait (Now + TimeValue("0:00:01"))
    Next i
    End Sub
    
    Sub CommandButton1_Click()
    Dim i As Integer
    For i = 1 To 20
        Userform1.TextBox1.Value = i
        Application.Wait (Now + TimeValue("0:00:01"))
    Next i
    End Sub
    






  • di Hellboy (utente non iscritto) data: 05/11/2015 08:28:27

    Come vedi dal codice, dovrebbero essere uguali.
    Con il mio nulla, con il tuo invece, se mentre eseguo il ciclo rimango fermo con il mouse non vedo nulla, se invece, vado sotto nella barra di windows e clicco sulla pagina vba aperta, vedo che il valore della textbox associata allo SpiButton, cambia di valore.
    E' come se mancasse un refresh della casella o simile.
     
    codice hellboy
    For i = 1 To 20
        Userform1.TextBox1.Value = i
        Application.Wait (Now + TimeValue("0:00:01"))
    Next i
    
    Codice di alfrimpa
       Do While countit < 0
          countit = countit + 1
          SpinButtonPerMovimentazionAsseX.Value = countit
       Loop
    
    Come vedi anche io avevo pensato a questo ciclo.



  • di Hellboy (utente non iscritto) data: 05/11/2015 12:10:51

    Invece in questa stringa, cos'è sbagliato ?

    Dim AsseX_RitardoMovimentazione as double
    AsseX_RitardoMovimentazione=4

    Application.Wait Now + (TimeValue(Hour(Now()), Minute(Now()), AsseX_RitardoMovimentazione))


    Non ne vengo a capo.



  • di Hellboy (utente non iscritto) data: 05/11/2015 12:40:09

    vabbeh, niente, mi da problemi ho risolto con sleep.

    Cmq mi rimane il problema del refresh della casella di testo...perchè in questo ciclo non riesco a far vedere il tempo che avanza ?



  • di Hellboy (utente non iscritto) data: 06/11/2015 12:55:05

    Niente da fare, non riesco a fare il refresh della casella di testo a cui assegno il valore di countit.
    Se tra rigo e rigo metto una MSGBOX, con il valore, lo visualizzo perfettamente e la casella di testo prende il valore visualizzato....
    se toglo la msgbox, e gli dico vai a ZERO, il valore passa da 100 a 0, ma non vedo i valori intermedi. Come risolvo ?


    Invece, se al posto della casella di testo (quella che a me seve) , assegno il valore ad una cella EXCEL,vedo anche i valori intermedi.
    Come mai ?
    Come mai su EXCEL si e sulla casella di testo di VBA no ?