|
Rank: AiutAmico
Iscritto dal : 4/27/2004 Posts: 109
|
Ciao a tutti,
in un file excl, ci sono diverse schede esempio scheda 1 , scheda 2 .......10 ; su una scheda che chiamo riepilogo sono indicate tutte le schede da 1 a 10 . Vorrei realizzare un comando sulla scheda riepilogo, in modo tale che se clicco per esempio sul nome XY mi devono apparire tutte le schede che fanno capo a quel nome. Se a XY appartengono solo schede 2 , 5 e 6 cliccando su quel nome in qualche maniera devo sapere che le sue schede sono 2 , 5 e 6.
Ho provato con collegamento ipertestuale , funziona ma mi apre solo una scheda; mi basta anche solo un elenco di esse, non è necessario che me li apra : forse ad aprirle tutte non credo sia possibile.
Saluti.
|
|
|
|
|
Rank: AiutAmico
Iscritto dal : 10/31/2004 Posts: 7,183
|
funzione ……………….. trova ( con l'esatta parola chiave )
|
|
Rank: AiutAmico
Iscritto dal : 5/4/2003 Posts: 2,845
|
Terra terra io aggiungerei un foglio, o una zona del foglio di riepilogo, dedicato alla ricerca con una macro che mi restituisca il foglio, e volendo anche altri elementi, in cui si trova il nome che cerco.
|
|
Rank: AiutAmico
Iscritto dal : 4/27/2004 Posts: 109
|
Grazie per le risposte.
Maopapof: ho capito....e funziona...occorre entrare nelle opzioni della funzione.
Lui49, le macro non sono alla mia portata in quanto non ne sarei capace...chiedo piuttosto: è possibile creare un pulsante che riporti sul foglio la funzione trova senza ogni volta cercarla e impostare i parametri. Ma sicuramente questo implica conoscenze di VB e quindi è quello che propone lui49. Ma sinceramente non ho le competenze per realizzare qualcosa di simile...
Grazie!
|
|
Rank: AiutAmico
Iscritto dal : 5/4/2003 Posts: 2,845
|
Facciamo una prova. Usiamo un foglio aggiuntivo. Aggiungi alla fine dei fogli di lavoro (clic destro sull’ultimo foglio-->inserisci-->foglio di lavoro) e rinominalo in “Cerca”. Tasti alt+f11 e si apre l’editor di visualbasic. Dal menu ‘inserisci’ scegli ‘modulo’. Ti troverai sulla sinistra sotto VBAProject il ‘Modulo1’. Doppio clic sullo stesso e sulla parte di destra incolla tutto questo codice: Code:Sub Trova() Dim I As Byte, Z As Byte Dim TextToFind As String, Area As String
Application.ScreenUpdating = False Area = "A1:Z1000" ' Definisce l'area di ricerca Z = 0 TextToFind = InputBox("Nome?") If TextToFind = "" Then End Sheets("Cerca").Select Cells.ClearContents Range("D3").Select Cells(1, 1) = "La ricerca di ''" & TextToFind & "'', ha dato i seguenti risultati:" Cells(2, 1) = "Rec" Cells(2, 2) = "Posizione" Cells(2, 3) = "Foglio" Cells(2, 4) = "Record" For I = 1 To Sheets.Count - 1 Sheets(I).Select Range(Area).Interior.ColorIndex = xlNone With ActiveSheet.Range(Area) Set c = .Find(TextToFind, LookIn:=xlValues) If Not c Is Nothing Then firstAddress = c.Address Do c.Select Z = Z + 1 Range("Cerca!A" & Z + 2) = Z Range("Cerca!B" & Z + 2) = ActiveCell.Address Range("Cerca!C" & Z + 2) = Sheets(I).Name Range("Cerca!D" & Z + 2) = ActiveCell Set c = .FindNext(c) Loop While Not c Is Nothing And c.Address <> firstAddress End If End With Next I Application.ScreenUpdating = True Sheets("Cerca").Select Range("H1").Select End Sub
Sub Cancella() Sheets("Cerca").Select Range("A1:Z1000").ClearContents ' cancella il contentuto del range End Sub
Salva e chiudi l’editor. Torna al foglio Cerca. Clic destro sulla barra di excel e scegli ‘Moduli’. Nella finestra che si apre seleziona ‘Pulsante’ e disegna un quadratino delle dimensioni che vuoi nella colonna H del foglio. Nella finestra che si apre assegna al pulsante la macro ‘Trova’ e conferma. Clic destro sul pulsante e rinominalo in ‘cerca’. Ripeti l’operazione, anche se non servirebbe, e assegna la macro ‘Cancella’ e rinomina il pulsante. Salva e chiudi. Prova.
|
|
Rank: AiutAmico
Iscritto dal : 4/27/2004 Posts: 109
|
Ciao lui49 e innanzitutto grazie... Ho provato la costruzione della macro, ma mi restituisce questo errore: errore run-time "9" ; sicuramente ho fallito in qualche passaggio: 1- per salvare e uscire dalla macro , ho chiuso la finestra dove ho incollato il codice e sono andato direttamente al folgio di ricerca. Non so se ho fatto bene... 2-i pulsanti da creare sul folcio crea sono due , uno cerca e l'alro chiudi, giusto? 3-dopo che ho creato il pulsante e aver assegnato la macro, clic con tasto destro per rinominare, ma non trovo nel menu che appare la funzione rinomina. Fores sbgalio nel salvare e chiudure che sostanzialmente è una banalità....
|
|
Rank: AiutAmico
Iscritto dal : 5/4/2003 Posts: 2,845
|
Hai rinominato il foglio aggiunto in "Cerca"? 1- Per salvare il codice visual clicca sull'icona a forma di dischetto sulla barra a sinistra e poi chiudi l'editor. 2- cerca e cancella (ho scritto che non servirebbe perchè ogni nuova ricerca cancella i risultati della precedente) 3- clic destro per avere l'editor del pulsante, poi selezioni il nome e lo rinomini.
|
|
Rank: AiutAmico
Iscritto dal : 4/27/2004 Posts: 109
|
Solo un chiarimento....cliccando sul tasto cerca, nel foglio che ho rinominato Cerca, restituisce la finestra con la scritta Nome? all'interno devo digitare un nome presente all'interno delle schede che fanno parte del file excel indipendentemente dalla loro posizione all'interno del foglio di lavoro,giusto? Oppure devono essere inseriti in una cella particolare?
|
|
Rank: AiutAmico
Iscritto dal : 4/27/2004 Posts: 109
|
Ho riprovato, appare la maschera che mi restituisce Nome? inseisco il nome ma da errore run-time 6 overflow.
Ho rinominato il tasto, tutto ok...mentre non trovo il dischetto che mi hai indicato per salvare la macro.
|
|
Rank: AiutAmico
Iscritto dal : 5/4/2003 Posts: 2,845
|
clem ha scritto:Solo un chiarimento....cliccando sul tasto cerca, nel foglio che ho rinominato Cerca, restituisce la finestra con la scritta Nome? all'interno devo digitare un nome presente all'interno delle schede che fanno parte del file excel indipendentemente dalla loro posizione all'interno del foglio di lavoro,giusto? Oppure devono essere inseriti in una cella particolare? Devi inserire il nome. Come risultato ti verrà mostrato in quali fogli e in quali record compare il nome inserito. Il dischetto cui facevo riferimento è l'immaginetta del floppy disk. Oppure fai file-->salva. Quanti fogli di lavoro hai? E quale range di celle occupano, di massima, i dati.
|
|
Rank: AiutAmico
Iscritto dal : 4/27/2004 Posts: 109
|
Ci sono 50 fogli e i dati vanno dalla colonna A a L e righi da 1 a 50;
Quando appare il msg di errore (run-time 6) se clicco su fine , nel foglio di lavoro Cerca appaiono dati, apparentemente senza senso:
colonna Posizione $A$1 colonna Foglio Cerca Record la ricerca di "anna" ha dato i seguenti risutati: (campo vuoto)
cosi fino al n.257
Forse sbaglio qualche passaggio...
|
|
Rank: AiutAmico
Iscritto dal : 5/4/2003 Posts: 2,845
|
Nel codice:
Dim I As Byte, Z As Byte
Sostituisci con:
Dim I As Integer, Z As Integer
|
|
Rank: AiutAmico
Iscritto dal : 4/27/2004 Posts: 109
|
Sostituito la riga del codice...ma restituisce errore 1004:impossibile impostare proprietà colorIndex per la classe Interior
mi riporta poi su una scheda che non contiene il nome che avevo inserito nella fase di cerca.
Ad ogni modo lui49, ti ringrazio per la disponibilità!
|
|
Rank: AiutAmico
Iscritto dal : 5/4/2003 Posts: 2,845
|
Metti un apostrofo (') all'inizio della riga -->Range(Area).Interior.ColorIndex = xlNone
'Range(Area).Interior.ColorIndex = xlNone
|
|
Rank: AiutAmico
Iscritto dal : 4/27/2004 Posts: 109
|
Funziona, lui49!
Solo un particolare: ho digitato il nome anna (per esempio) e nella scheda "Cerca" sono apparse le scheda a lei collegate, ma dopo che sono apparse 999 righe con la seguente scritta, ovviamente dal n.1 al 999:
989 $D$990 Cerca La ricerca di ''anna'', ha dato i seguenti risultati:
poi alla 1000ma riga e 1001 sono apparse le schede collegate al nome in oggetto.
|
|
Rank: AiutAmico
Iscritto dal : 5/4/2003 Posts: 2,845
|
Prova a sostituire tutto il codice con questo Code:Sub Trova() Dim I As Integer, Z As Integer Dim TextToFind As String, Area As String Application.ScreenUpdating = False Area = "A1:Y1000" ' Definisce l'area di ricerca Z = 0 TextToFind = InputBox("Nome?") If TextToFind = "" Then End Sheets("Cerca").Select Cells.ClearContents Cells(1, 1) = "La ricerca di ''" & TextToFind & "'', ha dato i seguenti risultati:" Cells(2, 1) = "Rec" Cells(2, 2) = "Posizione" Cells(2, 3) = "Foglio" Cells(2, 4) = "Record" For I = 1 To Sheets.Count - 1 Sheets(I).Select With ActiveSheet.Range(Area) Set c = .Find(TextToFind, LookIn:=xlValues) If Not c Is Nothing Then firstAddress = c.Address Do c.Select Z = Z + 1 Range("Cerca!A" & Z + 2) = Z Range("Cerca!B" & Z + 2) = ActiveCell.Address Range("Cerca!C" & Z + 2) = Sheets(I).Name Range("Cerca!D" & Z + 2) = ActiveCell Set c = .FindNext(c) Loop While Not c Is Nothing And c.Address <> firstAddress End If End With Next I Application.ScreenUpdating = True Sheets("Cerca").Select Range("H1").Select End Sub
Sub Cancella() 'ActiveSheet.Protect DrawingObjects:=False, contents:=False, Scenarios:=False
Sheets("Cerca").Select Range("A1:Y1000").ClearContents ' cancella il contentuto del range 'ActiveSheet.Protect DrawingObjects:=True, contents:=True, Scenarios:=True
End Sub
|
|
Rank: AiutAmico
Iscritto dal : 4/27/2004 Posts: 109
|
Ho aperto la macro con F11 eliminato le iostruzioni presenti e ho incollato la nuiova e salvato il file. (non so se la procedura è corretta). Ma non è cambiato nulla, i risultati vengono evidenziati dopo 999 righe...però funziona mi segnale le schede collegate al nome che cerco...
|
|
Rank: Member
Iscritto dal : 9/7/2015 Posts: 22
|
Buona domenica a tutti In un file nuovo ho lasciato 3 (per fare le prove) Fogli. Ho rinominato il primo "Cerca". Ho aperto l'Editor di VBA ed in un Modulo standard ho inserito le macro proposte. Ho apportato questa modifica: invece della riga For I = 1 To Sheets.Count - 1 ho lasciato la stessa riga ma ho tolto il -1 (altrimenti non mi "leggeva" l'ultimo Foglio.
Confermo che la ricerca viene eseguita regolarmente ed i risultati vengono elencati nelle prime righe (quelle necessarie) del Foglio Cerca. Non c'è nulla dopo la riga 999 Ciao, Mario
|
|
Rank: AiutAmico
Iscritto dal : 5/4/2003 Posts: 2,845
|
Prova ad escludere l'istruzione c.Select
con 'c.Select
|
|
Guest |