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

Mat*_*rke 6 excel vba excel-vba

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

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

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

版本:

  • VBA for Applications 7.1
  • Excel 2013

所以我的问题:

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

L42*_*L42 4

你可以试试这个:

在Thisworkbook中编写此代码。

Private Sub Workbook_Open()
    Set ref_tbl = Sheet1.ListObjects(1).DataBodyRange
End Sub
Run Code Online (Sandbox Code Playgroud)

然后在Worksheet Object中添加以下代码。

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
Run Code Online (Sandbox Code Playgroud)

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

Public ref_tbl As Range
Run Code Online (Sandbox Code Playgroud)

基本上,这会告诉您表格大小何时增加。
如果我们能够捕捉到这一点,那么当满足该条件时您就可以做您的事情了。
这适用于您在问题中描述的情况。
但是,当您在表中的条目之间插入行时,它将不起作用。无论如何,HTH。