繁体   English   中英

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

[英]Excel VBA: update cell based on previous cells change

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

Excel表中有七列。 其中三个是带有数据验证的下拉列表,我使用下面的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

每当我更新一行中的任何单元格时,我都希望该行第七列的内容以当前日期更新。

我尝试使用以下代码,但它仅适用于常见的单元格,即我手动键入其内容的单元格。 我也希望在更改下拉列表选择时更新第七列。

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

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

您的代码很好,除了需要重新打开事件 您已使用以下命令停止触发事件: Application.EnableEvents = False但是您再也不会重新打开事件触发。 因此,您的代码将在您第一次更改单元格时起作用, Worksheet_Change事件将按预期触发。 但是,在此子项中,您已将EnableEvents设置为false,然后再将其设置回true。 因此,您已阻止所有将来的事件(包括此事件)在将来再次触发。 解决方法如下:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM