Immagine elaborazione



  • Immagine elaborazione
    di Fabio (utente non iscritto) data: 10/10/2014 11:13:50

    buongiorno,
    ho creato una macro che, per la quantità di dati eleborata, impiega diversi minuti.
    Volevo visualizzare qualcosa che indichi che è in fase di elaborazione.
    Ho cercato nel forum e ho trovato una risposta (che potrebbe essermi utile) di Textomb del 2013 dove allega un esempio e un codice che ora non sono più visibili.
    Chiedo a Textomb se ha ancora qualcosa da ricaricare o ad altri eventuali soluzioni.
    grazie



  • di gargiu data: 10/10/2014 11:34:22

    Io utilizzo questa soluzione.
    Applico sulla form in cui elaboro dei dati una progressbar che nascondo, questa la rendo visibile al click della Commandbutton associata all'azione, nella quale ne definisco la durata in relazione ai dati da elaborare. Questo lo puoi decidere tu andando a tenativi.
    Vedi il codice sotto che puoi adattare a tuo piacimento.
     
    Dim Counter As Integer
    ProgressBar1.Visible = True
        Dim Workarea(5000) As String
        ProgressBar1.Min = LBound(Workarea)
        ProgressBar1.Max = UBound(Workarea)
        ProgressBar1.Value = ProgressBar1.Min
    For Counter = LBound(Workarea) To UBound(Workarea)
    ProgressBar1.Value = Counter
        Next Counter
    End Sub



  • di Fabio (utente non iscritto) data: 10/10/2014 11:43:40

    Grazie gargiu per la risposta, però, non essendo competente, non riesco a capire come procedere.
    Al momento avvio la macro non da un form ma da un semplice pulsante.
    Devo creare una userform e inserire una ProgressBar?
    Se si, puoi aiutarmi a crearla o se hai un semplice file di esempio da inserire?
    Grazie mille
     
    Grazie gargiu per la risposta, però, non essendo competente, non riesco a capire come procedere.
    Al momento avvio la macro non da un form ma da un semplice pulsante.
    Devo creare una userform e inserire una ProgressBar?
    Se si, puoi aiutarmi a crearla o se hai un semplice file di esempio da inserire?
    Grazie mille



  • di alfrimpa (utente non iscritto) data: 10/10/2014 11:52:06

    Ciao

    Prova a vedere questo link della Microsoft

    h t t p://support2.microsoft.com/kb/211736/it dove è spiegato passo passo Come visualizzare un indicatore di stato con un modulo utente in Excel

    Spero ti sia utile

    Alfredo






  • di Zer0Kelvin data: 10/10/2014 13:18:02

    Ciao.
    Soluzione più elementare (dal momento che ti serve solo qualcosa che indichi che la macro è in elaborazione) sarebbe visualizzare una userform che, all'apertura, visualizzi il messaggio di avviso, esegua la tua macro, e si richiuda una volta finito.
    Vedi file di esempio allegato.



  • di gargiu data: 10/10/2014 15:01:43

    Ti ho allegato un file di esempio in cui puoi vedere come gestire una Prograssbar e come lanciarla abbinandola alle istruzioni di un commanbutton.



  • di Fabio (utente non iscritto) data: 10/10/2014 21:26:04

    innanzitutto grazie per i suggerimenti che mi avete dato.
    Ho trovato una buona soluzione quella di gargiu ma sicuramento sbaglio qualcosa.
    Ho copiato la userform1 nel mio file e ho inserito il comando UserForm1.Show all'inizio della macro.
    Quando avvio la macro esegue la userfor1 e quando questa termina inizia la mia macro.
    Naturalmente vorrei che mentre è visualizzata la userfor1, venga eseguita anche la mia macro.
    Dove sbaglio?
    Grazie



  • di gargiu data: 10/10/2014 21:52:25

    É difficile rispondere se non posti il codice.



  • di Fabio (utente non iscritto) data: 10/10/2014 22:49:48

    ecco il codice (una parte) della mia macro e il codice della userform1 del file che hai allegato.
    Grazie
     
    Sub LINK_EMAIL()
            UserForm1.Show
            Application.ScreenUpdating = False
            Application.EnableEvents = False
    
    r = Range("o" & Rows.Count).End(xlUp).Row + 1   'imposta la prima riga vuota su cui scrivere
    r1 = 2
    For Each ctl In Range("o2", "o" & r)
        If InStr(1, ctl.Text, "@") > 0 Then
        ActiveSheet.Hyperlinks.Add Cells(r1, "o"), "mailto:" & ctl.Text & "", , , ctl.Text
        ctl.Font.Size = 8
        ctl.Font.Name = "arial"
    End If
    r1 = r1 + 1
    Next
            Application.ScreenUpdating = True
            Application.EnableEvents = True
    End Sub
    
    
    Private Sub UserForm_Activate()
    Me.ProgressBar1.Max = 100
    Me.ProgressBar1.Min = 0
    For i = 1 To 100
    Me.ProgressBar1 = i
    Application.Wait Now + TimeSerial(0, 0, 1)
    Next i
    'MsgBox "Operazione conclusa!", vbInformation, Title:=""
    Unload Me
    End Sub
    



  • di gargiu data: 11/10/2014 09:54:10

    Cosa dovrebbe fare il tuo codice? se lo lanci omettendo l'istruzione di lanciare la UserForm1 ti funziona?

    Hai provato a spostare l'istruzione "UserForm1.Show" in fondo al codice?
     
            Application.ScreenUpdating = False
            Application.EnableEvents = False
    
    r = Range("o" & Rows.Count).End(xlUp).Row + 1   'imposta la prima riga vuota su cui scrivere
    r1 = 2
    For Each ctl In Range("o2", "o" & r)
        If InStr(1, ctl.Text, "@") > 0 Then
        ActiveSheet.Hyperlinks.Add Cells(r1, "o"), "mailto:" & ctl.Text & "", , , ctl.Text
        ctl.Font.Size = 8
        ctl.Font.Name = "arial"
    End If
    r1 = r1 + 1
    Next
            Application.ScreenUpdating = True
            Application.EnableEvents = True
    
    UserForm1.Show



  • di Zer0Kelvin data: 11/10/2014 14:18:45

    Ciao.
    Ho l'impressione che stiate facendo un pò di confusione.
    Il codice della userform, scritto così, esegue all'apertura tutto lo scorrimento della progressbar e solo dopo lancia l'esecuzione della macro.
    L'istruzione Application.Wait è stata inserita solo a scopo dimostrativo per mostrare il funzionamento della progressbar ed andrebbe eliminata nel codice definitivo.
    Le istruzioni per l'avanzamento della progressbar andrebbero inserite all'interno della macro in esecuzione, per esempio nel ciclo For...Each, ma bisognerebbe anche effettuare dei calcoli per impostare correttamente il valore della progressbar all'avanzare dei cicli stessi.
    Mi permetto di ricordare che una soluzione molto più semplice sarebbe limitarsi a visualizzare un messaggio di avviso.



  • di Fabio (utente non iscritto) data: 11/10/2014 17:25:33

    Ciao Zer0Kelvin, ciao gargiu,
    la soluzione suggerita da gargiu è molto carina ma mi pare di capire difficile da gestire,
    Sono pertanto orientato ad utilizzare quanto suggerito da Zer0Kelvin.
    Grazie a tutti.