Excel e gli applicativi Microsoft Office Macro per ricerca parole all'interno della cartella di lavoro

Login Registrati
Stai vedendo 22 articoli - dal 1 a 22 (di 22 totali)
  • Autore
    Articoli
  • #6127 Score: 0 | Risposta

    Daniel

      Buongiorno,

      mi chiamo Daniel e vi scrivo per una richiesta che, per le mie infime conoscenze di vba, sembra insormontabile.

      Anzichè utilizzare il classico comando da barra dei menu, vorrei inserire un pulsante (e fino a qui ci arrivo) nella prima pagina della mia cartella di lavoro excel al quale attribuire il comando TROVA (magari associando la combinazione di tasti CTRL+SHIT+T)

      Se ciò non fosse possibile (purtroppo credo sia così) ho provato con una macro trovata in rete (che ho un po' adattato) per effettuare la ricerca di una parola all'interno dell'intera cartella.

      Purtroppo però riesco ad effettuare la ricerca soltanto nella pagina iniziale e non in tutte le pagine.

      Avete qualche suggerimento in merito?

      Vi ringrazio per l'attenzione e la collaborazione!

      Daniel

      #6128 Score: 0 | Risposta

      Luca73
      Partecipante
        58 pts

        Ciao Daniel
        Allega il file e la macro che hai preparato.
        Ti consiglio, inoltre, di provare con il registratore in quanto il trova ha la possibilità di cercare sia su folgio che su cartella.
        Ciao
        Luca

        #6129 Score: 0 | Risposta

        Daniel

          Grazie per la risposta! Appena riesco provo con il registratore.

          Ho la necessità di utilizzare il sistema più semplice possibile.

          Ti ringrazio

          #6162 Score: 0 | Risposta

          Daniel

            Sarà sicuramente per incapacità mia, ma con il registratore non riesco a svolgere l'attività di cui sopra.

            Posso postare la macro che uso attualmente per cercare all'interno di un foglio di lavoro una parola (tra la colonna A e la Z). L'ho trovata in rete (come dicevo sono completamente a digiuno di macro) ed ho solo fatto una stupida modifica per adattare l'area di ricerca alle mie esigenze nel foglio di lavoro.

            Se fosse possibile generalizzarla a tutta la cartella di lavoro avrei già fatto un notevole passo avanti.

            Sono conscio che il comando trova è assolutamente in grado di svolgere quanto sto cercando di fare, ma purtroppo mi è stata fatta questa richiesta...

            Purtroppo non c'è modo di "spostare" il binocolino dalla barra dei menu ad un pulsante in mezzo ad un file excel... peccato 🙁

            Sub CasellaDiTesto3_Click()
            On Error GoTo 10
            'Dim trovato As Boolean
            Dim I As Long
            Dim TextToFind As String
            Dim Msg As String, Stile As String, Titolo As String
            Dim Response As Integer, Record As Integer
            TextToFind = InputBox("Cosa vuoi cercare?")

            Columns("A:Z").Select
            Selection.Interior.ColorIndex = xlNone
            Record = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
            For I = 2 To Sheets.Count
            Selection.Find(What:=TextToFind, After:=ActiveCell, LookIn:=xlFormulas, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False).Activate

            Titolo = "Ricerca Record"
            Msg = "È stato trovato il Record: " & ActiveCell & " Continuare ?"
            Stile = vbYesNo + vbCritical + vbDefaultButton2

            Response = MsgBox(Msg, Stile, Titolo)
            If Response = vbNo Then
            ActiveCell.Select

            With Selection.Interior
            .ColorIndex = 36
            End With

            End
            End If
            Next I
            End
            10:
            MsgBox "Testo non trovato!"
            Range("A2").Select
            End Sub

            Ringrazio ancora una volta per la collaborazione e mi scuso per il tempo che vi ho fatto perdere

             

            #6164 Score: 0 | Risposta

            Marius44
            Moderatore
              58 pts

              Ciao Daniel

              Ti è stato chiesto di allegare il tuo file (senza dati sensibili) in modo da poterci lavorare sopra.

              Ad occhio noto quanto segue:

              a) la macro dovrebbe passare in rassegna tutti i fogli ma non c'è nulla che selezioni un foglio dopo l'altro (c'è un Columns("A:Z").Select ma non si riferisce ad alcun Foglio ed è fuori dal ciclo For ... Next

              b) se non trova il testo cercato in un Foglio esce dalla sub senza andare al successivo Foglio

              c) una volta trovato il testo cercato non specifica nel messaggio nè il Foglio nè la cella.

              Aspettiamo il file. Ciao,

              Mario

              #6165 Score: 0 | Risposta

              Daniel

                Ciao Marius, mi iscrivo...

                ...pulisco un po' il foglio e vi mando il tutto!

                Per l'ennesima volta: Grazie!

                #6183 Score: 0 | Risposta

                Hannavald
                Partecipante

                  Buongiorno,

                  allego il file come richiesto.

                  La ricerca dovrà avvenire ovviamente all'interno delle tabelle excel (in questo caso ho inserito soltanto Settore A e Settore B, ma saranno di più) della cartella di lavoro.

                  Non occorre che sia vincolata ad una colonna specifica.

                  L'utente potrebbe dover ricercare un codice o una descrizione.

                  Nel caso di più risultati, se fosse possibile che la ricerca non si fermasse al primo risulato utile sarebbe un ulteriore plus!

                  Nel caso in cui non vi fossero risultati è possibile che compaia un avviso?

                  Lo so che con la funzione TROVA avrei già risolto il problema... ma mi è stata chiesta questa soluzione alternativa.

                  Vi ringrazio per la ennesima volta.

                  Allegati:
                  You must be logged in to view attached files.
                  #6191 Score: 0 | Risposta

                  Marius44
                  Moderatore
                    58 pts

                    Ciao

                    Prova a sostituire la tua macro con questa (che è senz'altro da affinare)

                    Sub ricerca()
                    titolo = "Ricerca Record"
                    mes = "Inserisci cosa cercare"
                    X = InputBox(mes, titolo)
                    If X = "" Then Exit Sub 'se non scrivo niente nella finestra esco dalla routine
                        
                    For I = 2 To Sheets.Count
                      With Worksheets(I).Range("A2:AE103")
                        Set c = .Find(X, LookIn:=xlValues)
                                    '(What:=X, After:=ActiveCell, LookIn:=xlFormulas, _
                                    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                                    MatchCase:=False)'
                        If Not c Is Nothing Then
                          firstAddress = c.Address
                          Msg = "Trovato " & X & " " & Sheets(I).Name & " " & c.Address & vbLf & "Vuoi Continuare?"
                          Risp = MsgBox(Msg, 4, titolo)
                          If Risp = vbNo Then
                            Exit Sub
                          Else
                            Do
                              Set c = .FindNext(c)
                            Loop While Not c Is Nothing And c.Address <> firstAddress
                          End If
                        Else
                          'se non ha trovato
                          Msg = "Nessuna corrispondenza nel Foglio " & Sheets(I).Name
                          MsgBox Msg, 0, titolo
                        End If
                      End With
                    Next I
                    End Sub

                    Fai sapere. Ciao,

                    Mario

                    #6270 Score: 0 | Risposta

                    Hannavald
                    Partecipante

                      Beh punto primo: grazie infinite!

                      Sei andato vicinissimo alla perfezione al primo colpo!

                      Ti chiedo soltanto:

                      - è possibile che visualizzi la pagina in cui trova il risultato?

                      - non limitare la ricerca al primo risultato utile per pagina?

                       

                      #6271 Score: 0 | Risposta

                      Marius44
                      Moderatore
                        58 pts

                        Ciao

                        Prova sostituendo la precedente con quest macro (ripeto, sarebbe da affinare)

                        Sub ricerca()
                        Titolo = "Ricerca Record"
                        mes = "Inserisci cosa cercare"
                        X = InputBox(mes, Titolo)
                        If X = "" Then Exit Sub 'se non scrivo niente nella finestra esco dalla routine
                            
                        For i = 2 To Sheets.Count
                          With Worksheets(i).Range("A2:AE103")
                            Set c = .Find(X, LookIn:=xlValues)
                            primo = c.Address
                            If Not c Is Nothing Then
                              firstAddress = c.Address
                              GoSub Trovato
                              If Risp1 = vbNo Then
                                Exit Sub
                              Else
                                Do
                                  Set c = .FindNext(c)
                                  If c.Address = primo Then GoTo nxt
                                  GoSub Trovato
                                  If Risp1 = vbNo Then Exit Do
                                Loop While Not c Is Nothing And c.Address <> firstAddress
                              End If
                            Else
                              'se non ha trovato
                              Msg = "Nessuna corrispondenza nel Foglio " & Sheets(i).Name
                              MsgBox Msg, 0, Titolo
                            End If
                          End With
                        nxt:
                        Next i
                        Exit Sub
                        '
                        Trovato:
                          Msg = "Trovato " & X & " " & Sheets(i).Name & " " & c.Address & vbLf & "Vuoi Continuare?"
                          Risp1 = MsgBox(Msg, 4, Titolo)
                          If Risp1 = vbNo Then   'se la risposta è NO
                            'chiede se vuole selezionare la cella
                            Risp = MsgBox("Vuoi selezionare la cella?", 4, Titolo)
                            If Risp = vbYes Then                  'se la risposta è SI
                              Sheets(i).Select                    'seleziona Foglio
                              Sheets(i).Range(c.Address).Select   'seleziona cella
                              Exit Sub
                            End If
                          End If
                          Return
                        End Sub
                        

                        Fai sapere. Ciao,

                        Mario

                        #6272 Score: 0 | Risposta

                        hannavald

                          E' già una meraviglia!

                          Ultimo piccolo problema riscontrato: se non trova alcunrisultato dà un errore: Errore di run-time "91":

                          Variabile oggetto o variabile del blocco With non impostata

                          Per il resto è perfetta!!

                          Grazie mille!!!

                          #6273 Score: 0 | Risposta

                          Marius44
                          Moderatore
                            58 pts

                            Ciao

                            Hai ragione. Un piccolo lapsus

                            Correggi la riga 9 così

                            If IsEmpty(c) Then primo = c.Address

                            Fai sapere. Ciao,

                            Mario

                            #6274 Score: 0 | Risposta

                            hannavald

                              Beh che dire: sei un grande ora non dà più l'errore!

                              Non so come ringraziarti!

                              Sei stato veramente troppo gentile ad avermi dedicato il tuo tempo!

                              #6279 Score: 0 | Risposta

                              vecchio frac
                              Senior Moderator
                                272 pts

                                Poiché "c" è un oggetto di tipo Range avrei testato meglio con Not Is Nothing(c).

                                Comunque nel codice vedo che "c" non è dichiarata come variabile di tipo Range quindi vorrei raccomandare sempre di intestare i propri moduli con Option Explicit. Questa raccomandazione la faccio dalla notte dei tempi ma credetemi che può salvarvi molti mal di testa in fase di debug 🙂

                                Anzi, aggiungete questa direttiva di default dalle opzioni dell'IDE (Strumenti > Opzioni > Editor > Dichiarazioni di variabili obbligatoria)

                                #6283 Score: 0 | Risposta

                                Marius44
                                Moderatore
                                  58 pts

                                  Passano gli anni e VF non si smentisce. E' il Migliore.

                                  Ciao,

                                  Mario

                                  #6287 Score: 0 | Risposta

                                  vecchio frac
                                  Senior Moderator
                                    272 pts

                                    Così mi fai fare la figura del saputello e non voglio 🙂

                                    Ci sono quelli "più ottimi" di me  che lavorano nell'ombra, io cerco di riportare la mia esperienza agli altri come fu fatto con me parecchi anni fa.

                                    SuperMario meno male che ci sei 😉

                                    #6294 Score: 0 | Risposta

                                    Hannavald

                                      Mi sono ripromesso di applicarmi e di imparare almeno i fondamenti.

                                      Purtroppo in questo situazione avevo tempi estremamente ristretti e non ci sarei mai riuscito senza il vostro, per me, miracoloso intervento!

                                       

                                      #6326 Score: 0 | Risposta

                                      vecchio frac
                                      Senior Moderator
                                        272 pts

                                        If Not (c Is Nothing)

                                        è la sintassi corretta.

                                        #6425 Score: 0 | Risposta

                                        Hannavald

                                          Proverò ad applicare questa modifica.

                                          In questo momento però la macro non mi dà alcun errore!

                                          Domani vi mostrerò alcuni miei primi tentativi di macro per svolgere semplici operazioni, magari (anzi sicuramente) riuscite a darmi qualche dritta!

                                          Ovviamente nei ritagli di tempo!

                                          Odio non poter essere d'aiuto e chiederlo agli altri...

                                          #6428 Score: 0 | Risposta

                                          vecchio frac
                                          Senior Moderator
                                            272 pts

                                            wrote:Proverò ad applicare questa modifica.

                                            Mica per forza, soprattutto se il codice fa quello che deve. Il mio era solo un suggerimento tecnico per migliorare il codice.

                                            Che tra parentesi, soprattutto nella seconda versione mi piace veramente poco per via dei Gosub e dei Goto che leggo all'interno... brrr 🙂

                                            #6498 Score: 0 | Risposta

                                            hannavald

                                              Beati voi che vedete queste finezze.

                                              Io per copiare dei dati in colonna da un foglio ad un altro ho creato una macro per ogni colonna.

                                              Sto cercando di capire come unificare i copia-incolla in una unica macro.

                                              Sono proprio un asino, ma nel fine settimana comincio a studiare la guida.

                                              Mi sto appassionando pur nella mia incapacità infinita

                                              #6499 Score: 0 | Risposta

                                              vecchio frac
                                              Senior Moderator
                                                272 pts

                                                Appassionarsi è cosa ottima e giusta 🙂

                                                Fai pure i tuoi tentativi e crea nuove discussioni per... discutere insieme a noi 🙂

                                              Login Registrati
                                              Stai vedendo 22 articoli - dal 1 a 22 (di 22 totali)
                                              Rispondi a: Macro per ricerca parole all'interno della cartella di lavoro
                                              Gli allegati sono permessi solo ad utenti REGISTRATI
                                              Le tue informazioni: