Condividi:        

inserire una progress bar

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

inserire una progress bar

Postdi miko » 05/02/10 21:52

ciao,
ho ancora bisogno del vostro aiuto per risolvere uno stupido problema;
nel foglio1 ho inserito questo codice:
Codice: Seleziona tutto
Option Base 1
Dim TERNI As Long
Sub Aggiorna_Terni()
'rngIni calcola le righe prima dell'inserimento di ulteriori dati
rngIni = Worksheets("Foglio1").Range("B" & Rows.Count).End(xlUp).Row
'macro che accoda-aggiunge estrazioni, che importa le estrazioni
Call IMPORTA_ARCHIVIO
Dim TABELLA(), ARCHIVIO As Long
'TERNI INDICA LA COLONNA M DOVE INIZIA L'ELENCO DEI TERNI
TERNI = Range("M3").End(xlDown).Row 'numero di righe dei terni, 1140
'la variabile "Archivio" riconta le righe
'ARCHIVIO INDICA LA COLONNA B DOVE INIZIANO LE COMBINAZIONI DELL'ARCHIVIO
ARCHIVIO = Range("b3").End(xlDown).Row 'numero di righe delle combinazioni
'INDICA IL RANGE DEI TERNI, DELLE QUATERNE, DELLE CINQUINE
'QUINDI INDICA LO SVILUPPO CHE SI VUOLE ESAMINARE
Base = Range("m3", Range("m3").End(xlToRight)).Columns.Count 'numero di colonne dei terni
 For a = 3 To TERNI 'primo for da 3 a 1140
col = 13
ReDim TABELLA(Base)
cont = 0
For X = 1 To Base 'secondo for da 1 a 3
TABELLA(X) = Cells(a, col)
col = col + 1
Next 'X, chiude il secondo for
'la scansione avviene non più dalla riga 3 ma da rngIni + 1
For i = rngIni + 1 To ARCHIVIO
'questa lina di codice determina la larghezza della tabella combinazioni;
Set zona = Range(Cells(i, 1), Cells(i, 10))
'basta cambiare il parametro 10 in base alla larghezza della tabella;
'se si vuole una tabella dinamica basta inserire una variabile
'tipo la variabile "base" per determinare se si vogliono esaminare i terni, quaterne ecc.
M = 0
For n = 1 To Base
For Each c In zona
If c.Value = Val(TABELLA(n)) Then
M = M + 1
Exit For 'Each c
End If
Next c
'A questo punto ogni volta che si verifica la condizione di terno
'non vado a contare gli eventi per poi inserirli nella colonna
'frequenze ma aggiungo alla cella il valore corrente + 1
'con il codice:
If M = Base Then
'Cells(a, 17) = cont 'INDICA LA COLONNA IN CUI VERRANNO INSERITE LE FREQUENZE
'IN QUESTO CASO LA COLONNA 17 CHE E' LA COLONNA Q;
'PER VARIARE LA COLONNA BASTA SOSTITUIRE IN Cells(a, 17) AL NUMERO 17 UN QUALUNQUE ALTRO NUMERO.
Cells(a, 17) = Cells(a, 17) + 1
'cont = cont + 1
Exit For
End If
Next n
Set zona = Nothing
Next i
TABELLA = TABELLA()
Next a
Call CANCELLA
Call ORDINA
Range("A3").Select
End Sub


vorrei inserire nel listato precedente queste linee di codice:
Codice: Seleziona tutto
Dim Counter As Integer
    Counter = Counter + 1

Dim Percent As Single

(*) Percent = Counter / (§ * 10]) 'ho inserito il simbolo § che deve essere modificato

 Progress_Meter.Show
  With Progress_Meter
  .labPg4v.Caption = Format(Percent, "0%")
  .labPg4.Width = Percent * (.labPg4v.Width + 2) ' imposta la lunghezza della Label,
End With
  DoEvents

che fanno apparire una shape-form, chiamata Progress_Meter, con una progress bar-label.
tutti i tentativi che ho fatto mi visualizzano il form ma non c'è corrispondenza tra il tempo di visualizzazione del form ed i calcoli del primo listato, e poi nella label che mostra la percentuale del calcolo si visualizzano numeri astronomici.
credo che devo modificare anche la linea di codice evidenziata sostituendo qualche variabile, ma anche qui ho difficoltà.
qualcuno di voi può indicarmi come procedere?
grazie saluti
miko
windows 10 - office 2013
miko
Utente Senior
 
Post: 520
Iscritto il: 29/12/09 10:44

Sponsor
 

Re: inserire una progress bar

Postdi Anthony47 » 06/02/10 02:12

