Excel VBA如何检测是否有东西被粘贴在工作表中

我首先要说的是,我在Excel和VBA上的经验仅限于我在学校看到的。 我有编程经验,但在其他语言。

我每个星期都有一个文件。 这个文件的结构总是一样的:ID,名称,date,值在1和4之间,不相关的数据。

这个数据是通过“全部select”button(工作表的左上angular,MS Excel 2013中的单元格名称下方的小三angular形)select的,然后复制到另一个默认文件中,该文件可以重新处理数据以基于1-4值和date。

我的问题:如何检测数据何时被粘贴? 我已经尝试了Worksheet.Change事件,但粘贴命令(CTRL + V)不会触发Change事件。 另外,如何复制数据? 它会逐行更新行,逐个单元格(哪个方向),…? 我知道,只要能检测到复制命令,我就可以通过debugging来轻松find最后一个问题的答案,但是你永远不知道是否有人知道答案。

还有其他更简单(或更好)的方法来做到这一点?

如果需要,可以提供更多的数据和信息。

感谢您的帮助。

编辑:'…有/正在被复制? 更改为粘贴,因为它应该已经。

Private Sub Worksheet_Change(ByVal Target As Range) Dim UndoList As String '~~> Get the undo List to capture the last action performed 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 

这个伎俩。 对于那些需要类似的东西,并知道他们的名单的大小@MaciejLos的答案也将工作。

如果将公式添加到不会被覆盖的单元格中, Worksheet_Change事件将执行该作业。 假设您的数据被粘贴到A1单元格中,并占据5列。 所以,在下面的公式中input6列和1行。

 =COUNTBLANK(A1:A1048576) 

现在,您可以处理/检测粘贴事件;)