Domanda.

da: Pino Masala    nuovetec.srl@tiscalinet.it

Egregio Sig. Biondi, mi riferisco alla Sua graditissima e-mail del 16/09/03 con la quale mi erudiva su come risolvere il mio problema di filtrazione dati per trovare infine la data maggiore correlata ai dati filtrati. Come da Lei indicato ho eseguito, prima della sua routine "sub cerca", l’esempio riportato al punto uno della e-mail vale a dire "filtrare dati col vba", esempio reperito c/o il suo sito.

Adattandolo al mio caso ho scritto:

Private Sub CommandButton3_Click()
Set zona = Worksheets("ArchivioOrdini").Range("A1:J65535") ' foglio e range in cui si trovano i
' dati da filtrare
x = zona.Columns.Count
Dim Criterio
Campo = "DESCRIZIONE ARTICOLO"
If Campo = "" Then Exit Sub
If Val(Campo) > x Then
MsgBox "Campo non presente"
Exit Sub
End If
Criterio = UserForm4.TextBox2.Value
If Criterio = "" Then Exit Sub
Dim CL As Object
Set pippo = zona.Cells(1, Val(Campo))
For Each CL In Range(pippo, pippo.End(xlDown))
If CL.Value = Criterio Then
GoTo 10
End If
Next
MsgBox "Criterio non presente"
Exit Sub

10:
zona.Cells(1, 1).Select
Selection.AutoFilter
Selection.AutoFilter Field:=Campo, Criteria1:=Criterio
zona.Cells(1, 1).Select
End Sub


Purtroppo però lanciando la routine viene generato il messaggio "errore di run-time 1004. Errore definito dall’applicazione o dall’oggetto". Andando nel "Debug" viene evidenziata in giallo la riga "Set pippo = zona.Cells(1, Val(Campo))".

Non riesco a capire perché. Potrebbe aiutarmi?

Grazie, Pino
 

Risposta.

ciao Pino, l'errore deriva dal fatto che per Campo si deve inserire il NUMERO del campo e non la intestazione di colonna. Tu assegni a Campo "DESCRIZIONE ARTICOLO", che è una stringa, e questo genera l'errore. Se riguardi il mio esempio, il numero del campo lo faccio prendere con una inputbox, il cui messaggio è chiaro : Campo = InputBox("Inserire il numero del campo di ricerca")
Ora tu usi una costante, va bene lo stesso, ma devi scrivere il numero di colonna su cui vuoi effettuare la filtrazione, e senza doppi apici, quindi se "DESCRIZIONE ARTICOLO" è nella colonna C, la 3, la tua istruzione dovrà essere:
Campo = 3
A questo punto però non ti servono più neanche le istruzioni che controllano se il campo esiste, visto che è fisso. Forse è meglio se rileggi, magari stampandotela, la pagina dell'articolo, in particolare i primi due paragrafi, che spiegano il perchè delle istruzioni usate.
saluti, ennius