企业网站建设 租用服务器,description+wordpress,公司建设一个网站首页,a站网址实例需求#xff1a;工作表中的表格#xff08;ListObject#xff09;名称为Table1#xff0c;表格列数不确定#xff0c;需要实现如下功能#xff1a;
当用户完成最后一行最后一列输入之后#xff08;如果该单元格为空#xff0c;则视为输入未完成#xff09;#…实例需求工作表中的表格ListObject名称为Table1表格列数不确定需要实现如下功能
当用户完成最后一行最后一列输入之后如果该单元格为空则视为输入未完成表格自动扩展一行扩展行中第一列填充自动序号其他列填充NA如果用户双击表格中最后一行的任意单元格那么删除该行并相应调整表格单元格范围
效果如下所示。 示例代码如下。
Private Sub Worksheet_Change(ByVal Target As Range)Dim oTab As ListObject, oListRow As ListRowConst TAB_NAME As String Table1If Target.CountLarge 1 And Len(Target.Cells(1).Value) 0 ThenSet oTab Me.ListObjects(TAB_NAME)With oTabIf Not Application.Intersect(.Range.Columns(.ListColumns.Count), Target) Is Nothing ThenIf Target.Offset(1).ListObject Is Nothing ThenSet oListRow .ListRows.AddApplication.EnableEvents FalsemRow.Range.Value NAoListRow.Range(1) .ListRows.CountApplication.EnableEvents TrueEnd IfEnd IfEnd WithEnd If
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)Dim oTab As ListObjectConst TAB_NAME As String Table1If Target.ListObject.Name TAB_NAME ThenSet oTab Target.ListObjectIf Target.Offset(1).ListObject Is Nothing ThenApplication.EnableEvents FalseoTab.ListRows(oTab.ListRows.Count).DeleteCancel TrueApplication.EnableEvents TrueEnd IfEnd If
End Sub【代码解析】 第1~18行代码为工作表的Change事件实现扩展表格新增行。 第3行代码定义表格名称。 第4行代码判断发生变化Range参数Target为单个单元格并且单元格内容不为空。 第5行代码获取表格对象。此处并未检查是否存在指定名称的ListObject因此有可能产出运行时错误。 第7行代码代码判断Target是否位于表格的最后一列由于表格的总列数不确定因此需要使用.Range.Columns(.ListColumns.Count)获取最后一列的对象其中.ListColumns.Count为表格的列数。 第8行代码判断Target之下相邻单元格是否在表格中如果满足条件说明Target位于表格的最后一行。这个也不是严谨逻辑判断如果两个表格上下相邻那么就会出现误判如果需要严谨判断那么需要进一步对比表格名称。 第9行代码扩展表格增加一行。 第10行代码禁止系统事件激活。 第11行代码将新增行中的单元格全部填充为NA。 第12行代码更新第一列单元格内容为自动序号。 第13第行代码恢复允许系统事件激活。
第19~31行代码为工作表的BeforeDoubleClick事件实现删除最后行。其中与Change事件相同的代码不再赘述。 第22行代码判断Target位于指定名称的表格中。 第26行代码删除表格的最后一行同时表格范围将自动缩减。 第27行代码取消双击操作。