Excel VBA:根据以前的单元格更新更新单元格

我正在使用Excel工作表并使用VBA来完成和更新单元格上的信息。

Excel表中有七列。 其中三个是带有数据validation的下拉列表,我使用了下面的VBA代码来填充它们。

Private Sub TempCombo_KeyDown(ByVal _KeyCode As MSForms.ReturnInteger, _ ByVal Shift As Integer) 'Ocultar caixa de combinação e mover a próxima célula com Enter e Tab Select Case KeyCode Case 9 ActiveCell.Offset(0, 1).Activate Case 13 ActiveCell.Offset(1, 0).Activate Case Else 'Nada End Select End Sub 

这些列也使用自动完成,使用下面的代码:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim str As String Dim cboTemp As OLEObject Dim ws As Worksheet Dim wsList As Worksheet Set ws = ActiveSheet Set wsList = Sheets(Me.Name) Application.EnableEvents = False Application.ScreenUpdating = False If Application.CutCopyMode Then 'Permite copiar e colar na planilha GoTo errHandler End If Set cboTemp = ws.OLEObjects("TempCombo") On Error Resume Next With cboTemp .Top = 10 .Left = 10 .Width = 0 .ListFillRange = "" .LinkedCell = "" .Visible = False .Value = "" End With On Error GoTo errHandler If Target.Validation.Type = 3 Then Application.EnableEvents = False str = Target.Validation.Formula1 str = Right(str, Len(str) - 1) With cboTemp .Visible = True .Left = Target.Left .Top = Target.Top .Width = Target.Width + 15 .Height = Target.Height + 5 .ListFillRange = str .LinkedCell = Target.Address End With cboTemp.Activate 'Abrir a lista suspensa automaticamente Me.TempCombo.DropDown End If errHandler: Application.ScreenUpdating = True Application.EnableEvents = True Exit Sub End Sub 

任何时候我更新一行上的任何单元格,我希望该行的第七列的内容更新与当前date。

我尝试使用下面的代码,但它只适用于普通的单元格,我手动键入其内容。 我还想更改下拉列表select时更新第七列。

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 1 Then Exit Sub Application.EnableEvents = False Cells(Target.Row, "U").Value = Date End Sub 

有没有办法像我之前说的那样更新列的内容? 即使当我更改下拉列表中select的选项?

你的代码很好,除了你需要重启事件 。 您已停止使用以下行进行触发的事件: Application.EnableEvents = False但是您再也不会将事件触发。 因此,您的代码将在第一次更改单元格时Worksheet_ChangeWorksheet_Change事件将按预期启动。 但是,在这个子部分中,您已经将EnableEvents设置为false,并且永远不会将其设置为true。 所以,你已经阻止了所有未来的事件,包括这个事件,在将来再次发射。 这是解决scheme:

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Row = 1 Then Exit Sub Application.EnableEvents = False Cells(Target.Row, "U").Value = Date Application.EnableEvents = True End Sub