Assodato che la progess bar ti restituisce in forma grafica il contenuto della variabile Percent (che ragionevolmente deve essere tra 0% e 100%, cioe' tra 0 e 1), devi mettere al denominatore (nell' istruzione con l' asterisco) il valore che Counter assumera' quando le operazioni sono finite; quale sia questo valore lo sai solo tu... O magari e' scritto nella macro, ma preferisco non cimentarmi col suo reverse engineering.

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

Re: inserire una progress bar

Postdi miko » 06/02/10 22:35

ciao,
ho provato tutto il giorno come mi hai suggerito, ma è stato un completo fallimento;
capisco che il reverse necessita di tempo, forse se invio il file e vedi come funziona può essere più semplice.
http://www.filedropper.com/terniwinforlifeflash
questo file è stato modificato da flash tempo addietro e forse lui potrebbe giungere alla soluzione più facilmente.
se è troppo complicato non importa è solo un inserimento estetico.
grazie saluti
miko
windows 10 - office 2013
miko
Utente Senior
 
Post: 520
Iscritto il: 29/12/09 10:44

Re: inserire una progress bar

Postdi Anthony47 » 06/02/10 22:41

La macro in cui vuoi inserire la progress bar esegue sempre lo stesso numero di cicli? Se SI allora sai quale e' il valore finale e sai cosa mettere in quel denominatore; se NO, allora non sai quanto dura il tutto per cui non puoi nemmeno sapere a che % sei arrivato...
A meno che il numero di cicli non sia calcolabile a priori con una formula (ad esempio se parli di permutazione di N elementi K a K), e allora torni alla prima ipotesi e sei a posto.

Vediamo se Flash puo' dare un contributo piu' specifico.

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

Re: inserire una progress bar

Postdi Flash30005 » 07/02/10 01:21

Non so come mai ma il file da te inviato non mi funziona
quindi ho ritrovato nella "cascina" il file originale e ho inserito il codice per visualizzare la barra di stato di excel sulla quale potrai vedere la percentuale di elaborazione
semmai, se non è sufficiente la barra di stato, potrai applicare il codice di calcolo al tuo progress meter

Codice: Seleziona tutto
'Inizio macro
'...
oldStatusBar = Application.DisplayStatusBar  '<<< aggiungere questa riga
Application.DisplayStatusBar = True             '<<< aggiungere questa riga                                     

For a = 3 To TERNI                                 '<<< riga esistente
 Percent = a / TERNI                    '<<< aggiungere questa riga  calcolo percentuale
Application.StatusBar = Format(Percent, "0%")       '<<< aggiungere questa riga                                     
'continua macro
'...
'Alla fine del ciclo a
Next a                                '<<< riga esistente
Application.DisplayStatusBar = oldStatusBar  '<<< aggiungere questa riga
Application.DisplayStatusBar = False     '<<< aggiungere questa riga
Range("A1").Select                               '<<< riga esistente
End Sub


Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: inserire una progress bar

Postdi ricky53 » 07/02/10 02:23

Ciao,
prova con questa macro da inserire adattata nel tuo file:

[code]Sub Macro_Principale()
' qui ci sono le tue istruzioni
'.....
'.....

TERNI = Range("M3").End(xlDown).Row

TERNI = 3000 ' <<--- nella tua macro la devi cancellare
[A1] = 1 ' <<--- nella tua macro la devi cancellare
For A = 3 To TERNI
Call Barra_Avanzamento(A, TERNI)
[A1] = [A1] + 1 ' <<--- nella tua macro la devi cancellare
Next A

' seguono le tue istruzioni
'....
'....
MsgBox "Elaborazione correttamente terminata" ' <<--- nella tua macro la devi cancellare
Unload Progress_Meter ' <<--- nella tua macro la devi cancellare
End Sub

Sub Barra_Avanzamento(Perc, Totale)
Percentuale = Perc / Totale
Progress_Meter.Frame1.Caption = Format(Percentuale, "0%")
Progress_Meter.Label1.Width = Percentuale * (Progress_Meter.Frame1.Width - 25)
Progress_Meter.Show
DoEvents
End Sub
[/code]


il file di esempio lo trovi [url=http://myfreefilehosting.com/f/1844cd7bdc_0.03MB]QUI[/url]

Ciao da Ricky53
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: inserire una progress bar

Postdi miko » 07/02/10 12:00

buona domenica a tutti
per flash,
non capisco perchè il file non ti funziona;
ho solo modificato le colonne, cambiato qualche nome ed inserito dei commenti per capire il codice; il listato è il tuo originale;
forse ho commesso qualche errore nel copia incolla;
se è cosi scusate per questo involontario equivoco
non so cosa dirti.
in ogni caso con le tue nuove indicazioni tutto funziona perfettamente, è proprio un...flash;
grazie grazie

per ricky53
ho provato il file che mi hai indicato ed i suggerimenti del listato che hai scritto;
naturalmente funziona.
grazie anche a te per il tuo aiuto

saluti miko
windows 10 - office 2013
miko
Utente Senior
 
Post: 520
Iscritto il: 29/12/09 10:44


Torna a Applicazioni Office Windows


Topic correlati a "inserire una progress bar":


Chi c’è in linea

Visitano il forum: Nessuno e 52 ospiti