Aiutamici Forum
Benvenuto Ospite Cerca | Topic Attivi | Utenti | | Log In | Registra

[Excel 2007]- Macro per creare cella "sensibile" Opzioni
aetio
Inviato: Tuesday, November 12, 2013 10:12:34 AM

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
Sponsor
Inviato: Tuesday, November 12, 2013 10:12:34 AM

 
a10n11
Inviato: Tuesday, November 12, 2013 11:00:33 AM

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

aetio
Inviato: Wednesday, November 13, 2013 9:25:19 AM

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
a10n11
Inviato: Wednesday, November 13, 2013 11:57:27 AM

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

aetio
Inviato: Wednesday, November 13, 2013 2:03:05 PM

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
aetio
Inviato: Thursday, November 14, 2013 3:59:09 PM

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
a10n11
Inviato: Thursday, November 14, 2013 7:45:41 PM

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

aetio
Inviato: Thursday, November 14, 2013 8:13:55 PM

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



aetio
Inviato: Monday, November 25, 2013 3:21:46 PM

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
a10n11
Inviato: Monday, November 25, 2013 6:05:15 PM

Rank: AiutAmico

Iscritto dal : 5/29/2003
Posts: 1,694


a10n11
Inviato: Monday, November 25, 2013 6:05:47 PM

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

aetio
Inviato: Monday, November 25, 2013 6:38:09 PM

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
a10n11
Inviato: Tuesday, November 26, 2013 9:33:04 AM

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

aetio
Inviato: Tuesday, November 26, 2013 10:01:56 AM

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
a10n11
Inviato: Tuesday, November 26, 2013 10:46:41 AM

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


aetio
Inviato: Tuesday, November 26, 2013 10:59:33 AM

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
a10n11
Inviato: Tuesday, November 26, 2013 12:58:04 PM

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

aetio
Inviato: Tuesday, November 26, 2013 2:08:56 PM

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!!)
Utenti presenti in questo topic
Guest


Salta al Forum
Aggiunta nuovi Topic disabilitata in questo forum.
Risposte disabilitate in questo forum.
Eliminazione tuoi Post disabilitata in questo forum.
Modifica dei tuoi post disabilitata in questo forum.
Creazione Sondaggi disabilitata in questo forum.
Voto ai sondaggi disabilitato in questo forum.

Main Forum RSS : RSS

Aiutamici Theme
Powered by Yet Another Forum.net versione 1.9.1.8 (NET v2.0) - 3/29/2008
Copyright © 2003-2008 Yet Another Forum.net. All rights reserved.