Sviluppare funzionalita su Microsoft Office con VBA Ricerca a doppia selezione optionbutton

Login Registrati
Stai vedendo 19 articoli - dal 76 a 94 (di 94 totali)
  • Autore
    Articoli
  • #42572 Score: 0 | Risposta

    pixel
    Partecipante

      Buongiorno Alex,
      consentimi di dirti che stai facendo un gran lavoro. Ciò dimostra non solo la tua ampia disponbilità, ma anche una elevata capacità professionale. Complimenti.
      Detto questo, passo passo ti rispondo.

      alexps81 ha scritto:

      On Error Resume Next le ho utilizzate per evitare che se per qualche motivo X va in errore allora ti salta quella riga e non ti genera errori. Ma se ricordo bene le ho inserite solo per lo spostamento al primo cliente, all'ultimo cliente, quello precedente e quello successivo. Ma in ogni caso non ti crea problemi il fatto che sia presente in quelle Sub 

      Buono a a sapersi che se usato nella Sub non crea problemi.

      alexps81 ha scritto:

      La tua soluzione con le Inputbox, sarebbe da evitare...anche perché che password è una che mostra cmq i caratteri quando la digiti? La Inputbox non ha l'opzione PasswordChar (la possibilità di definire un carattere particolare quando digiti in una Textbox).

      Sicuramente la tua soluzione è quella più professionale. Onestamente non ci avevo pensato però potrebbe tornarmi utile.

      alexps81 ha scritto:

      Cioè se stai inserendo un nuovo cliente allora devi disabilitare i button che ti mostrano il primo cliente, l'ultimo cliente, il prossimo e il precedente. Altrimenti rischi di far casini ogni volta che sbagli a premere i button. Meglio gestire la modifica e l'inserimento di un nuovo cliente a parte. Almeno per come la penso io.

      Ritengo che tu abbia ragione facendo in questo modo. Infatti, nel mio progetto dopo aver pigiato il pulsante Nuovo, il pulsante Inserisci diventava Rosso e Lampeggiante, in più una Label anch'essa lampeggiante con la dicitura "Inserimento dati in corso". Al termine quando si pigiava il pulsante Inserisci, questo diventava di colore verde.

      alexps81 ha scritto:

      Ma se il cliente ha due o più cognomi? MARTINO DE CARLES Mario...se tu scrivi MARTINO Mario la ricerca non troverà nulla.

      Anche qui con le mie limitate conoscenze, nel mio progetto ho trovato una possibile soluzione. Questa idea mi è stata data da Alfrimpa. Sarebbe  in sintesi impostare una colonna dove vengono concatenate il valore di due celle. In questo specifico caso il cognome e nome. Devo dirti che nel vecchio progetto funziona anche se il soggetto si chiamasse Camillo Benso Conte di Cavour.  

      alexps81 ha scritto:

      Quando dici che preferisci bloccare il foglio dove ci sono i record...si può fare di meglio. Visto che lavori solo con UserForm, si può nascondere l'applicativo Excel all'avvio del file così non ti verrà mostrato null'altro ma solo le UserForm. In questo modo non vedrai i fogli.

      Ottima soluzione. Io avrei risolto in questo modo. Avrei all'apertura "Open del Workbook" selezionato un foglio vuoto, oppure un foglio con dati non rilevanti.

      Per l'ultimo post ti risponderò appena provo il file.

      Grazie mille.

      #42573 Score: 0 | Risposta

      alfrimpa
      Partecipante
        33 pts

        Solo una precisazione su "On Error Resume Next"

        Tale istruzione non andrebbe mai usata.

        Essa si limita ad ignorare l'errore passando alla istruzione successiva qualora si verifichi un errore e gli errori non vanno ignorati ma gestiti.

        La si può usare soltanto qualora si sia arci sicuri che l'ignorare un errore (che comunque c'è) non abbia impatti negativi su altre parti di codice.

        #42574 Score: 0 | Risposta

        pixel
        Partecipante

          Ciao Alfrimpa,

          In rete avevo letto qualcosa del genere e per questo motivo ho chiesto ad Alex il motivo di averlo usato in 7 sub. 

          Mia considerazione; probabilmente per il momento per com' è il progetto Alex è sicuro che non interferisca in modo negativo sulle altre sub. 

          #42575 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            272 pts

            alfrimpa ha scritto:

            Tale istruzione non andrebbe mai usata.

            L'unico contesto in cui posso fidarmi ad utilizzare questa istruzione è per testare se non ho già inserito un item in una Collection. Per lo scopo devo testare Err.Number e verificare che corrisponda all'errore di "Chiave non univoca nella collezione". Non è molto affidabile comunque.
            Motivo per cui tendo a utilizzare piuttosto un Dictionary che fornisce un metodo Exists.

            #42576 Score: 0 | Risposta

            LucaSR
            Partecipante
              15 pts

              Mai usato On Error Resume Next, gli errori si intercettano e si gestiscono, non si bypassano.

              #42578 Score: 0 | Risposta

              pixel
              Partecipante

                alexps81 ha scritto:

                Ahhh be' certo certo...io non cancellerei mai i dati di un, in questo caso specifico, 'Cliente'. Tutt'al più lascerei sempre sempre e cmq la possibilità di Cancellarlo, ma solo all'ADMIN...giusto perché potrebbe essere necessaria la cancellazione a seguito di un evidente errore. 
                 

                Io lo fatto  "modificando il tuo codice" aggiungendo ipassword4 "case 4) in frmPassword  l'istruzione del tasto elimina e nel tasto elimina l'istruzione:

                iPassword = 4
                frmPassword.Show

                Funzione bene!

                Nel versione 2 del file ci sono due cose che ho riscontrato e vorrei portarlo all'attenzione.

                Il primo è che quando il file parte, si vede anche se per poco il foglio Dati col suo contenuto. Ma questo è un problema, posso risolverlo.

                La questione preoccupante invece sarebbe questo:

                Ammettiamo che ci sono 10 clienti registrati con numero progressivo da 1 a 10.

                Se faccio nuovo cliente, il programma giustamente legge l'ultimo record aggiungendo +1. Fin qui tutto bene.

                Ma se io dovessi cancellare per un motivo x, il cliente Rossi che ha il numero progressivo a caso "2" ,  me lo cancella tranquillamente, ma se vado ad inserire un nuovo record (cliente) qui nasce l'inghippo.

                Cioè se vado a creare un nuovo cliente, non mi da come numero progressivo "11" ma mi da sempre il numero 10 che sarebbe l'ultimo numero Prog, presente in foglio Dati. 

                Questo accade ogni volta che elimini un record e poi ne registri uno nuovo.  Se si vuol provare e mi fate sapere.

                #42579 Score: 0 | Risposta

                LucaSR
                Partecipante
                  15 pts

                  Quindi hai trovato uno dei molteplici motivi per cui non si cancellano i records 

                  #42580 Score: 0 | Risposta

                  alexps81
                  Moderatore
                    58 pts

                    Come puoi vedere adesso con la frmPassword hai una buona flessibilità per gestire le password.

                    Per il discorso della cancellazione dei Clienti...anche io sono dell'idea che non vanno mai cancellati. C'è da dire che un gestionale come il tuo, a parere mio, andava fatto in Access, dove ogni record ha un ID univoco...proprio il caso tuo.

                    A questo punto valuterei di gestire la situazione senza cancellare i clienti ma di archiviarli.

                    #42581 Score: 0 | Risposta

                    pixel
                    Partecipante

                      alexps81 ha scritto:

                      Come puoi vedere adesso con la frmPassword hai una buona flessibilità per gestire le password.

                      Perfetto.👍🏽

                       

                      alexps81 ha scritto:

                      questo punto valuterei di gestire la situazione senza cancellare i clienti ma di archiviarli.

                      Io penso che il problema si possa risolvere. Con il vecchio progetto che sicuramente molto pesante per certi aspetti, questo non succedeva.

                      Per quanto riguarda la cancellazione ritengo sia utile. Faccio un esempio. Se un cliente chiama e prenota mandandomi per mail i documenti, si provvede ad inserirli.

                      Ma se per un motivo x non può più venire, io che faccio mi tengo un archivio anche questi dati? 

                      Mi sembra strano.

                      La  conservazione dei dati anche in altri formati tipo pdf,  lo farò, ho già qualcosa. Ma adesso vediamo se si può risolvere il problema del numero progressivo.

                       

                       

                      #42582 Score: 0 | Risposta

                      LucaSR
                      Partecipante
                        15 pts

                        pixel ha scritto:

                        Per quanto riguarda la cancellazione ritengo sia utile. Faccio un esempio. Se un cliente chiama e prenota mandandomi per mail i documenti, si provvede ad inserirli.

                        Ma se per un motivo x non può più venire, io che faccio mi tengo un archivio anche questi dati? 

                        Seguendo il tuo stesso esempio, perché tenere i dati di chi non ha disdetto? Mica sei sicuro che tornerà!!!

                        #42584 Score: 0 | Risposta

                        alexps81
                        Moderatore
                          58 pts

                          Al momento mi viene in mente che si potrebbe dedicare un Foglio dove vengono memorizzati i numeri progressivi. Quindi quando si va ad eliminare un cliente si agisce sul Foglio Clienti e si elimina la riga in questione. Quando invece bisogna inserire un nuovo cliente, si va a interrogare questo Foglio NumeriProgressivi con solo i numeri progressivi.

                          #42585 Score: 0 | Risposta

                          pixel
                          Partecipante

                            Se non ci sono altre soluzioni vada per un foglio d'appoggio

                            A dirla tutta:  deve essere qualcosa che rimane in memoria solo quando si scatena l evento Elimina, altrimenti il problema non si presenta.   

                            #42587 Score: 0 | Risposta

                            pixel
                            Partecipante

                              Ps. Ora sono fuori, ma domattina  voglio fare qualche prova. Giusto x.

                              #42588 Score: 0 | Risposta

                              alexps81
                              Moderatore
                                58 pts

                                Un'altra soluzione che mi viene in mente è quella di memorizzare l'ultimo codice in GESTIONE NOMI. Cioè nella scheda Formule, si va in Gestione Nomi e si crea un riferimento relativo all'ultimo codice. Quindi niente Foglio o cella di appoggio. Ovviamente va gestito tutto tramite codice. Appena riesco provo.

                                #42589 Score: 0 | Risposta

                                pixel
                                Partecipante

                                  Foglio di appoggio  devo provare domattina ed è già difficile ma non impossibile per me.  Ci voglio provare.

                                  Invece l'ultimo post Alex, mi sono a dir poco perso.... non saprei neanche da dove incominciare.

                                   

                                  #42591 Score: 0 | Risposta

                                  alexps81
                                  Moderatore
                                    58 pts

                                    Allora penso di aver risolto il problema del codice univoco...almeno dai pochi test effettuati funziona, poi prova tu e mi saprai dire.

                                    Siccome immagino che tu abbia effettuato delle modifiche al gestionale, per non girarti una nuova mia versione, effettua queste piccole modifiche direttamente tu:

                                    1) avvia il gestionale

                                    2) applica la password ADMIN per effettuare modifiche alla struttura

                                    3) vai nella Scheda REVISIONI e rimuovi la protezione al Foglio "Dati" (Rimuovi protezione foglio

                                    4) vai nella Scheda FORUMLE e premi su GESTIONE NOMI. Dovresti trovarti un elenco di Nomi e Riferimenti. Selezionali tutti i cancellali...così fai un po' di pulizia...quelli sono vecchi Nomi definiti o da te o di chi ti ha aiutato in passato a fare il gestionale...cmq non servono più a nulla.

                                    5) dopo che hai cancellato tutti i NOMI, creane uno nuovo premendo su NUOVO...

                                    6) come Nome: gli scrivi NrProgressivo, in Ambito: lascia Cartella di lavoro, in Commento: lascia vuoto, in Riferito a: scrivi l'ultimo numero del numero progressivo presente nella tua tabella. Se ad esempio il tuo ultimo cliente ha come numero progressivo 10 allora in Riferito a: scrivi 10

                                    7) premi OK e salva

                                    8) vai in VBE e entra nel codice della UserForm frmNuovoModificaCliente. In Private Sub UserForm_Initialize() vai sotto fino alle righe del caso in cui si inserisce un nuovo cliente e sostituiscilo con questo:

                                    `'CASO IN CUI SI INSERISCE UN NUOVO CLIENTE
                                    Case Is = "INSERISCI"
                                    
                                    txt1 = [NrProgressivo] + 1
                                    
                                    End Select`

                                     

                                    9) dopodiché sempre nella frmNuovoModificaCliente, vai in Private Sub btnConferma_Click() e nel pezzo di codice che gestisce l'inserimento (CASE IS = "INSERISCI") ti porti subito prima di ThisWorkbook.Save e ci inserisci questo pezzo di codice:

                                    ThisWorkbook.Names("NrProgressivo").Value = [NrProgressivo] + 1

                                    N.B. mi raccomando....lo devi inserire nel Case Is = "INSERISCI" e non nel Case Is = "MODIFICA" altrimenti non funziona.

                                    10) adesso salva tutto, chiudi, apri e fai le prove per vedere se funziona.

                                    #42598 Score: 0 | Risposta

                                    pixel
                                    Partecipante

                                      Buongiorno Alex,
                                      Non so come tu abbia fatto ma funziona e anche bene per il momento. Numero univoco.
                                      Unica cosa che ho riscontrato ma giusto che sia così è:
                                      Es. Mettiamo caso oggi, in mattinata, mi arrivi una sola prenotazione. Nell'inserimento ti da il numero progressivo scritto sul foglio dati che è Es. 12 (+ 1). Quindi nell'inserimento mi darà come n. prog. n°13.
                                      Ma poniamo il caso in serata arrivasse la disdetta dello stesso clente (13), giustamente si provvede alla sua cancellazione.
                                      Qui ho notato la funzione del numero univoco. Cioè, se vado ad inserire un nuovo cliente dopo aver cancellato quello precedente, il numero progr. sarà "14" e non più "13" anche se il 13 non esiste più.

                                      Detto questo, ritengo secondo me un'ottima soluzione al momento.
                                      Invece quello che avevo creato io con dei copia e incolla di vari codici trovati qua e là per la rete, nel caso specifico, il programma leggeva l'ultimo record aggiungendo +1. Ormai nel caso specifico superato.

                                      Adesso ci lavoro su con le mie forze ,  ci si vede al prossimo Step.

                                      Grazie Alex  

                                      P.s. Chiedo al Vecchio Frac in qualità di moderatore, salutandolo con un Buongiorno: il prossimo step apro una nuova discussione ?
                                      Grazie 

                                      #42606 Score: 0 | Risposta

                                      alexps81
                                      Moderatore
                                        58 pts

                                        pixel ha scritto:

                                        Qui ho notato la funzione del numero univoco. Cioè, se vado ad inserire un nuovo cliente dopo aver cancellato quello precedente, il numero progr. sarà "14" e non più "13" anche se il 13 non esiste più.

                                        Esatto!! Adesso il nuovo numero progressivo viene letto dal valore memorizzato nel NOME NrProgressivo + 1. Quindi quando andrai ad inserire nuovi clienti, quel numero verrà incrementato di una unità di volta in volta.

                                        Cmq io valuterei anche di implementare il databse con una sezione dedicata all'archiviazione dei dati. Alla fine basta aggiungere una colonna in fondo e in corrispondenza del cliente far comparire al suo interno "Archiviato" (o "Cancella"). Poi al momento del caricamento dei dati, la sub-routine deve tenere in considerazione di saltare quelli che hanno nella cella in fondo la parola "Archiviato" (o "Cancellato"). Viceversa, predisporre una listbox (sulla falsa riga di quella che ti ho proposto io per l'elenco dei nominativi filtrati) che va ad elencare quelli "Archiviati", qualora volessi visualizzarli. Poi da lì in poi puoi tenere in considerazione diversi scenari: Importazione dei clienti Archiviati; Eliminazione dei clienti Archiviati; Modifica dati dei clienti Archiviati; ecc...

                                        pixel ha scritto:

                                        Chiedo al Vecchio Frac in qualità di moderatore, salutandolo con un Buongiorno: il prossimo step apro una nuova discussione ?

                                        Secondo me già molti thread fa bisogna aprire una nuova discussione   .

                                        #42607 Score: 0 | Risposta

                                        pixel
                                        Partecipante

                                          Ciao Alex, 

                                          Appena arrivo li "Archivio" aprirò una nuova discussione  dove ti mostrerò come faccio io io salvare non solo sul foglio Dati del progetto, ma anche in un  archivio rsterno in una specifica cartella. Appena ci arrivo la pubblico. Mi piacerebbec sapere il tuo parere. 

                                          Grazie

                                        Login Registrati
                                        Stai vedendo 19 articoli - dal 76 a 94 (di 94 totali)
                                        Rispondi a: Ricerca a doppia selezione optionbutton
                                        Gli allegati sono permessi solo ad utenti REGISTRATI
                                        Le tue informazioni: