Excel 宏 更改触发器操作并插入复制的值



我正在制作一个跟踪招聘过程的工作表。在一张纸(跟踪(上,我将每个主题分配给一行,随着过程的推进,用户更新该行以反映最近的进度。我正在尝试在第二张纸(文档(上记录历史记录。这将记录针对每个应用程序采取的所有步骤。

我目前有两个宏。 1 复制所有跟踪器工作表并将它们插入文档工作表(不粘贴,因为我不想覆盖过去的历史记录。然后,我的文档表上有第二个宏,用于删除重复项,因为用户通常只更新几行,并且我不需要跟踪器中的所有数据。我将宏代码放在下面。

跟踪表(复制和插入代码(

Private Sub Workbook_Open()
Worksheets("Tracker").Range("A3:S100").Copy
Worksheets("Documentation").Range("A2").Insert xlShiftDown
End Sub

文档表(删除重复项(

Sub sbRemoveDuplicates()
ActiveSheet.Range("A2:S100").RemoveDuplicates Columns:=Array(2, 15), 
Header:=xlYes
End Sub

我将数组设置为 2 和 15,因为这是我想要基于重复的两个唯一列。

我想做的是:

  1. 在跟踪器表上,仅插入值(有很多功能(

  2. 在插入值后自动执行删除重复项功能

  3. 在打开工作簿时运行所有这些操作,或者在用户关闭工作簿之前运行某种触发器

如果可能的话,我希望所有这些都在一个大宏中运行,并且是自动化的。我不想信任用户手动运行宏。谢谢!

实现:VBE>此工作簿>粘贴代码

我还使您的复制范围和粘贴范围动态(它会将数据从第 3 行向下复制到最后一行可用行,并将数据(仅限值(粘贴到Documentation上的第一个可用空白行(

按原样,这将在工作簿关闭之前运行。如果要在工作簿打开时触发此操作,请将代码(顶行和底行除外(括在里面:

Private Sub Workbook_Open()
'Code here
End Sub

要在关闭时实施:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim TLRow As Long, DLRow As Long
TLRow = ThisWorkbook.Sheets("Tracker").Range("A" & ThisWorkbook.Sheets("Tracker").Rows.Count).End(xlUp).Row
DLRow = ThisWorkbook.Sheets("Documentation").Range("A" & ThisWorkbook.Sheets("Documentation").Rows.Count).End(xlUp).Offset(1).Row
Thisworkbook.Sheets("Tracker").Range("A3:S" & TLRow).Copy
ThisWorkbook.Sheets("Documentation").Range("A" & DLRow).PasteSpecial xlPasteValues
Thisworkbook.Sheets("Documentation").Range("A2:S" & DLRow).RemoveDuplicates Columns:=Array(2, 15), Header:=xlYes
End Sub