Individuare la penultima cella attiva
Hai un problema con Excel? 
Individuare la penultima cella attiva
di totygno71 data: 16/05/2013 15:01:04
Domanda all'allegra tribù:
ho bisogno di intercettare l'evento beforedoubleclik su un determinato range che abbia come target la penultima cella attima_
Es evento beforedoubleclick sul range [f6:q6]
il target invece è valido se la penultima cella attiva (quella prima di cliccare sul range f6:q6) è compresa nel range [K19:K25]
Ideee???
di Vecchio Frac data: 16/05/2013 15:07:05
Il range [F6:Q6] è tutto unito?
Altrimenti mi dici come fai a fare "doppio click" sul range "...che abbia come target la penultima cella attiva"?
E non ho capito l'ultima frase... un target è sempre valido proprio perchè è un target ^_^
O forse intendi memorizzare ogni target che raggiungi, per determinare quale sia il penultimo valido all'interno di una certa zona?
Spiega meglio all'allegra tribù qual è lo scenario, qual è il problema e qual è il risultato vuoi ottenere.
di totygno71 data: 16/05/2013 15:15:30
Allora nelle celle comprese tra Q6:Q6 c'è il valore che mi interessa.(non sono unite)
Nel momento in cui si fa doppio click in una di queste celle il suo valore deve essere ripostato nella PENultima cella attiva se questa è compresa nel range k19:k25
bahhahahah che casino
di Vecchio Frac data: 16/05/2013 15:21:33
Bè, è questo che non so cosa vuol dire:
"il suo valore deve essere riportato nella penultima cella attiva se questa è compresa nel range k19:k25 "
Per "penultima cella attiva" di quel range intendi la penultima cella su cui avevi mosso il cursore o la penultima in cui avevi inserito un dato o che altro?
Cioè:
- inserisco un dato in K20
- poi ne inserisco un altro in K29
- poi ne inserisco un altro in K23
- poi faccio doppio click in F6
A questo punto inserisco il valore di F6 nella cella K20 (la penultima che è stata resa attiva all'interno del range K19:K25).
Se le cose stanno così, c'è da pensarci... soprattutto alla logica che ci sta dietro una cosa così contorta ^_^
di totygno71 data: 16/05/2013 15:24:22
Ma se è lineare che gusto c'è?
esempio
mi posiziono in k21
poi doppio click su h6
in k21 devo comparire il valore di h6
tutto qui...
facile no???
di Vecchio Frac data: 16/05/2013 15:26:44
Pensavo che fosse più incasinato.
Allora si può fare, provaci :)
Tu sei un "esperto", guadagnati il titolo :P
di totygno71 data: 16/05/2013 15:30:26
vabbe
io lo so fare... è per stimolare l'allegra communnità...
se faccio le domande e mi rispondo da solo che gusto c'è???' ^_^
di Vecchio Frac data: 16/05/2013 18:23:29
Uhm.
Da provare (incollare nel codice del foglio e via).
Non mi soddisfa perchè non è perfettamente aderente alla richiesta: in realtà l'evento BeforeDoubleClick viene ignorato dal momento che prevale l'evento SelectionChange (quindi non viene richiamato il doppio click in cella perchè viene prima intercettato il cambio di cella).
Quindi questo è solo un escamotage (anche se funziona).
Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Static LAST_CELL As Range
If Intersect(Target, [K19:K25,F6:Q6]) Is Nothing Then
Set LAST_CELL = Nothing
Exit Sub
End If
If Not Intersect(Target, [K19:K25]) Is Nothing Then
Set LAST_CELL = Target
Exit Sub
End If
If Not Intersect(Target, [F6:Q6]) Is Nothing And Not LAST_CELL Is Nothing Then
Target = LAST_CELL
Set LAST_CELL = Nothing
Exit Sub
End If
End Sub |
di totygno71 data: 16/05/2013 18:43:16
dimmi la verità.... c'hai dovuto ragione un pò... non era poi cosi scontato... come poteva sembrare... U_U
In realtà dovrebbe fare il contrario di quello che fa il tuo codice...
deve essere il valore della cella tra f6:q6 che viene trasferito nella cella k19:k25 e non viceversa... e questo deve avvenire nel momento in cui si fa il doppio click nella cella tra f6:q6
di Vecchio Frac data: 16/05/2013 20:26:45
^_^
Sì, mi sono scontrato col fatto che BeforeDoubleClick viene vanificato da SelectionChange.
Comunque anche se ho invertito i range la filosofia di lavoro rimane la stessa :)
Ma tu come risolveresti? io non ci sono riuscito in altro modo (in sostanza, il doppio click non è implementato).
di totygno71 data: 16/05/2013 20:32:56
attualmente....
ho inserito una cornice senza borzi su ogni cella ed ad ognuna di essi ho assegnato una macro ?_?
ma mi piacereebe eliminarle e usare l'evento befordoubleciclk
domani diovolendo ci provo ... non ci ho ancora ragionato su per bene
di Vecchio Frac data: 17/05/2013 11:58:56
Visto che mi provochi ^_^
eco qui una versione perfettamente funzionante secondo la tua richiesta, senza fantasiose idee sulle cornici senza bordi :)
L'unico trucco (lecito e ammesso) è impostare la cella "IV65535", l'ultima del mio foglio Excel, al valore su cui hai cliccato per ultimo nella striscia F6:Q6.
Ricapitolando:
- la striscia F6:Q6 contiene i dati da prelevare
- se attivo una di queste celle il relativo contenuto viene copiato in IV65535
- ora faccio doppio click su una cella del range consentito, K19:K25, e...
- ...il valore cliccato in precedenza viene copiato in questa cella
- infine la cella IV65535 viene svuotata
A me, così, piace di più perchè rispetta di più le tue prescrizioni ^_^
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If [IV65535] <> "" Then Target = [IV65535]
[IV65535] = ""
Cancel = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [F6:Q6]) Is Nothing Then
[IV65535] = Target
Exit Sub
End If
End Sub |
di Vecchio Frac data: 17/05/2013 12:01:06
Uffa la fretta :(
Errata corrige (nella versione di poco fa veniva ignorato il fatto di doversi trovare nel range K19:K25, qualunque doppio click in qualunque cella faceva scattare la ricopiatura del dato).
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, [K19:K25]) Is Nothing Then
If [IV65535] <> "" Then Target = [IV65535]
[IV65535] = ""
Cancel = True
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, [F6:Q6]) Is Nothing Then
[IV65535] = Target
Exit Sub
End If
End Sub |
di totygno71 data: 17/05/2013 12:11:31
ci stavo provando da un po senza risultati apprezzabili...
ora testo il tuo...
di totygno71 data: 17/05/2013 13:16:03
Allegato il file del risultato atteso_
di Vecchio Frac data: 17/05/2013 13:54:08
Ho visto la tua soluzione.
Un accrocchio però ingegnoso ^_^
Per semplificartelo, scrivi questa routine nel modulo e assegna soltanto questa ai tre rettangoli invisibili che circondano le celle. Le altre sub puoi eliminarle :)
Sfruttando il fatto che Application.Caller restituisce il nome dell'oggetto che ha scatenato l'evento, e che ogni rettangolo finisce con un numero progressivo, risulta facile recuperare il valore della cella su cui hai fatto click, mediante Offset. Guarda il codice :)
Option Explicit
Sub clikkami()
Dim i As Integer
If Intersect(ActiveCell, Range("K19:K25")) Is Nothing Then Exit Sub
If Not Intersect(ActiveCell, Range("K19:K25")) Is Nothing Then
i = Right(Application.Caller, 1)
ActiveCell = [F6].Offset(, i - 1)
ActiveCell.Offset(, 1).Select
Exit Sub
End If
End Sub |
di totygno71 data: 17/05/2013 14:29:17
Grande...
ma il nome dell'oggetto è modificabile via codice o anche tramite impostazioni di base di excel?
In parole povere, dove trovo il nome di ogni oggetto inserito nel foglio di lavoro???
di Vecchio Frac data: 17/05/2013 15:22:52
Questa la so ^_^
Il nome di ogni Shape aggiunta al foglio viene impostato automaticamente, ma puoi modificarlo via codice mediante la proprietà .Name; nel caso pratico, io ho cliccato col tasto destro sui tuoi rettangoli invisibili e nella barra della formula è comparso il loro nome.
Con una riga di codice, direttamente in finestra immediata, puoi scorrere le Shapes di un foglio e trovare il nome corrispondente.
'in finestra Immediata (Ctrl-G)
for each s in foglio1.Shapes:?s.name:next
'cambio il nome al primo rettangolo
foglio1.shapes("rettangolo 1").name="pippo"
|
di totygno71 data: 17/05/2013 15:29:34
Basta cosi...
Risolto abbondantemente.....
Ciao VF Buon WE e speriamo che smetta sta pioggia... c'è il fersina che straripa ^_^
di Vecchio Frac data: 17/05/2013 15:33:04
Vero, e non è un modo di dire... è davvero molto alto.
Buon fine settimana anche a te...
Io intanto accumulo le birre che mi devi ^_^
Vuoi Approfondire?