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

标签 vba excel

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

使用公式来做到这一点是行不通的——例如使用 =now() 作为日期时间戳是不够的,因为每次电子表格重新计算时它都会自动更新,而我希望它保留行被删除时的日期时间添加。

因此,我尝试编写 VBA,使其由添加行的事件触发,并在该代码中将值写入新行的单元格中。来自 MS documentation我认为 DataTable.TableNewRow 是合适的事件。但是,当我尝试为该事件编写任何代码时,它不会被执行。当我在 VBA 对象浏览器中查找 DataTable 时,未列出 TableNewRow 事件。

版本:

  • 应用程序 VBA 7.1
  • Excel 2013

所以我的问题:

  1. 我的思考方向正确吗?或者您能提出更好的方法吗?
  2. 您能提供执行类似操作的任何工作代码吗?
  3. DataTable.TableNewRow 是我应该使用的事件吗?
  4. 我需要做什么才能在我的 VBA 代码中访问该事件?

最佳答案

你可以试试这个:

将此代码写入此工作簿

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

然后在工作表对象中添加以下代码。

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)变量

Public ref_tbl As Range

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

关于vba - 数据表新行中字段的默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26477360/

相关文章:

java - 如何使用apache poi将动态Excel文件(列数可以超过)写入java对象

即使编码了密码后,Excel VBA 仍然提示输入密码

vba - Excel VBA - 突出显示正数和负数对

vba - McAfee 从 VBA 模块中删除代码

arrays - 几个不连续的列到数组中

vba - 重新询问 : Get all the VBA macros of a workbook by JavaScript API for Excel

excel - Excel VBA“自动化错误”由于2016年1月Office更新,可能是由MSCOMCTL.OCX(Microsoft Windows Common Controls 6.o(Service Pack 6)引起的

python - 使用 Jupyter 笔记本将具有多个工作表的 Excel 文件转换为多个 csv 文件

vba - 在将一行复制到另一行时排除某些列

vba - 在下一个空行的不同工作表中复制并粘贴(转置和值)设置范围