如果在Excel中有数据表,则标准功能的一部分是在最后一个单元格中按Tab键会在表格的底部添加一个新行。我想使用有用的默认值自动填充该新行。特别是我想将当前日期时间放在一个单元格中,并将值复制到表格上一行的其他一些单元格中。
使用公式来做这件事是行不通的 - 例如使用=now()
作为日期时间标记是不合适的,因为每次电子表格重新计算时它都会自动更新,而我希望它在添加行时保留日期时间。
所以我试图将VBA写入由添加行的事件触发,并在该代码中将值写入新行的单元格中。从MS documentation我认为DataTable.TableNewRow
将是适当的事件。但是当我尝试为该事件编写任何代码时,它都没有被执行。当我在VBA对象浏览器中查找DataTable
时,未列出TableNewRow
事件。
版本:
所以我的问题:
DataTable.TableNewRow
是我应该参加的活动吗?答案 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。