Forum di Excel e VBA, per condividere esperienze e risolvere problemi su: Excel, Word, Access, Power Point, Microsoft Office, macro, Visual Basic e Visual Studio.
Trova successivo di alessia (utente non iscritto) data: 27/01/2014 11:03:45
Buongiorno a tutti,
Ho un piccolo problema che non riesco a risolvere e avrei bisogno di un Vostro aiuto che per voi esperti sicuramente sarà molto semplice..
Allora.Se scrivo nella textbox di ricerca chiamata "TxtNome" posso effettuare una ricerca Cliente non necessariamente inserendo tutto il contenuto della cella es B2.
Esempio: nella colonna B sono riportati i nomi e cognomi dei clienti. Inserendo questa istruzione If c.Value Like "*" & txtNome & "*" & txtNome & "*" Then
mi permette di inserire nel campo di ricerca anche solo il cognome "Rossi" non necessariamente tutto il contenuto della cella es. "Rossi Mario". Fin qui tutto bene.
questo sotto è il codice in questione;
Private Sub cmdIniziaRicerca_Click()
Dim ctrl As Control
Dim lCampo As Long
Dim lRif As Long
Dim c As Range
Dim rng As Range
Dim lUltRiga As Long
lCampo = 0
With Me
With .frSelezionaCampo
For Each ctrl In .Controls
If ctrl.Value = True Then
lCampo = Mid(ctrl.Name, _
4, Len(ctrl.Name))
End If
Next
End With
If .txtRicerca <> "" And lCampo <> 0 Then
lUltRiga = sh.Range( _
"A" & Rows.Count).End(xlUp).Row
Set rng = sh.Range("A2:E" & lUltRiga)
For Each c In rng.Range( _
Cells(1, lCampo), _
Cells(lUltRiga, lCampo))
'If c.Value = .txtRicerca.Text Then
If c.Value Like "*" & txtNome & "*" & txtNome & "*" Then ' effettua la ricerca del cognome/nome oppure del solo cognome
Set ctrl = Nothing
Set c = Nothing
Set rng = Nothing
End Sub
Il problema è questo:
Ho un tasto che mi trova il risulato successivo "Trova Successivo" ma questo funziona solo se nel campo di Ricerca io scrivo il cognome e nome.
Cerco di spiegarmi meglio. Se effettuo una ricerca in questo modo es. "Rossi Mario" mi trova il primo risultato e pigiando sul Tasto "Trova Successivo" mi trova l'altro/i Rossi Mario.
Se invece nella ricerca scrivo solo il cognome "Rossi" la ricerca viene fatta regolarmente ma quando pigio il tasto "Trova Successivo" non va avanti.
Invece deve andare avanti dandomi gli altri clienti "Rossi". es. Rossi Mario, Rossi Michele ecc....
Sto facendo varie prove ma non ne esco fuori. Cosa mi sfugge? Cosa Sbaglio?
qui sotto inserisco il codice del trova successivo dove ho il problema.
Private Sub cmdTrovaSuccessivo_Click()
Dim ctrl As Control
Dim lCampo As Long
Dim lRif As Long
Dim c As Range
Dim rng As Range
Dim lUltRiga As Long
lCampo = 0
With Me
With .frSelezionaCampo
For Each ctrl In .Controls
If ctrl.Value = True Then
lCampo = Mid(ctrl.Name, _
4, Len(ctrl.Name))
End If
Next
For Each c In rng.Range( _
Cells(1, lCampo), _
Cells(lUltRiga, lCampo))
' If c.Value = .txtRicerca.Text Then
'If c.Value Like "*" & txtNome & "*" & txtNome & "*" Then
If c.Value Like "*" & txtNome & "*" & txtNome & "*" Then
Set ctrl = Nothing
Set c = Nothing
Set rng = Nothing
End Sub
Grazie a tutti anticipatamente....
scossa di scossa data: 27/01/2014 11:34:27
questa istruzione:
If c.Value Like "*" & txtNome & "*" & txtNome & "*"
non ha molto senso, a runtime sarebbe:
If c.Value Like "*Rossi*Rossi*"
di alessia (utente non iscritto) data: 27/01/2014 11:56:19
Ciao Scossa,
Grazie per la tua risposta.
Allora, questa riga inserita nel primo codice di ricerca;
If c.Value Like "*" & txtNome & "*" & txtNome & "*" Then
mi effettua la ricerca voluta. Posso effettuare la ricerca sia per cognome/nome oppure inserendo solo il cogmone.
Io ciò che non riesco a fare e nel secondo codice inserito nel post, dove mi deve trovare l'altro Rossi. Chiaramente Rossi è solo un esempio ma di cliente sono tanti. Quindi non posso inserire la ricerca mirata a Rossi Mario.
Ritengo che sia una piccola modifica nel secondo codice che a me sfugge.
Il secondo codice deve funzionare dandomi altro risultato dello stesso cognome.
Grazie.....
di scossa data: 27/01/2014 12:01:00
Ciao,
cit.: "If c.Value Like "*" & txtNome & "*" & txtNome & "*" Then
mi effettua la ricerca voluta. Posso effettuare la ricerca sia per cognome/nome oppure inserendo solo il cogmone."
Come fa a cercare DUE valori diversi se metti due volte la STESSA variabile (txtNome)??
Comunque ti consiglio di alleghera il file, altrimenti credo nessuno si metta a crearlo ex-novo per aiutarti .....
di scossa data: 27/01/2014 12:09:50
errata: alleghera
corrige: allegare
di alessia (utente non iscritto) data: 27/01/2014 12:15:30
Ti sembrerà strano, ma dalle tante prove che ho fatto funziona. Il solo problema è nella seconda fase "trova successivo".
Il file è tutto pieno di dati. Le userform lo stesso . Un casino.... cancellare tutto..... Se proprio non è possibile vedo quello che posso fare....
Vedo se trovo un vecchio file..... Grazie Scossa. Ti faccio sapere al più presto
By Alessia
di alessia (utente non iscritto) data: 27/01/2014 12:41:35
Ciao Scossa,
Ti ho allegato il file. Come potrai notare, se effettui una ricerca per nome e cognome
il tasto trova successivo Funziona. Se invece digiti solo il cognome, trovato il primo, il tasto trova successivo non va avanti.
Username/Password per accedere alla rubrica è la stessa: ale
per entrare nel foglio del Database è : alessia
Grazie
di scossa data: 27/01/2014 13:51:56
cit. alessia: "Ti sembrerà strano, ma dalle tante prove che ho fatto funziona."
Io non ho detto che non funziona, ho detto che non ha senso, visto che "*" & txtNome & "*" è più che sufficiente (tutto quello che segue il secondo asterisco viene ignorato).
Riguardo a "Come fa a cercare DUE valori diversi se metti due volte la STESSA variabile (txtNome)??"
credevo che utilizzassi (come sarebbe d'obbligo in un archivio fatto bene) due campi separati per cognome e nome.
Ora veniamo alle tirate di orecchie:
Private Sub CommandButton1_Click()
Application.Quit
End Sub
Private Sub CommandButton3_Click()
Application.Quit
End Sub
L'istruzione Application.Quit andrebbe eliminata dal VBA ma, sembra impossibile, è invece l'istruzione che più piace a chi comincia ad usare il VBA (evidentemente da un senso di potere!).
Se il file è per tuo uso personale puoi fare quello che vuoi, ma se lo dai ad altri per quale motivo ti arroghi il diritto di far chiudere tutto Excel anziché limitatri a chiudere il tuo file? Chi lo usa potrebbe avere un altro file aperti su cui ha perso molto tempo, e se sbaglia a rispondere all'alert si trova ad aver perso tutto il SUO lavoro per un tuo sfizio!!!
Seconda tirata di orecchie: ho guardato il codice molto superficialmente, ma mi spieghi la necessità di eseguire OGNI SECONDO la sub ColorText()?
Infine la soluzione al tuo quesito:
In Private Sub cmdTrovaSuccessivo_Click() sostituisci
If c.Value = .txtRicerca.Text Then
con
If c.Value Like "*" & .txtRicerca.Text & "*" Then
di alessia (utente non iscritto) data: 27/01/2014 20:45:14
Ciao Scossa, hai ragione sono andata in panico.
Infatti, riflettendo sarebbe stato meglio dividere in celle differenti il Cognome e Nome.
Per le tirate di orecchie ci sono tutte...ahahahahah, me le prendo.
Per quanto riguarda la Application.quit hai pienamente ragione.
Attualmente questo file lo sto usando solo io. In seguito lo userà mio padre ed un dipendente.
Infatti, succede molto spesso di avere altri file excel aperti.
Ho provato ad inserire questa riga per la chiusura: ActiveWorkbook.Close SaveChanges:=False
l'unica cosa che mi rimane aperto Excel vuoto. Direi che è un pò antipatico andarlo a chiudere manualmente.
Accetto tuoi consigli.
Per ultimo quesito credo che tu faccia riferimento alla TextBox chiamata "txtPassword" il valore all'interno
di questa textbox mi lampeggia, il perchè? deve attirare per primo la mia attenzione.
Accetto tuoi consigli.
Grazie per il tempo che mi stai dedicando.
P.s. vedi avevo la soluzione sotto gli okki ma non la vedevo. Grazie a te ho risolto il problema per il trova successivo.
By Alessia
di scossa data: 27/01/2014 21:44:05
cit.: "Ho provato ad inserire questa riga per la chiusura: ActiveWorkbook.Close SaveChanges:=False
l'unica cosa che mi rimane aperto Excel vuoto. Direi che è un pò antipatico andarlo a chiudere manualmente."
A parte che è meglio usare
ThisWorkbook.Close SaveChanges:=False
non devi pensare che si utilizzi Excel solo con il tuo file, ma che normalmente, chi usa excel per lavoro, lo apre la mattina alle 8 e lo chiede a fine giornata lavorativa ......
cit.:"Per ultimo quesito credo che tu faccia riferimento alla TextBox chiamata "txtPassword" il valore all'interno
di questa textbox mi lampeggia, il perchè? deve attirare per primo la mia attenzione."
Ripeto quanto già espresso: se certe "ca..vola..tine" le fai sul tuo pc sono affari tuoi, ma se il file lo dovesse usare uno che col pc ci deve lavorare, ti fischierebbero le orecchie per tutto il giorno.... se vuoi che attiri la tua attenzione mettici un bello sfondo giallo fisso, che le cose lampeggianti dopo 4 secondi danno solo fastidio.
di alessia (utente non iscritto) data: 28/01/2014 12:26:31
Ciao Scossa,
Ho usato il tuoi consigli effettivamente avevi ragione... banale dirlo.....
1- ThisWorkbook.Close SaveChanges:=False
2- ho eliminato il lampeggiare della Textbox
Grazie 1000 per il tuo preziosissimo aiuto.....
Non saprei se chiederti o meno un altro aiuto, oppure aprire una nuova discussione. Fammi sapere grazie.
di scossa (utente non iscritto) data: 28/01/2014 13:39:15
cit. alessia: "Non saprei se chiederti o meno un altro aiuto, oppure aprire una nuova discussione. Fammi sapere grazie."
Questo è un forum pubblico, l'aiuto si chiede a tutti e non ad un utente specifico; eviterai di precluderti l'aiuto di altri utenti e risulterai anche più "simpatica" (personalmente trovo fastidiose le richieste rivolte al singolo - che sia io od un altro - e credo che questo valga anche per gli altri "volontari" del forum).
Detto questo è più corretto aprire una nuova discussione e, su questa, spuntare la casella "discussione risolta".
di alessia (utente non iscritto) data: 28/01/2014 14:08:20
Grazie Scossa,
non sapevo come comportarmi.
Chiedo scusa a tutti se ho sbagliato.
Grazie 1000