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

时间:2018-06-18 16:08:55

标签: excel vba excel-vba

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

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

跟踪工作表(复制和插入代码)

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. 在打开工作簿时,或者在用户关闭它之前进行某种触发操作时,所有这些都运行正确

  4. 如果可能的话,我希望将这一切都运行在一个大宏中,并实现自动化。我不想让用户手动运行宏。谢谢!

1 个答案:

答案 0 :(得分:1)

实施: VBE > ThisWorkbook > 粘贴代码

我还使您的复制范围和粘贴范围动态化(它会将数据从第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