|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, innanzi tutto chiedo scusa per il titolo orrendo, ma non sapevo proprio come sintetizzare al massimo ciò che vorrei realizzare (se è possibile): in un foglio ho una tabella sintetica nelle cui celle sono scritti dei codici (uno per cella) che scaturiscono da altre tabelle scritte nello stesso foglio. Dato che l'operazione di ricerca della tabella relativa a ciascun codice della tabella sintetica è piuttosto laboriosa e deconcentrante, vorrei fare in modo che selezionando ciascuna cella della tabella sintetica ci si trasferisse nella relativa tabella. Esempio: tabella sintetica, se seleziono la cella C10 viene evidenziata la tabella che inizia in cella CA110 (la cella CA110 è al prima in alto a sinistra della tabella) tabella sintetica, se seleziono la cella F20 viene evidenziata la tabella che inizia in cella DA130 (la cella DA130 è al prima in alto a sinistra della tabella) E' un'operazione fattibile? Grazie assai, buona giornata eZio
|
|
|
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve non conoscendo l'ampiezza delle tabelle, prova con la traccia della macro seguente. Modifica i riferimenti in base al tuo foglio di lavoro. Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set Rng = Range("C1:C10") If Not Intersect(Target, Rng) Is Nothing Then Application.EnableEvents = False x = Target.Address(0, 0) Select Case x Case "C10" Range("CA110").Select '.............. '............. '................ End Select End If Application.EnableEvents = True Set Rng = Nothing End Sub saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, chiedo scusa per il ritardo nella risposta, ma la mia ADSL ha deciso di scioperare e quindi sono praticamente rimasto isolato...
ho provato la macro, ma selezionando la cella non succede nulla (sono sicuro di avere sbagliato qualcosa). Ho creato un modulo nuovo, ho incollato la tua sub, ho adattato i riferimenti: Range tabella: C6:BC21 Cella resa "sensibile": AA10 1^ cella (in alto a sin.) della tabella a cui il codice scritto in AA10 si riferisce: DL8
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set Rng = Range("C6:BC21") If Not Intersect(Target, Rng) Is Nothing Then Application.EnableEvents = False x = Target.Address(0, 0) Select Case x Case "AA10" Range("DL8").Select End Select End If Application.EnableEvents = True Set Rng = Nothing End Sub
Dove sbaglio? Grazie assai, buona giornata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve spero che tu abbia inserito la macro nel modulo del foglio e non in un modulo standard. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, a10n11 ha scritto: spero che tu abbia inserito la macro nel modulo del foglio e non in un modulo standard.
...Grazie assai, buon pomeriggio eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, sono pienamente consapevole di essere un rompiscatole come pochi... :-)) (ma "a volte" può essere un fatto positivo...)
è possibile applicare lo stesso ragionamento collegando la cella ad una cella di un altro file (che verrebbe aperto dall'istruzione della macro) anziché ad una cella dello stesso foglio di lavoro? Esempio (scritto in villico volgare): Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set Rng = Range("C1:C10") If Not Intersect(Target, Rng) Is Nothing Then Application.EnableEvents = False x = Target.Address(0, 0) Select Case x Case "C10" '--------------------------------- ' INVECE DI >> Range("CA110").Select Apri il file C:\Documents and Settings\User\Documenti\LAVORO_1\AREA_1\PIEMONTE\Biella.xlsm" Sheets("Shed_1"). Range("CA110").Select '--------------------------------- End Select End If Application.EnableEvents = True Set Rng = Nothing End Sub
Grazie infinite, buona serata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve l'hai già scritta tu.. queste sono le righe da inserire: Workbooks.Open Filename:="C:\Documents and Settings\User\Documenti\LAVORO_1\AREA_1\PIEMONTE\Biella.xlsm" With ActiveWorkbook .Sheets("Shed_1").Range("CA110").Select End With saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
a10n11 ha scritto: l'hai già scritta tu..
...magari!! :-D non riuscivo proprio a scrivere in quel modo quel benedetto With ActiveWorkbook .Sheets("Shed_1").Range("CA110").Select End With!! Grazie infinite, buona serata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, riprendo il thread per chiedere lumi su un problema: a volte quando eseguo la macro mi dà Errore di run-time '1004': Errore nel metodo Select per la classe Range. Più precisamente, l'errore viene evidenziato quando il file che viene aperto dalla macro è stato salvato in un foglio diverso da quello indicato dalla macro.
.Sheets("Shed_1").Range("CA110").Select [ad esempio, anziché Shed_1/CA110 il file è stato salvato in Shed_3/BD60]
Grazie assai e buon pomeriggio eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
aetio ha scritto:Ciao, riprendo il thread per chiedere lumi su un problema: a volte quando eseguo la macro mi dà Errore di run-time '1004': Errore nel metodo Select per la classe Range. Più precisamente, l'errore viene evidenziato quando il file che viene aperto dalla macro è stato salvato in un foglio diverso da quello indicato dalla macro.
.Sheets("Shed_1").Range("CA110").Select [ad esempio, anziché Shed_1/CA110 il file è stato salvato in Shed_3/BD60]
Grazie assai e buon pomeriggio eZio salve la macro si aspetta di trovarsi il foglio Shed_1 se questo non esiste è normale che vada in errore. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, credevo che l'istruzione .Sheets("Shed_3").Range("BD60").Select dando tutte le coordinate e la conseguente selezione del foglio, consentisse di aprire il file nel posto richiesto dal Case specfico. Il foglio Shed_1 esiste nel file che si và ad aprire, ma il Case specifico contempla una cella che contiene un codice ricavato da una tabella ubicata in un altro foglio del file che viene aperto (Shed_3 appunto, ma il file era stato salvato in Shed_1). Quindi una volta aperto il file mediante il codice di apertura si dovrebbero selezionare il foglio e la cella specificati nelle istruzioni del Case che si sta attivando (nel ns. esempio è il C10)
Grazie assai, buona serata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
aetio ha scritto:Ciao, credevo che l'istruzione .Sheets("Shed_3").Range("BD60").Select dando tutte le coordinate e la conseguente selezione del foglio, consentisse di aprire il file nel posto richiesto dal Case specfico. Il foglio Shed_1 esiste nel file che si và ad aprire, ma il Case specifico contempla una cella che contiene un codice ricavato da una tabella ubicata in un altro foglio del file che viene aperto (Shed_3 appunto, ma il file era stato salvato in Shed_1). Quindi una volta aperto il file mediante il codice di apertura si dovrebbero selezionare il foglio e la cella specificati nelle istruzioni del Case che si sta attivando (nel ns. esempio è il C10)
Grazie assai, buona serata eZio salve forse sono troppo vecchio, ma non ci ho capito nulla. saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, a10n11 ha scritto: forse sono troppo vecchio, ma non ci ho capito nulla.
no, la verità è che sei un vero Gentleman... ;-)) Faccio un esempio: Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set Rng = Range("A1:DF500") If Not Intersect(Target, Rng) Is Nothing Then Application.EnableEvents = False x = Target.Address(0, 0) Select Case x Case "C10" Workbooks.Open Filename:="C:\Documents and Settings\User\Documenti\LAVORO_1\AREA_1\PIEMONTE\Biella.xlsm" With ActiveWorkbook .Sheets("Shed_1").Range("CA110").Select End With Case "D20" Workbooks.Open Filename:="C:\Documents and Settings\User\Documenti\LAVORO_1\AREA_1\PIEMONTE\Biella.xlsm" With ActiveWorkbook .Sheets("Shed_3").Range("BD60").Select End With End Select End If Application.EnableEvents = True Set Rng = Nothing End Sub Nota: Il file Biella.xlsm è stato salvato nel foglio Shed_1. Nel file vi sono anche i fogli Shed_2, Shed_3, Shed_4, Shed_5. -Se nella TABELLA SINTETICA seleziono la cella C10 tutto procede alla perfezione: si apre il file Biella.xlsm alla pagina Shed_1 con selezionata la cella CA110 -Se nella TABELLA SINTETICA seleziono la cella D20 viene restituito l'Errore di run-time '1004': Errore nel metodo Select per la classe Range con evidenziata in giallo l'istruzione .Sheets("Shed_3").Range("BD60").Select-Il foglio Shed_3 e la cella BD60 esistono -Una volta terminata la visura del foglio Shed_1 il file Biella.xlsm è stato chiuso (prima di selezionare D20) per cui non riesco a capire il motivo di quell'errore. Chiedo umilmente scusa per il mio solito "ermetismo". Grazie infinite, buona giornata eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve ora ho capito il problema. La macro che ti avevo impostato, era solo esplicativa. Infatti se vedi l'istruzione select case prevede solo la selezione della cella C10. Andava completata con le istruzioni da assegnare alle altre celle della tabella Sintetica. Non sapendo l'estensione della tabella e considerando che veniva definita "Tabella sintetica" pensovo che fosse limitata a poche celle: vedendo ora che la macro lavora sun una tabella che va da A1 a DF500, forse l'istruzione Select Case non è la soluzione giusta. Mi confermi che la tabella che macro deve intercettare è nel range A1:AF500? saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, se ti può essere utile, la macro funziona perfettamente anche con parecchi Case, l'importante è che il file da aprire (nell'esempio è Biella.xlsm) sia stato salvato nel foglio che è indicato nel codice Sheets("foglio").Range("cella").Select della macro. Purtroppo il Range delle mie tabelle varia, e come sai di tabelle ne ho a centinaia :-)) per cui per me adattare di volta in volta la macro alle mie esigenze specifiche non è un problema e posso "spezzettare" le tabelle sintetiche a mio piacimento, l'importante è che selezionando una cella della tabella sintetica venga aperto il file a cui si riferisce, nel foglio giusto; se ti serve un "Fix" stabiliamo un Range-dima in Set Rng = Range("B3:AD100") e io mi adeguerò di conseguenza, creando un foglio per ciascuna tabella sintetica avente Range fisso B3:AD100. Grazie assai eZio
|
|
Rank: AiutAmico
Iscritto dal : 5/29/2003 Posts: 1,694
|
salve c'era nella macro una "piccola" imprecisione. vedi se ora va: Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set Rng = Range("A1:DF500") If Not Intersect(Target, Rng) Is Nothing Then Application.EnableEvents = False x = Target.Address(0, 0) Select Case x Case "C10" Workbooks.Open Filename:="C:\Documents and Settings\User\Documenti\LAVORO_1\AREA_1\PIEMONTE\Biella.xlsm" With ActiveWorkbook .Sheets("Shed_1").Activate End With With ActiveSheet .Range("CA110").Select End With Case "D20" Workbooks.Open Filename:="C:\Documents and Settings\User\Documenti\LAVORO_1\AREA_1\PIEMONTE\Biella.xlsm" With ActiveWorkbook .Sheets("Shed_3").Activate End With With ActiveSheet .Range("BD60").Select End With End Select End If Application.EnableEvents = True Set Rng = Nothing End Sub saluti Giap
|
|
Rank: AiutAmico
Iscritto dal : 5/10/2010 Posts: 723
|
Ciao, come SEMPRE... problema RISOLTO. Grazie infinite, buon pomeriggio eZio
Nota: quindi occorre un gruppo With indipendente per il file (che attiva il foglio) e uno per il foglio (che seleziona la cella)... il VBa è proprio un perfezionista ai massimi livelli (forse è per quello che mi piace così tanto!!)
|
|
Guest |