如何反映与Excel中选择的列表项对应的特定单元格的日期?

时间:2017-08-27 07:32:12

标签: excel excel-vba vba

基本上我有一张excel表用于跟踪招聘中的状态,其中有大约5种状态(简报,广告,候选名单,选择,提供),并且每个空缺都有一个状态单元格作为上述状态的列表,它是根据空缺状态手动更改。

我找到了一个vba代码(附在下面)以在某个单元格中反映状态已更改的日期,如果我选择其他状态(基本上更新状态),它会覆盖先前的输入,但我需要什么要做的事情有点复杂。

我为每个状态创建了一个列,我需要此代码来反映每个状态单元格上与我从列表中选择的单元格相对应的日期,例如,选择特定空缺的简报将反映相应的日期“简报”栏中的单元格,如果我将该特定空缺的状态从列表更改为“选择”,则日期将反映在“选择”列中的相应单元格中。

到目前为止我找到的代码如下:

Private Sub Worksheet_Change(ByVal Target As Range)
'Update 20140722
Dim WorkRng As Range
Dim Rng As Range
Dim xOffsetColumn As Integer
Set WorkRng = Intersect(Application.ActiveSheet.Range("N:N"), Target)
xOffsetColumn = 1
If Not WorkRng Is Nothing Then
Application.EnableEvents = False
For Each Rng In WorkRng
If Not VBA.IsEmpty(Rng.Value) Then
Rng.Offset(0, xOffsetColumn).Value = Now
Rng.Offset(0, xOffsetColumn).NumberFormat = "dd-mm-yyyy"
Else
Rng.Offset(0, xOffsetColumn).ClearContents
End If
Next
Application.EnableEvents = True
End If
End Sub

1 个答案:

答案 0 :(得分:0)

您可以修改代码并添加Select Case Statement以根据数据输入调整列偏移量:

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("N:N"), Target)
  If Not WorkRng Is Nothing Then
    Application.EnableEvents = False
    For Each Rng In WorkRng
      Select Case Rng.Value2
        Case "Briefing"
          xOffsetColumn = 1  'Column O
        Case "Advertising"
          xOffsetColumn = 2  'Column P
        Case "Shortlisting"
          xOffsetColumn = 3  'Column Q
        Case "Selection"
          xOffsetColumn = 4  'Column R
        Case "Offering"
          xOffsetColumn = 5  'Column S
        Case Else
          xOffsetColumn = 6  '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