Saggio come sempre!
Alla terza avevo già pensato ma l'ho scartata perchè vorrei che l'utente abbia anche la possibilità di digitare personalmente i dati.
Ho provato a modificare il comportamento dei comandi Cut&Paste come indicato in questo forum:
http://www.mrexcel.com/forum/showthread.php?t=56674Però queste funzioni interferivano con altre nel mio foglio (le mie "opere" sono sempre piene di routine che fanno cose...
)... per cui ho eliminato anche quella.
Alla fine ho usato un mix tra le tue 1) e 2):
- Ho copiato i formati nelle due celle K2 e K3, non visibili all'utente (da buon perfezionista ho anche usato una formattazione a leggibilità facilitata, con 2 colori alternati...)
- Ho messo la seguente funzione in un normale Modulo:
- Codice: Seleziona tutto
Function RIVELA_PREC()
'TIENE TRACCIA DELLA CELLA PRECEDENTEMENTE SELEZIONATA
Static PREC
'Stop
ADDR = ActiveCell.AddressLocal
RIVELA_PREC = PREC
PREC = ADDR
End Function
- Ho definito i seguenti eventi per il mio foglio di calcolo:
- Codice: Seleziona tutto
Private Sub Worksheet_Activate()
A = RIVELA_PREC 'In questo modo abbiamo sempre una cella "precedente"
End Sub
'--------------------------------------------------------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
Static CHANGE_STATUS As Boolean 'questo serve per impedire che la macro si auto-chiami all'infinito...
'ovvero fino all'esaurimento della memoria dello stack!
If CHANGE_STATUS = True Then GoTo FINE
CHANGE_STATUS = True
ADDR = ActiveCell.AddressLocal
R = Range(ADDR).Row
C = Range(ADDR).Column
If C = 2 And R >= 6 Then
Range("K2:K3").Copy
Range("B6:B105").PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
End If
Range(ADDR).Select
FINE:
End Sub
'--------------------------------------------------------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Application.CutCopyMode <> 0 Then GoTo FINE 'Così evita di interferire con l'operazione Incolla.
A = RIVELA_PREC
ActiveSheet.Unprotect
RIGA = Range(ActiveCell.AddressLocal).Row
COL = Range(ActiveCell.AddressLocal).Column
Range("E6:G65536").Interior.ColorIndex = xlNone
ActiveSheet.ClearArrows
...
'(qui la routine fa altre cose, tipo modificare colori di sfondo e visualizzare frecce...)
...
ActiveSheet.Protect
CHANGE_STATUS = False
FINE:
End Sub
In pratica, quando incollo, parte la worksheet_change che ripristina i formati salvati nelle celle K2 eK3.
Che dire, sembra che funzioni.
Come al solito... GRAZIE PER LE DRITTE!
MAx