数据表的新行中的字段的默认值

时间:2014-10-21 00:59:41

标签: excel vba excel-vba

如果在Excel中有数据表,则标准功能的一部分是在最后一个单元格中按Tab键会在表格的底部添加一个新行。我想使用有用的默认值自动填充该新行。特别是我想将当前日期时间放在一个单元格中,并将值复制到表格上一行的其他一些单元格中。

使用公式来做这件事是行不通的 - 例如使用=now()作为日期时间标记是不合适的,因为每次电子表格重新计算时它都会自动更新,而我希望它在添加行时保留日期时间。

所以我试图将VBA写入由添加行的事件触发,并在该代码中将值写入新行的单元格中。从MS documentation我认为DataTable.TableNewRow将是适当的事件。但是当我尝试为该事件编写任何代码时,它都没有被执行。当我在VBA对象浏览器中查找DataTable时,未列出TableNewRow事件。

版本:

  • VBA for Applications 7.1
  • Excel 2013

所以我的问题:

  1. 我的思维方向是正确的,还是你能提出更好的方法?
  2. 你能提供任何类似的工作代码吗?
  3. DataTable.TableNewRow是我应该参加的活动吗?
  4. 我需要做些什么才能在我的VBA代码中访问该事件?

1 个答案:

答案 0 :(得分:4)

你可以试试这个:

将此代码写入 Thisworkbook

Private Sub Workbook_Open()
    Set ref_tbl = Sheet1.ListObjects(1).DataBodyRange
End Sub

然后在 Worsksheet对象中的代码下面。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    On Error GoTo halt
    Application.EnableEvents = False
    Dim tbl_rng As Range
    Set tbl_rng = Me.ListObjects(1).DataBodyRange
    If Not Intersect(Target, tbl_rng) Is Nothing Then
        If tbl_rng.Rows.Count > ref_tbl.Rows.Count Then
            MsgBox "Table increase in size"
            '~~> Do your stuff here
            Set ref_tbl = tbl_rng
        End If
    End If
forward:
    Application.EnableEvents = True
    Exit Sub
halt:
    MsgBox Err.Number & ": " & Err.Description
    Resume forward
End Sub

您还需要模块来声明公共变量

Public ref_tbl As Range

所以基本上,这会告诉你桌子的尺寸何时增加 如果我们能够捕获它,那么当满足条件时你可以做你的事情 这适用于您在问题中描述的情况 当您在表中的条目之间插入行时,它将无法工作。无论如何,HTH。