Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Non filtra i numeri

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

Non filtra i numeri

Postdi angelo72 » 15/05/14 16:15

Salve. Sto cercando di creare una userform che applica dei filtri in un DataBase.
In un userform ho 3 pulsanti: 1 per il Nome, 2 per la Data, 3 per un numero.
Nella colonna A ci sono i Nomi, colonna B le Date (15/05/2014), nella colonna C ci sono dei numeri (55)
Con questo codice...

Codice: Seleziona tutto
Application.ScreenUpdating = False
    Dim criterio As String
    criterio = InputBox("Digitare il testo da filtrare") & "*"
    Columns("A:A").Select
    Selection.AutoFilter
    ActiveSheet.Range("$A$1:$A$65000").AutoFilter Field:=1, Criteria1:=criterio


Quindi se nella inputbox inserisco un nome presente nella colonna A esem. (Rossi) il risultato me lo da.
Il problema nasce se nella inputbox inserisco una data o un numero. Non mi esce nessun risultato.
Eppure nel codice assegnato alla data , ho cambiato columns A:A in columns B:B. Si può risolvere?
angelo72
Utente Junior
 
Post: 70
Iscritto il: 28/10/13 17:04

Sponsor
 

Re: Non filtra i numeri

Postdi wallace&gromit » 15/05/14 16:43

per i numeri in colonna C è facile: basta togliere &"*", che fa in modo che tu stia cercando un testo e non un numero.
Per le date in B è più complesso perchè quello che tu vedi (tipo 15 maggio 2014) non è il vero valore della cella ma una rappresentazione del numero 41774 che equivale al giorno.
Ho provato ad inserire questo valore ma non funziona nemmeno così, mi sa che in questo caso bisogna rivedere il concetto della userform
stato 2014: Office2003/2013 su win7
Avatar utente
wallace&gromit
Utente Senior
 
Post: 1420
Iscritto il: 16/01/12 14:21

Re: Non filtra i numeri

Postdi Anthony47 » 15/05/14 23:59

Premesso che un "InputBox" restituisce una stringa, e' evidente quindi che in alcuni casi bisogna fare una conversione di tipo.
Se vuoi una data userai
Codice: Seleziona tutto
criterio = CDate(InputBox("Digitare la data da filtrare"))

se vuoi un numero userai
Codice: Seleziona tutto
criterio = CDbl(InputBox("Digitare il valore da filtrare"))

se vuoi una stringa lascerai
Codice: Seleziona tutto
criterio = InputBox("Digitare testo da filtrare") & "*"


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: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Non filtra i numeri

Postdi angelo72 » 16/05/14 10:12

Grazie Anthony. Ho dovuto modificare il codice togliendo la inputbox, in quanto non mi dava la 2 linea d' intestazione.
Ho inserito una TextBox. Una volta inserito il valore da cercare ed aver digitato il pulsante appropriato, mi escono
i risultati voluti. Digitando nuovamente il pulsante appropriato mi esce anche la seconda riga d'intestazione. Così posso scorrere
le righe con le intestazioni e poi volendo andare in Stampa.
Inserisco il codice modificato è testato. Potrebbe venir utile a qualcun altro che visita questo Forum.
Grazie di esistere per tutta quella gente che come me, non è sufficientemente preparata!
Grazie a Wall per l'impegno e tempo investito alla soluzione del mio caso.

Codice: Seleziona tutto
'Codice testato
On Error Resume Next
Application.ScreenUpdating = False
 If TextBox1 = "" Then
 MsgBox "Insersci un valore da cercare.", vbExclamation
 TextBox1.SetFocus
 Exit Sub
 End If
 Dim criterio As String
 criterio = CDbl(TextBox1) ' Se è un numero
 Columns("A:A").Select
 Selection.AutoFilter
 ActiveSheet.Range("$A$2:$A$65000").AutoFilter Field:=1, Criteria1:=criterio
Application.ScreenUpdating = True

P.s. nell'userform per togliere il filtro io uso questo codice: Selection.AutoFilter ' togli filtro
Vorrei sapere se è corretto. Grazie di tutto
angelo72
Utente Junior
 
Post: 70
Iscritto il: 28/10/13 17:04

Re: Non filtra i numeri

Postdi Anthony47 » 16/05/14 10:52

Non ho capito cosa significa "non mi dava la 2 linea d' intestazione", ma se funziona e' perfetto cosi'; suggerirei tuttavia di non usare indiscriminatamente "On Error Resume Next": esso va usato solo nelle situazioni in cui sai che la/le prossima/e istruzione/i possono dare un errore ma e' normale, dopo di che va ripristinata la gestione degli errori usando "On Error GoTo 0" o altra istruzione che punta a una routine di gestione errore.


Selection.AutoFilter mette /toglie il filtro automatic (quindi potrebbe anche succedere che prima non c'e' e con l' istruzione lo inserisci); forse potrebbe essere piu' sicuro utilizzare ad es
Codice: Seleziona tutto
Range("A:A").AutoFilter Field:=1

Questa lascia il filtro nella colonna ma con tutti i valori visualizzati.
Nel tuo codice le istruzioni Columns("A:A").Select / Selection.AutoFilter sono superflue.

Per favore prendi l' abitudine, quando alleghi un codice, di inserirlo con il "tag" CODE: Selezioni le righe di codice, premi il tasto Code che trovi in testa al box in cui stai scrivendo il tuo messaggio.
La lettura del codice e del messaggio risultera' piu' agevole.

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: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Non filtra i numeri

Postdi angelo72 » 16/05/14 12:23

Grazie Anthony. Vediamo se ho capito come inserire il codice. Una cosa voglio capire se io ad esempio dovessi usare On error resume Next, alla fine del codice va sempre messo On error Goto 0 per terminare la gestione degli errori?
Oppure l'uno esclude l'altro?
Grazie
Codice: Seleziona tutto
' E' un esempio. se sto sbagliando perdonami ma voglio capire
Error Resume Next
Application.ScreenUpdating = False
 If TextBox1 = "" Then
 MsgBox "Insersci un valore da cercare.", vbExclamation
 TextBox1.SetFocus
 Exit Sub
 End If
 Dim criterio As String
 criterio = CDbl(TextBox1) ' Se è un numero
 Selection.AutoFilter
 ActiveSheet.Range("$A$2:$A$65000").AutoFilter Field:=1, Criteria1:=criterio
Application.ScreenUpdating = True
On Error GoTo 0

angelo72
Utente Junior
 
Post: 70
Iscritto il: 28/10/13 17:04


Torna a Applicazioni Office Windows


Topic correlati a "Non filtra i numeri":


Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti