如何反映不覆盖之前的date戳记日志?

我有一个Excel工作表,我正在使用它来跟踪招聘的状态,其中每行是一个空缺的logging,其中一个单元格是一个下拉列表来更改该特定空缺的状态。 状态是例如(广告,面试,雇用)

我想要做的是一旦我点击一个状态,在行的末尾(假设这里的最后一个logging是列S ,所以当我点击广告时,date戳记S和状态本身打印在那里列T ,如果我select第二个状态,它会继续列UV等。

到目前为止,我使用的是不同的东西,它反映了基于该状态相应列的date标记:

 Private Sub Worksheet_Change(ByVal Target As Range) Dim WorkRng As Range Dim Rng As Range Dim xOffsetColumn As Long Set WorkRng = Intersect(Application.ActiveSheet.Range("H:H"), Target) If Not WorkRng Is Nothing Then Application.EnableEvents = False For Each Rng In WorkRng Select Case Rng.Value2 Case "Not-initiated" xOffsetColumn = 100 'Column O Case "Adv/Sourcing" xOffsetColumn = 9 'Column U Case "Interviewing" xOffsetColumn = 10 'Column Q Case "Offering & Selection" xOffsetColumn = 11 'Column R Case "Onboarding" xOffsetColumn = 12 'Column S Case "Contract Signed" xOffsetColumn = 13 'Column U Case "Joined" xOffsetColumn = 14 'Column Q Case Else xOffsetColumn = 101 'Column T - entry not listed above End Select Rng.Offset(0, xOffsetColumn).Value = Now Rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy" Next Application.EnableEvents = True End If End Sub 

如果我理解正确的话,你需要在每一行的下拉列周围select3个选项,当选中时,将单元格1,2或3单元格填充到当前date的右侧。

我要做的是这样的:如果我要在单元格R2之上放置一个下拉菜单,然后将其大小设置为与单元格*完全相同(请参阅本答案的底部),并将单元格链接隐藏在其下方, $R2

指定一个macros,指向模块中的这个子项:

 Sub DropDown2_Change() '(all the drop downs call this sub, on change) Dim dd As Shape, ddCell As String, ddValue As String, ddIndex As Integer Set dd = ActiveSheet.Shapes(Application.Caller) 'shape object: the selected DropDown ddValue = dd.ControlFormat.List(dd.ControlFormat.ListIndex) 'dropdown's new string value [not used] ddCell = dd.ControlFormat.LinkedCell 'range object: the cell linked to the dropdown ddIndex = ActiveSheet.Range(ddCell) 'selected index: 1=Advertised,2=Interviewed,3=Hired Range(ddCell).Offset(0, ddIndex) = Date 'set date of cell 1,2,or 3 cells to the right End Sub 
  • 有时可能是一个痛苦,只是让降级与细胞正确alignment(特别是如果你开始后来围绕列移动),但在过去,我发现最好的创build和设置编程方式下降 ,以确保完美的alignment,正确的命名等(事实上,任何时候我需要移动它们,我只是删除并重新创build它们,以节省头痛)。

根据您的需要,您可能会无法手动复制第一个已完成的function下拉,然后将其逐个粘贴到下面的每个单元格中。 只要确保Cell Link是Abs / Rel就像** $ ** B2,否则它们都可能默认为相同的Cell Link。

没关系,如果他们都共享相同的子,因为上面的代码将检查更改的下拉菜单的单元链接。

这样您就不必乱用WorkSheet_Change (无论如何都不会触发Drop Down更改)。

您可以在此下载我在JumpShare中使用的testing表 : tmpDropDowns.xlsm 。 (它可以在线观看,但VBA将无法正常工作,除非你下载。)

让我知道如果你有任何问题!


更新:

Date + Status填充下拉菜单右边的第一个空单元格(而不是只填充S,T,U列)。

更新的代码:

选项显式

Sub DropDown2_Change()'(所有的下拉菜单都会调用这个子菜单)

 Dim dd As Shape, ddCell As String, ddValue As String, ddIndex As Integer Set dd = ActiveSheet.Shapes(Application.Caller) 'shape object: the selected DropDown ddValue = dd.ControlFormat.List(dd.ControlFormat.ListIndex) 'dropdown's new string value ddCell = dd.ControlFormat.LinkedCell 'range object: the cell linked to the dropdown ddIndex = ActiveSheet.Range(ddCell) 'selected index: 1=Advertised,2=Interviewed,3=Hired [not used] FirstEmptyCellToRight(Range(ddCell)) = ddValue & " " & Date 'set date of cell 1,2,or 3 cells to the right End Sub Function FirstEmptyCellToRight(cell_In As Range) As Range 'since ".End(xlToRight).Offset(0, 1)" wasn't working for me 'returns cell_In if it's blank, and if not then the first blank cell to the right Set FirstEmptyCellToRight = cell_In Do Until IsEmpty(FirstEmptyCellToRight) Or FirstEmptyCellToRight.Value = "" Set FirstEmptyCellToRight = FirstEmptyCellToRight.Offset(0, 1) Loop End Function 

添加截图:

截图


在JumpShare上更新文件: tmpDropDowns.xlsm (必须下载;在线查看将无法使用VBA。)