Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

FILTRO VBA FUNZIONA PARZIALMENTE

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

FILTRO VBA FUNZIONA PARZIALMENTE

Postdi gigi87 » 14/11/15 20:25

Ciao, ho fatto questo codice che funziona bene fino a criterial=31, dal 4 all' 11 mi ricopia sempre le righe con criterial=3 all' undicesimo lo fa bene dal successivo fino al ventesimo copia le stringe di criterial1=11 help :(

Private Sub Workbook_Open()

Sheets("ROOSTER").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="1"
Range("A38:W5000").Select
Selection.Copy
Sheets("SKIZZO").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
Sheets("ROOSTER").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="2"
Range("A38:W5000").Select
Selection.Copy
Sheets("MARCO_BRUNO").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
Sheets("ROOSTER").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="3"
Range("A38:W5000").Select
Selection.Copy
Sheets("KONRAD").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
Sheets("ROOSTER").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="4"
Range("A38:W5000").Select
Selection.Copy
Sheets("TROCCOLI").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
Sheets("ROOSTER").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="5"
Range("A38:W5000").Select
Selection.Copy
Sheets("RAPHA").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
Sheets("ROOSTER").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="6"
Range("A38:W5000").Select
Selection.Copy
Sheets("LIO MASS").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
Sheets("ROOSTER").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="7"
Range("A38:W5000").Select
Selection.Copy
Sheets("KHUAN").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
Sheets("ROOSTER").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="8"
Range("A38:W5000").Select
Selection.Copy
Sheets("F.DINOIA").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
Sheets("ROOSTER").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="9"
Range("A38:W5000").Select
Selection.Copy
Sheets("DE GIROLAMO").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
Sheets("ROOSTER").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="10"
Range("A38:W5000").Select
Selection.Copy
Sheets("RHOOWAX").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
Sheets("ROOSTER").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="11"
Range("A38:W5000").Select
Selection.Copy
Sheets("BEATZ TO PLAY").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
Sheets("ROOSTER").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="12"
Range("A38:W5000").Select
Selection.Copy
Sheets("FAUS").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
Sheets("ROOSTER").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="13"
Range("A38:W5000").Select
Selection.Copy
Sheets("LENTINI").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
Sheets("ROOSTER").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="14"
Range("A38:W5000").Select
Selection.Copy
Sheets("MEDIAHORA").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
Sheets("ROOSTER").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="15"
Range("A38:W5000").Select
Selection.Copy
Sheets("BIEMSIX").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
Sheets("ROOSTER").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="16"
Range("A38:W5000").Select
Selection.Copy
Sheets("RESTAINO").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="17"
Range("A38:W5000").Select
Selection.Copy
Sheets("DFK").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="18"
Range("A38:W5000").Select
Selection.Copy
Sheets("JAIRO").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="19"
Range("A38:W5000").Select
Selection.Copy
Sheets("RODRIGUEZ").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="20"
Range("A38:W5000").Select
Selection.Copy
Sheets("LEGGIERI").Select
Range("A22").Select
ActiveSheet.Paste
Application.CutCopyMode = False
Range("A22").Select
Sheets("ROOSTER").Select
Application.CutCopyMode = False
Selection.AutoFilter
Range("A22").Select


End Sub
gigi87
Newbie
 
Post: 2
Iscritto il: 14/11/15 20:22

Sponsor
 

Re: FILTRO VBA FUNZIONA PARZIALMENTE

Postdi Marius44 » 15/11/15 22:20

Premetto che il codice andrebbe migliorato e snellito (molto):
per esempio, tutti quei Select potrebbero essere drasticamente ridotti.
non capisco perchè se fai il filtro sulle colonne A:B poi copi le colonne A:W
non capisco perchè se fai il filtro per le righe 38:5000 poi copi le righe 38:5000 (copi anche quelle vuote?).

Certamente senza un file da testare è difficile trovare l'errore (se di errore si tratta) o dare consigli. Vorrei sapere se il criterio di filtro è una stringa o un numero (non cambia molto visto che Criteria1 accetta un Variant) e se si trova nella colonna A opp. B
E' meglio se alleghi un file (non con tutti quei dati ma che siano significativi e non sensibili).
Ma, per pura curiosità, quanto impiega la macro ad eseguire il lavoro?
Ciao,
Mario
Marius44
Utente Senior
 
Post: 143
Iscritto il: 07/09/15 22:00

Re: FILTRO VBA FUNZIONA PARZIALMENTE

Postdi Anthony47 » 16/11/15 02:04

Ciao gigi87, benvenuto nel forum; un saluto anche a Marius.
La macro a me funziona decorosamente, filtrando cioe' doverosamente i valori 1, poi 2, poi 3, poi 4, poi 5 etc etc. Deve esserci qualcos'altro...
Per prova, visto che dici che con filtro=4" continua a restituirti i valori 3, metti uno STOP nel codice in questa posizione:
Codice: Seleziona tutto
ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:="4"
Range("A38:W5000").Select
Selection.Copy
Stop                       '<<< STOP provvisorio
Sheets("TROCCOLI").Select
Poi crea una foto dell schermo da cui si vedono i dati filtrati (anche solo la parte iniziale) e pubblicala nel prossimo messaggio; pe come fare guarda qui: viewtopic.php?f=26&t=103893&p=605488#p605488

Ti segnalo comunque che tutto il codice potrebbe essere sostituito tramite questo loop:
Codice: Seleziona tutto
Option Base 1
Private Sub Workbook_Open()
pippo = Array("SKIZZO", "MARCO_BRUNO", "KONRAD")   '<<<L'elenco di tutti i fogli su cui copiare, in sequenza
Sheets("ROOSTER").Select
For I = 1 To UBound(pippo, 1)
    ActiveSheet.Range("$A$38:$B$5000").AutoFilter Field:=1, Criteria1:=I
    Range("A38:W5000").Copy Destination:=Sheets(pippo(I)).Range("A22")
    Application.CutCopyMode = False
Next I
End Sub
La riga marcata <<< va completata con le tue informazioni.

Non sto suggerendo di ignorare il vantaggio e le potenzialita' delle macro autoregistrate, una tecnica che troppi utenti trascurano; semmai, col tempo, devi imparare a "giocare" col codice prodotto dalla registrazione per ottenere prestazioni amplificate.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: FILTRO VBA FUNZIONA PARZIALMENTE

Postdi gigi87 » 19/11/15 17:58

Ciao ragazzi, ho trovato il problema, ma non so come risolvero.
le righe me le copia nelle rispettive tabelle se trova almeno 2 righe con la rispettiva condizione.
se ne trova una mi restituisce il risultato dell ultima ricerca che ha prodotto almeno due righe.
Come mai? O_O
gigi87
Newbie
 
Post: 2
Iscritto il: 14/11/15 20:22

Re: FILTRO VBA FUNZIONA PARZIALMENTE

Postdi Anthony47 » 19/11/15 22:59

Quello che dici non e' il comportamento normale di Excel; ti suggerisco di pubblicare l'immagine dello schermo nella situazione di errore, fermando la macro subito dopo l'istruzione Selection.Copy, come detto nel precedente messaggio.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "FILTRO VBA FUNZIONA PARZIALMENTE":


Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti