Excel VBA Come rilevare se qualcosa è stato incollato in un foglio di lavoro

Inizierò dicendo che la mia esperienza con Excel e VBA è limitata a ciò che ho visto a scuola. Ho esperienza di programmazione, ma in altre lingue.

Ho un file che ricevo ogni settimana. La struttura di questo file è sempre la stessa: ID, Nome, Data, Valore compreso tra 1 e 4, dati non rilevanti.

Questi dati vengono selezionati tramite il pulsante ‘seleziona tutto’ (angolo in alto a sinistra del foglio di lavoro, piccolo triangolo sotto il nome della cella in MS Excel 2013) e quindi copiati in un altro file predefinito che rielabora i dati per visualizzarli e filtrarli in diversi fogli basati su il valore 1-4 e la data.

La mia domanda: come posso rilevare quando i dati sono stati incollati / incollati? Ho provato l’evento Worksheet.Change, ma il comando paste (CTRL + V) non triggers l’evento Change. Inoltre, come verranno copiati i dati? Aggiornerà riga per riga, cella per cella (quale direzione), …? So che posso trovare facilmente la risposta all’ultima domanda eseguendo il debug una volta che posso rilevare il comando di copia, ma non si sa mai se qualcuno conosce la risposta.

C’è un altro, più facile (o migliore) modo di farlo?

Maggiori dati e informazioni possono essere forniti se necessario.

Grazie per l’aiuto.

EDIT: ‘… ha / viene copiato?’ cambiato per incollare come avrebbe dovuto essere.

Private Sub Worksheet_Change(ByVal Target As Range) Dim UndoList As String '~~> Get the undo List to capture the last action performsd by user UndoList = Application.CommandBars("Standard").Controls("&Undo").List(1) '~~> Check if the last action was not a paste nor an autofill If Left(UndoList, 5) = "Paste" Then 'Do stuff End If End Sub 

Questo ha fatto il trucco. Per coloro che hanno bisogno di qualcosa di simile e conoscono la dimensione della loro lista, la risposta di @MaciejLos funzionerebbe anche.

L’ evento Worksheet_Change farà il lavoro se aggiungi una formula in una cella che non verrà mai sovrascritta. Diciamo che i dati sono incollati nella cella A1 e occupati 5 colonne. Quindi, inserisci sotto la formula in 6. colonna e riga 1.

 =COUNTBLANK(A1:A1048576) 

Ora puoi gestire / rilevare l’evento paste;)