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

时间:2017-03-08 18:37:31

标签: excel vba excel-vba validation drop-down-menu

我正在处理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

有没有办法更新我之前说过的专栏内容?即使我更改了下拉列表中选择的选项?

1 个答案:

答案 0 :(得分:1)

您的代码很好,但您需要重新启用事件。您已停止使用此行触发事件: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