Filtro dati non funziona bene



  • Filtro dati non funziona bene
    di alexps81 data: 01/08/2015 00:25:20

    H e l p !!!

    Ragazzi sentite sto cercando di completare la mia rubrica telefonica, ma mi sono di nuovo bloccato su una banalità.

    Ho caricato due file, uno con l'inserimento di pulsanti che servono per il filtraggio dei dati, l'altro senza pulsanti.

    Il secondo sul pulsante ELIMIINA CONTANTTO funziona a dovere, sul primo quando filtro qualche dato tramite i pulsanti a lettere dell'alfabeto, poi quando vado a fare click su elimina contatto va in debug.
    Lo stesso problema lo fa anche con INSERISCI CONTATTO
    Potete dare un occhiata e cercare di capire l'errore dov'è?

    Grazie



  • di Vecchio Frac data: 01/08/2015 08:03:31

    Se "va in debug", clicchi sul pulsante "debug" e scopri la riga che dà errore, ti segni il codice di errore e la descrizione e da lì parti per correggere l'errore. Di solito si fa così.





  • di alexps81 data: 01/08/2015 08:19:07

    Si quello lo fatto. Il problema adesso è la correzione. Credo sia un discorso legato al fitro. Ho provato a fare in modo che al click su ELIMINA CONTATTO si disabilita il filtro automatico....ma niente da fare.



  • di totygno71 data: 01/08/2015 09:08:58

    L'errore te lo da su questa linea di codice se quando lanci la macro nelle foglio è attivo il filtro ti da errore perchè la riga prima di questa togli il filtro e quindi non può eseguire la riga dell'errore, se invece quando lanci la macro nel foglio non è attivo nessun filtro allora non ti da errore e fa quello richiesto.
    Fai una prova...
    Ciao Toty
     
    'errore    
    ActiveWorkbook.Worksheets("ELENCO TELEFONICO").AutoFilter.Sort.SortFields.Clear
    



  • di alexps81 data: 01/08/2015 13:53:28

    Ho notato anch'io che da l'errore se è attivo un filtro. Qualcuno sa come risolvere il problema? Tra l'altro ho notato che se vado ad eliminare un rigo attraverso il pulsante e poi attivo il filtro del pulsante A (per esempio) è come se in realtà la riga precedentemente eliminata, non si sia realmente eliminata. Provate a vedere.



  • di Vecchio Frac data: 01/08/2015 14:22:53

    Dal punto di vista logico, alla pressione di "ELIMINA CONTATTO" perchè togli il filtro prima di eliminare la riga selezionata? Perchè mai forzi un riordinamento dei dati? se fossi l'utente questo comportamento mi sconcerterebbe. Mi aspetterei cioè di veder eliminata la riga semplicemente.





  • di Vecchio Frac data: 01/08/2015 14:37:32

    Cioè:
    Private Sub CommandButton2_Click()
    ActiveCell.EntireRow.Delete xlShiftUp
    End Sub


    Piuttosto mi preoccuperei sia di fare un controllo che la cella attiva sia anche visibile (caso mai premessi accidentalmente ELIMINA CONTATTO) sia di chiedere all'utente la conferma prima della cancellazione.
    E una cosa che ho notato nel codice è che ti manca sempre Option Explicit in testa ai tuoi moduli. Ascolta il buon consiglio... mettilo sempre e ti eviterai errori sibillini :)





  • di alexps81 data: 01/08/2015 21:38:07

    Ho provato a fare queste modifiche, se qualcuno può dare uno sguardo e vedere se così può andar bene o magari si può fare qualcosa si meglio, meno macchinoso.
    Allego file aggiornato
    Grazie



  • di Vecchio Frac data: 02/08/2015 08:05:17

    cit. "si può fare qualcosa si meglio"
    ---> Migliorare si può sempre, soprattutto se si scrive codice più compatto e magari con una riga di commento.
    Per esempio puoi inserire gli elementi di una combobox in un array e spararlo dentro al controllo con la sua proprietà List.
     
    'metodo Initialize di userform2
    Private Sub UserForm_Initialize()
    Dim v As Variant
        
        'creo gli array di stringhe che popoleranno gli elementi 
        'delle due combobox destinare al "grado" e all'"ufficio"
        'gli array quindi vengono assegnati direttamente 
        'alla proprietà List delle combobox senza passare da AddItem
        v = Array(" ", "1°", "2°", "3°", "4°", "5°", _
            "U.A.", "DIRETTIVO", "DIRIGENTE", "POLIFUNZIONALE", _
            "SQUADRA A CAVALLO", "CINOFILI", "TRASFERITO", _
            "PERSONALE CIVILE", "FUNZIONARIO CIVILE", "BAR", _
            "LAVANDERIA", "ELETTRICISTA", "IDRAULICO")
        ComboBox2.List = v
        
        v = Array(" ", "AGT.", "A.S.", "ASS.", "A.C.", "V.S.", _
            "SOV.", "S.C.", "V.Isp.", "ISP.", "I.C.", "Isp. Sup.", _
            "Sost. Comm.", "Comm.", "C.C.", "V.Q.A.", "Primo Dirigente", _
            "Dir. Sup.", "Dir. Gen.", "SIGNOR", "SIGNORA")
        ComboBox1.List = v
    
    End Sub
    






  • di Vecchio Frac data: 02/08/2015 08:09:50

    Mi piace l'uso intelligente delle routine di Keypress delle textbox per forzare un pattern numerico.
    Mi piace molto la sub "ordina" separata da richiamare quando serve (anche se in commandbutton2_click del foglio2 lo richiami due volte consecutivamente, prima e dopo la sub "colora_fondo", e secondo me non serve).
    Occhio che nel codice del foglio2 c'è un Option Explicit alla deriva in mezzo al codice, è da portare in testa (ma Excel te lo segnalerà al momento opportuno).
    Non serve creare un modulo separato per ogni routine pubblica: ne basta uno, ficcaci dentro tutto quello che ti serve (quindi fondi insieme modulo2 e modulo3 ed elimina modulo1 che è vuoto).





  • di alexps81 data: 02/08/2015 09:52:05

    Quindi questa sub con le array la devo inserire al posto della sub all'interno della form dove c'è la lista "Grado" e "Ufficio"?



  • di Vecchio Frac data: 02/08/2015 10:12:00

    Certamente... è la stessa sub "Userform_Initialize") ma scritta in modo diverso.
    Fa la stessa cosa della tua... quindi se non ti piace puoi tenere la tua versione ^_^