› Sviluppare funzionalita su Microsoft Office con VBA › Ricerca a doppia selezione optionbutton
-
AutoreArticoli
-
No ma devi modificare innanzitutto la disposizione delle varie colonne. Io ad esempio le messe in base a come sono posizionate le textbox nella userform. Quindi nella colonna A i Nr. Prog., nella B i Cognomi, nella C i Nomi, ecc...seguendo la disposizione delle textbox. Poi le textbox le ho rinominate con un numero progressivo (txt1, txt2, txt3, ecc...). Con il ciclo For i = 1 to lultColonna vado a scorrere in tutte le celle e in tutte le Textbox. Con questo modo potrei modificare tutto le altre Sub così da snellire il codice. Cmq se non è un problema modificare la struttura del Foglio e soprattutto non hai fretta...ti farò io un po' di correzioni. Poi se ti piace la storia della listbox per effettuare la ricerca del nominativo...ci si può ragionare.
Grazie Alfrimpa, hai ragione che nella vita nulla è facile aggiungo (e nulla è scontato). Per applicarmi lo sto facendo, non poco, però chiaramente non devo costruire qualcosa di grande. Quindi sto cercando con le mie forze e le mie capacità ridotte nella conoscenza di programmazione, di realizzare qualcosa di utile per l'attività di mia moglie. Chiaramente la materia è abbastanza articolata e complicata. Sicuramnete non è per tutti. Penso che ognuno di noi abbia anche dei limiti nel costruire un palazzo. Questo non mi abbatte e come dici tu serve a spronarmi, motivo per cui sono qui.
Un caro saluto Lino
Grazie Alex
proverò a rinominare le txtbox in tx1,txt2 e cosi via. Stessa cosa per le combobox txt3 o box3?
Quella della listbox la trovo interessante. Perchè no!
Tutte txt perché devono concatenarsi con la variabile i che cambia ad ogni iterazione di ciclo. Cmq penso che se modifichi rischi di creare solo altri problemi perché poi ci sono le altre Sub che hanno come riferimenti delle textbox, combobox e celle ancora quelle attuali.
Se aspetti domani ti giro io un nuovo file con queste modifiche e da lì ci si può lavorare su. Adottando più o meno lo stesso sistema, potrai metterci le mani anche tu.
Allora, ho sistemato un po' di cose e ho creato la listbox che popola tutti i nominativi che sono simili a ciò che tu vuoi cercare con la txtRicerca. Quindi se scrivi ROSSI ti mostra tutti i nominativi ROSSI, ma anche solo se scrivi ROS ti mostra tutti i ROSSI e anche tutti coloro che iniziano per ROS...
Dalla listbox scegli quello che ti interessa e la userform principale ti mostra i dati di quel nominativo.
La txtRicerca effettua la ricerca anche se inserisci il Nome, Codice Fiscale, Numero progressivo, Luogo di nascita. Diciamo che in realtà non avrebbe tanto senso estendere la ricerca a tutti questi campi perché se esiste un nominativo chiamato NAPOLITANO e tu scrivi NAPOLI (perché vuoi cercare un nominativo della città di Napoli) nella listbox compariranno tutti quelli di Napoli e tutti coloro che si chiamano NAPOLItano.
Io estenderei la ricerca soli per Cognome, Nome, C.F. e Numero di Prenotazione. Almeno....se ho capito il reale senso di questo tuo programma.
Cmq detto ciò...io capisco che il codice che c'è scritto non è frutto del tuo operato ma che al massimo sei riuscito a fare delle modifiche/aggiunte. Però, guardando un po' le altre Sub, devo dirti che c'è una grande confusione. Righe e righe di codice solo per fare quattro calcoli. Tipo per inserire un nuovo cliente e stata prima utilizzata la funzione MAX passandola a una stringa, poi questa stringa viene passata alla funzione EVALUATE... cioè troppi giri per stabilire il primo rigo disponibile per poter inserire un nuovo cliente.
Se vuoi io ti dò anche volentieri una mano per sistemare il tutto...capisco pure che tu puoi pensare "Ma perché sistemare una cosa che già funziona?"
Vedi tu... è come se per andare a Napoli passi prima per Palermo, poi vai a Roma e alla fine raggiungi Napoli. Secondo me va sistemato e snellito.
Se però vuoi che ti dò una mano deve essere esterno al forum perché si intaserebbe con dei fuori argomenti. Serve che mi fornisci la tua email e ci sentiamo attraverso quella. Attraverso lo staff del forum dovresti chiedere di spedirmi il tuo contatto email...poi mi faccio vivo io. Ovviamente capisci che tra lavoro, famiglia e festività ci vorrà un po' di tempo.
Scusa, perché non creare una discussione alla volta per risolvere un determinato problema, in modo da lasciare traccia di come si possa risolvere? Esiste un cosa chiamata Google, che indicizza qualsiasi sito, più argomenti trattati e più visitatori (possibili nuovi iscritti)!!!
LucaSR,
Onestamente non vedo tutta questa difficoltà ad usare il file in questione. Una volta imparato saranno poi sempre le stesse cose. Sarà usato da me e da 2/3 collaboratori. Tieni presente che i file allegato è una parte dell'intero progetto. Nel MultiPage ad esempio ci sono altre pagine che fanno; calcoli, note, richieste, genera ricevute, eccc......
Ci avevo provato anche io a farlo ravvedere sul suo operato, ma dopo che mi ha risposto come sopra, ho tirato i remi in barca ed ho chiesto venia.
Allora, ho sistemato un po' di cose e ho creato la listbox che popola tutti i nominativi che sono simili a ciò che tu vuoi cercare con la txtRicerca. Quindi se scrivi ROSSI ti mostra tutti i nominativi ROSSI, ma anche solo se scrivi ROS ti mostra tutti i ROSSI e anche tutti coloro che iniziano per ROS...
Ciao Alex, perchè non alleghi il File con le modifiche che hai apportato?
Però, guardando un po' le altre Sub, devo dirti che c'è una grande confusione. Righe e righe di codice solo per fare quattro calcoli. Tipo per inserire un nuovo cliente e stata prima utilizzata la funzione MAX passandola a una stringa, poi questa stringa viene passata alla funzione EVALUATE... cioè troppi giri per stabilire il primo rigo disponibile per poter inserire un nuovo cliente.
Possiamo andare tranquillamente per step, se ciò non è possibile allora aprirò altre nuove discussioni.
per andare a Napoli passi prima per Palermo, poi vai a Roma e alla fine raggiungi Napoli. Secondo me va sistemato e snellito.
Giusto. Il fatto di non aver chiuso la discussione "Risolto" vuol dire che sono interessato nel migliorare il codice. Cè da dire che siam partiti con la richiesta di poter fare una ricerca inserendo COGNOME E NOME, scremando la ricerca riducendo sicuramente omonimia.
Però ciò non toglie che non si possa migliorare snellendo il codice.
Se però vuoi che ti dò una mano deve essere esterno al forum perché si intaserebbe con dei fuori argomenti. Serve che mi fornisci la tua email e ci sentiamo attraverso quella.
Detto questo Alex, ti ringrazio tantissimo per la tua immensa disponibilità e generosità. Non avrei nessun problema nel fornirti la mia mail.
Però vedi, chi come me e alle primissime armi, proprio leggendo in questo Forum, copiando/incollando/modificando/chiedendo e sperimentando, incomincia ad imparare qualcosa e mettere su un "progetto". Sicuramente il progetto conterrà degli errori (inevitabile) e qui entra (secondo me) lo scopo di un FORUM, con tutti i suoi partecipanti, dove poter discutere, interagire e condividere le proprie esperienze anche professionali con tanti altri. ecc.
Quindi alla luce di quanto sopra riportato, per il momento se vorrai dare il tuo contributo e condividerlo in questo Forum, con tutti quanti, sarò più che entusiasta.
Con l'occasione ti saluto e ti auguro Buon Natale a te e ai tuoi cari.
Ci avevo provato anche io a farlo ravvedere sul suo operato, ma dopo che mi ha risposto come sopra, ho tirato i remi in barca ed ho chiesto venia.
Ciao LucaSR, il fatto che io sono ancora qui mi sembra ovvio. Ti pare?
Scusami ma sei te che hai scritto in uno dei post precedente:
LucaSR ha scritto:
Ciao gli darei volentieri uno sguardo, ma purtroppo per inconvenienti tecnici sono senza Office da un paio di settimane cmq sicuramente ci sarà chi ti potrà aiutare e chi già ti ha aiutato.
Forse dopo Natale ritornerò attivo.
Un caro saluto.
Io lo allego anche il mio file ma ti funzionerà solo quella parte della ricerca. Tutto il resto no... perché come ti dicevo ho modificato la struttura del foglio e i nomi dei controlli textbox e combobox. Quindi adesso ogni altra tua azione non funzionerà...anzi andrà in debug.
Se non hai fretta sistemo almeno altre 2/3 cose e poi lo allego. Da quel momento in poi si può lavorare. Io cmq ti consiglio di sistemare la sezione dedicata al Nuovo Cliente (io già lo sto facendo...poi ti mostrerò). Cioè sto dedicando una UserForm a parte per l'iscrizione di un nuovo cliente, mentre quella quella che è gia presente la riserviamo per la consultazione.
In teoria è possibile lasciare anche la stessa...cmq ora finisco alcune cose e poi ti faccio la mia proposta
Grazie ancora Alex,
come detto in un post precedente non ho fretta. Appena sistemi le ultime cose allega il file, cosi mi rendi partecipe. Se andrà in debug, non preoccuparti ci penserò io a sospendere e/o modificare l'errore o a chiedere il vostro aiuto. Come hai potuto notare in cima ho anche inserito "Option Explicit" proprio per avere la certezza che i codici siano scritti nel modo migliore. Questo è quello che ho letto in rete. Correggimi se sbaglio.
ho anche inserito "Option Explicit" proprio per avere la certezza che i codici siano scritti nel modo migliore
Ottimo, buono e giusto quello che hai fatto. Ma il motivo non è che così il codice viene scritto nel modo migliore.
Option Explicit è solo una direttiva al compilatore.
Impone la dichiarazione esplicita di tutte le variabili nel corpo del programma. Se utilizzato, è necessario includere l'istruzione Option Explicit in un file prima di tutte le altre istruzioni del codice sorgente.
Quando il codice contiene in testa l'istruzione Option Explicit, è necessario che tutte le variabili vengano dichiarate in modo esplicito utilizzando l'istruzione Dim o ReDim. Se si utilizza il nome di una variabile non dichiarata, in fase di compilazione verrà generato un errore. Quindi questo è utile per evitare errori di digitazione: scrivere variabili con 0 cioè zero al posto di O (O maiuscola) oppure l (elle minuscola al posto di 1) è facile e si rischia di perdersi in errori di logica difficili da scovare).È consigliabile utilizzare l'istruzione Option Explicit anche per evitare errori nella digitazione dei nomi di variabili esistenti o confusione nel codice nei casi in cui l'ambito della variabile non sia chiaramente definito. Se non si utilizza l'istruzione Option Explicit, tutte le variabili non dichiarate sono di tipo Object, con conseguente enorme spreco di memoria (un oggetto Object occupa parecchi byte di memoria).
Per rendere automatico e obbligatorio l'inserimento di Option Explicit si procede in questo modo:
Strumenti --> Opzioni --> linguetta Editor --> spunta "Dichiarazione di variabili obbligatoria".Si possono fare utili esempi che dimostrano l'utilità di Option Explicit (grazie @scossa). Ma non voglio appesantire oltre questo post.
Quindi questo è utile per evitare errori di digitazione: scrivere variabili con 0 cioè zero al posto di O (O maiuscola) oppure l (elle minuscola al posto di 1) è facile e si rischia di perdersi in errori di logica difficili da scovare).
Buongiorno Vecchio Frac,
infatti mi è successo. Alcune volte nel modificare porzioni di codice, sono caduto in questo errore. Questa è una delle cause della poca conoscenza. Vabbè andiamo avanti.
Detto questo ho seguito il tuo consiglio, ho spuntato il modo automatico. Grazie mille per la tua spiegazione e indicazione.
Se posso aggiungere un altro consiglio, imposterei il font dell'editor di VBA a un carattere monospazio e facile da leggere (anni fa utilizzavo Courier New, poi sono passato a Consolas e da poco ho installato Cascadia Code che consiglio a tutti).
Se posso aggiungere un altro consiglio, imposterei il font dell'editor di VBA a un carattere monospazio e facile da leggere (anni fa utilizzavo Courier New, poi sono passato a Consolas e da poco ho installato Cascadia Code che consiglio a tutti).
Grazie, sono qui per questo motivo. Chiaramente giusto per capire bene, ti riferisci al font delle txtbox? Io li ho tutti e tre. L'ulima, Cascadia code, però ha al suo interno una marea di opzioni,quale scegliere secondo te:
extralight
" " corsivo
Light
Light Italic
Semilight Italic
Regular
Italic
ecc......
Non solo il font delle Textbox... mi riferisco al carattere dell'intero editor VBA:
Strumenti -> Opzioni -> Formato editorIo ho impostato "Cascadia Mono Regular (Occidentale)". Solo questione di gusti ovviamente 🙂
Io ho impostato "Cascadia Mono Regular (Occidentale)". Solo questione di gusti ovviamente
Io non ce l'ho ma va scatricato ed installato?
Io non ce l'ho ma va scatricato ed installato?
Sì, è un font Microsoft creato per il nuovo Terminale:
Come promesso ti giro la mia proposta riguardo alla Gestione Clienti. Ci ho impiegato un po' di tempo perché tra le festività (a proposito Buon Anno a tutti), il lavoro e la famiglia, il tempo è sempre stretto. Tra l'altro anche se questo gestionale è abbastanza semplice, di lavoro cmq ce n'è sotto.
Cmq non potevo girarti solo la modifica con la ListBox che elenca i Clienti che hai scelto tramite la txtRicerca. Siccome la mia idea si basava su uno stravolgimento della struttura del tuo Gestionale, sarebbe andato in errore ogni altra cosa. Perciò ho dovuto rivedere il progetto da cima a fondo. Magari prova ad entrare nell'editor VBE e dai uno sguardo.
Ho tolto anche le due InputBox per l'immissione delle Password e le ho sostituite con un'unica UserForm dedicata proprio alla gestione delle Passwrod. Anzi se in futuro devi abilitare altre Password è lavorare ancore con questa UserForm ampliando il codice.
Mi auguro che ciò che ho fatto sia di tuo gradimento e che inizierai ad utilizzare questo Gestionale. Se così fosse possiamo lavorarci su se necessita di ulteriore modifiche/aggiunte. Diciamo che forse qualcosa va ancora sistemato. Poi lo stress-test dovrai farlo tu per scoprire eventuali problemi.
Fammi sapere che ne pensi....
Allegati:
You must be logged in to view attached files.Mi auguro che ciò che ho fatto sia di tuo gradimento e che inizierai ad utilizzare questo Gestionale. Se così fosse possiamo lavorarci su se necessita di ulteriore modifiche/aggiunte. Diciamo che forse qualcosa va ancora sistemato. Poi lo stress-test dovrai farlo tu per scoprire eventuali problemi.
Fammi sapere che ne pensi....
Ciao Alex, grazie e ricambio Buon anno,
detto questo, ho dato una sbirciatina al codice.
Chiaramente non potrò dare un giudizio per la pochissima conoscenza, ma un parere credo di si.
Ritengo (correggetemi se sbaglio) che è vero che hai cancellato tanta roba, però vedo un codice molto ma molto più snello di quello che usavo io.
Uniche cose riscontrate, le evidenzio al fine di approfondire e capire meglio e sono:
1
Hai usato per 7 volte (On error Resume Next).
Ho letto qua e là in rete che non è tanto consigliato usarlo. L'unico dubbio che viene e se lo mettessi in cima dopo Option Explicit, non sarebbe cosa buona e giusta (correggetemi). Invece inserendolo per ogni errore, si può fare?2
Se vado ad eliminare un cliente mi da: errore di compilazione Sub o function non definita - Credo che manchi l'istruzione3
Per la password una userform dedicata; non necessaria almeno per il momento. E' mia intenzione inserirlo all'apertura del file con il seguente codice:Option Explicit
Private Sub Workbook_Open()
Worksheets("Avvia").Select ' Questo è un foglio vuoto e tale rimarrà
Dim x As String
x = InputBox("Per accedere è richiesta una Password!")
If x <> "Pippo" Then ' Se la password non è corretta ris. con msg e chiudi il file
MsgBox "Non hai inserito la Password corretta.", vbExclamation, "ACCESSO NEGATO!"
ThisWorkbook.Close ' Chiudo solo il file e non excel
Else ' Altrimenti se giusto procedi
GestioneDati.Show
End If
End Sub
Ditemi se va bene. Anzi, mi interesserebbe ripetere almeno una seconda volta.Altra cosa che ho notato sul form principale è l'impostazione di tutte le textbox (locked) su TRUE.
Altro userfom per inserire e/o modificare il cliente, era proprio necessaro? Mi chiedo non si può fare tutto dalla userform Gestione dati? Cioè Inserimento e/o modifica cliente se aprire altri userform?
3
Ricerca. Ho notato effettuando una ricerca per numero progressivo, se scrivo ad esempio 11, (Fai una prova con il tuo file) la ricerca me la estende anche su altre textbox tipo, p.iva, ecc.. dandomi risultati sballati.Però questo non mi serve. A me basta Cognome e nome e se si potessero concatenare sarebbe favoloso in modo da scremare già in partenza parte dei clienti con omonimia . Poi va bene tutto il resto.
Altra cosa interessante è il controllo per singola voce dei componenti dell'ospite. Quando salti uno ti dice cosa hai saltato e devi inserire per proseguire.
Alta nota preferisco bloccare il foglio dove ci sono record.
Grazie
Ciao, allora per quanto riguarda 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
Per l'eliminazione di un cliente poi controllo...forse perché il figlio è protetto e nom ho inserito il rigo che lo va a sproteggere prima della eliminazione
Per la questione UserForm che gestisce le Password...si può fare che all'apertura del file ti chiede subito di inserire la password senza la necessità prima di cliccare sul button AVVIO. Ma bisogna spostare il codice sull'evento Open del Workbook. Poi se per il momento non ti serve basta commentare la riga che scatena l'apertura della UserForm frmPassword. 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).
Invece per la doppia UserForm dei Clienti, penso che sia più funzionale lasciare una UserForm che visualizzi i dati dei clienti, mentre un'altra dedicata per la manipolazione dei dati. È vero che sono simili tra loro... però devi immaginare che ogni volta devi modificare il comportamento di tutti i button presenti nella UserForm. 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.
Per la ricerca, io ho voluto mostrarti che è possibile utilizzare un metodo con la Listbox ed estendere in un unico modo la ricerca su più colonne. Chiaro è che in questo modo se tu scrivi 11 e 11 è compreso sia nel NumeroProgressivo, o la DataArrivo, DataPartenza, NumeroPrenotazione...ovviamente lui trova vari clienti. Io estenderei la ricerca solo per Cognome, Nome e Codice Fiscale. Poi devi dirmi tu se può bastare. Il metodo della concatenazione secondo me non è valido. Finché cerchi Rossi Mario va anche bene. Ma se il cliente ha due o più cognomi? MARTINO DE CARLES Mario...se tu scrivi MARTINO Mario la ricerca non troverà nulla. Meglio scrivere solo il cognome o nome e lui ti elenca i risultati nella ListBox come primo filtraggio. Poi tu consulti i clienti trovati e selezioni quello che ti interessa.
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.
Prova questa nuova versione. Ho sistemato il problema legato alla eliminazione di un cliente. Adesso quando avvii il file, il database si avvia direttamente con la richiesta della password senza mostrarti l'applicativo Excel. Una volta effettuato l'accesso ti mostrerà la UserForm principale. Ti ho aggiunto un pulsante SETUP che, dopo aver messo una password di tipo ADMIN (devi digitare 'pixel'), ti mostrerà l'applicativo Excel con i fogli...così se hai bisogno di effettuare modifiche lo puoi fare da qui. Ho tolto nella RicercaCliente la possibilità di effettuare ricerca per NumeroProgressivo. Rimangono quindi solo per Cognome, Nome, DataArrivo, DataPartenza, Partita IVA, C.F. e NumeroPrenotazione.
Poi ci sarebbe quel button FATTURA ma non so a cosa serve. Se mi dici cosa dovrebbe fare ci si può lavorare.
Cmq prova a vedere la nuova versione e dimmi cosa ne pensi.
Allegati:
You must be logged in to view attached files.Scusate ma per quanto ne so io, un gestionale efficiente non elimina i clienti ma li disattiva
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. Ma nel 99,9% dei casi, archivierei i nominativi. Se a @pixel interessa un ragionamento del genere si può adattare il programma.
-
AutoreArticoli
