我首先要说的是,我在Excel和VBA方面的经验仅限于我在学校看到的内容。我有编程经验,但在其他语言。
我每周都有一个文件。该文件的结构始终相同: ID,名称,日期,1到4之间的值,非相关数据。
通过“全选”按钮(工作表的左上角,MS excel 2013中单元名称下方的小三角形)选择此数据,然后将其复制到另一个默认文件中,该文件重新编制数据以显示和过滤不同的数据基于1-4值和日期的工作表。
我的问题:如何检测何时粘贴数据?我已经尝试过Worksheet.Change事件,但粘贴命令(CTRL + V)不会触发Change事件。 另外,如何复制数据?它是逐行更新,逐个单元(哪个方向),......? 我知道一旦我能够检测到复制命令,我就可以通过调试来轻松找到最后一个问题的答案,但你永远不知道是否有人知道答案。
还有另一种更简单(或更好)的方法吗?
如果需要,可以提供更多数据和信息。
感谢您的帮助。
编辑:'......有/正在被复制?'改变为粘贴,因为它应该是。
答案 0 :(得分:12)
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'答案也会奏效。
答案 1 :(得分:1)
Worksheet_Change 事件将完成此任务。我们假设您的数据被粘贴到A1单元格中并占据了5列。因此,请在6列和第1行中输入以下公式。
=COUNTBLANK(A1:A1048576)
现在,您已能够处理/检测粘贴事件;)