|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, sto cercando di capire meglio i concetti per inserire all'occorrenza nelle macro delle InputBox che permettano di eseguire alcuni comandi senza dovere aprire tutte le volte l'editor. Nel seguente caso specifico, la macro Code:Sub cerca1() Dim Myvalue As Long Myvalue = InputBox("DIGITA IL CODICE DA CERCARE IN TABELLA 1", "CERCA CODICE") For n = 2 To Cells(2, 3).End(xlDown).Row Set area = Range(Cells(n, 3), Cells(n, 7)) For Each cl In area If cl = Myvalue Then With cl .Interior.ColorIndex = 36 End With End If Next cl Set area = Nothing Next n End Sub
cerca da riga 2 all'ultima riga scritta della tabella, da col.3 a col.7, il codice che si inserisce nella InputBox e ne colora la cella col colore 36 Supponendo di volere mantenere l'impianto organizzativo della macro, ma di volere aggiungere una InputBox che mi permetta di effettuare sì la ricerca nel Range(Cells(n, 3), Cells(n, 7)), ma specificando una delle colonne da 3 a 7 in cui effettuare la ricerca come mi devo comportare? Ho provato a leggere con attenzione quest'altra stupenda macro che il caro a10n11 mi ha appositamente preparato Code:Sub cerca2() Dim Myvalue As Long Dim Mycolor As Long Myvalue = InputBox("DIGITA IL CODICE DA CERCARE", "CERCA CODICE") Mycolor = InputBox("DIGITA RIFERIMENTO COLORE : numerico", "DIGITA COLORE") For n = 2 To Cells(2, 3).End(xlDown).Row Set Area = Range(Cells(n, 3), Cells(n, 7)) For Each cl In Area If cl = Myvalue Then With cl .Interior.ColorIndex = Mycolor End With End If Next cl Set Area = Nothing Next n End Sub in cui ha aggiunto la InputBox Mycolor che consente di colorare la cella col colore che desidero in quel particolare momento della ricerca (multipla, dato che ho poi la possibilità di avere evidenziati parecchi codici nella stessa tabella, con enorme comodità di consultazione!!). Ho cercato di ricavarne i concetti per cavarmela da solo senza dovere tutte le volte chiedere aiuto per queste piccolezze, ma confesso pubblicamente i miei enormi limiti nei confronti di questa stupenda Scienza che non consente né approssimazioni, né invenzioni strampalate, pur concedendo la fantasia di nominare a piacere le variabili (che non è poco)... Chiedo lumi: che variazioni bisogna apportare al testo della macro? Grazie infinite e buona serata eZio
|
|
|
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve ti basta assegnare ad un'altra variabile il valore di colonna su cui effettuare la ricerca. vedi come modificare: Sub cerca1() Dim Myvalue As Long Dim Mytab As Long Myvalue = InputBox("DIGITA IL CODICE DA CERCARE IN TABELLA 1", "CERCA CODICE") Mytab = InputBox("COLONNA TABELLA DOVE EFFETTUARE LA RICERCA", "NUMERO COLONNA TABELLA") Mytab = Mytab + 2 ur = Cells(2, 3).End(xlDown).Row For n = 2 To ur Set area = Range(Cells(n, Mytab), Cells(ur, Mytab)) For Each cl In area If cl = Myvalue Then With cl .Interior.ColorIndex = 36 End With End If Next cl Set area = Nothing Next n End Sub Nel caso della soprastante macro, la variabile Mytab, richiede il numero della colonna di tabella 1 su cui effettuare la ricerca. Nota: La tabella 1 ha 5 colonna da 3 a 7 . se si vuole effettuare la ricerca sulla 1 colonna della tabella si dovrà indicare il numero 1 il numero 2 per la secondo ecc. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, Grazie assai!! E' bellissima. Prima di interpellarti ho cercato anche nel sito di ennius, che parla abbastanza bene di questo argomento, ma non ho trovato nulla di specifico che assomigli neppure lontanamente a questa tua meraviglia... La cosa veramente che mi sorprende di più è l'essenzialità delle tue creature... con quattro righe (pure corte...) riesci a far fare tutto il lavoro in modo elegante e sopra tutto ordinato... Grazie ancora... e buona serata, eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, chiedo scusa, ma non riesco a capire perché al lancio della macro... non termina (rimane attiva la clessidra) e devo terminare l'operazione usando il tasto Esc. Al ché in tabella- fino in fondo- il codice è correttamente evidenziato... non capisco da cosa possa dipendere, dato che l'impianto della macro è stato mantenuto fedele a quello precedente e i riferimenti della tabella1 sono giusti... Grazie assai e buona serata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve premendo il tasto Esc ti rimanda al codice della macro con evidenziata in giallo la riga del codice dove è stato sospeso? se è così bisognerebbe vedere il valore delle variabili in modo particolare il valore di "ur" saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, End With End IfNext cl Set area = Nothing Next n Il codice scritto in rosso è quello evidenziato in giallo nell'editor. Ho lasciato trascorrere del tempo e alla fine la macro ha terminato regolarmente... forse bisogna solo limitare il campo di ricerca anche nelle colonne, poiché ur individua l'ultima riga scritta, ma Mytab non ha un range definito in larghezza per cui cerca in tutte le colonne compilate (le tabelle proseguono fino a col.AH); forse basterebbe suggerirgli di cercare solo da col.3 a col.7... Se sbaglio bacchettami senza pietà!! :)) La tabella da scansionare con questa macro inizia da riga 18, da col.3 a col.7, senza righe di interruzione fino al termine della tabella, per cui nella macro ho impostato il codice Code:ur = Cells(18, 3).End(xlDown).Row For n = 18 To ur Set Area = Range(Cells(n, Mytab), Cells(ur, Mytab)) etc. Grazie e buona giornata, eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve rivista la macro e vista la castroneria che mandava in loop il codice. Praticamente si costringeva la macro a rieseguire il codice per tante volte per quante le righe della tabella. Il risultato veniva corretto ma si faceva impazziere il codice. questo è il codice corretto. Sub cerca1() Dim Myvalue As Long Dim Mytab As Long Myvalue = InputBox("DIGITA IL CODICE DA CERCARE IN TABELLA 1", "CERCA CODICE") Mytab = InputBox("COLONNA TABELLA DOVE EFFETTUARE LA RICERCA", "NUMERO COLONNA TABELLA") Mytab = Mytab + 2 ur = Cells(18, 3).End(xlDown).Row Set area = Range(Cells(18, Mytab), Cells(ur, Mytab)) For Each cl In area If cl = Myvalue Then With cl .Interior.ColorIndex = 36 End With End If Next cl Set area = Nothing End Sub saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, Grazie infinite per tutto... anche per non avermi dato pubblicamente dell'Asino. ahahahah Il dimensionamento di Mytab non c'entrava una cippa. E' n che generava l'impazzimento della routine... Grazie assai e buona giornata, corro subito a sostituire la macro... eZio
|
|
Guest |