Excel表格的快速动态扩展与删除行

news2024/11/18 20:26:21

实例需求:工作表中的表格(ListObject)名称为Table1,表格列数不确定,需要实现如下功能:

  • 当用户完成最后一行最后一列输入之后(如果该单元格为空,则视为输入未完成),表格自动扩展一行
  • 扩展行中,第一列填充自动序号,其他列填充NA
  • 如果用户双击表格中最后一行的任意单元格,那么删除该行,并相应调整表格单元格范围

效果如下所示。

请添加图片描述
示例代码如下。

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim oTab As ListObject, oListRow As ListRow
    Const TAB_NAME As String = "Table1"
    If Target.CountLarge = 1 And Len(Target.Cells(1).Value) > 0 Then
        Set oTab = Me.ListObjects(TAB_NAME)
        With oTab
            If Not Application.Intersect(.Range.Columns(.ListColumns.Count), Target) Is Nothing Then
                If Target.Offset(1).ListObject Is Nothing Then
                    Set oListRow = .ListRows.Add
                    Application.EnableEvents = False
                    mRow.Range.Value = "NA"
                    oListRow.Range(1) = .ListRows.Count
                    Application.EnableEvents = True
                End If
            End If
        End With
    End If
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Dim oTab As ListObject
    Const TAB_NAME As String = "Table1"
    If Target.ListObject.Name = TAB_NAME Then
        Set oTab = Target.ListObject
        If Target.Offset(1).ListObject Is Nothing Then
            Application.EnableEvents = False
            oTab.ListRows(oTab.ListRows.Count).Delete
            Cancel = True
            Application.EnableEvents = True
        End If
    End 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行代码取消双击操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1396284.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Golang个人web框架开发-学习流程

Golang-个人web框架 github仓库创建github仓库 web框架学习开发周期第一阶段--了解第一阶段思考小结 第二阶段第三阶段 github仓库 github地址:ameamezhou/golang-web-frame 后续还将继续学习更新 创建github仓库 设置免密登录 ssh-keygen 一路回车就OK 上面有告…

x-www-form-urlencoded接收方式代码示例

数据回推方式是 “x-www-form-urlencoded”,可以选择使用 GET 或 POST 方法来接收数据回推。 使用 GET 方法接收数据回推时,您可以将数据作为查询参数附加在请求的 URL 中。例如: http://example.com/callback?param1value1&param2val…

Vue3使用

1、列表实现 <el-table :data"tableData" border style"width: 100%" selection-change"handleSelectionChange" :header-cell-style"{text-align:center}"><el-table-column type"selection" width"55"…

JAVA——数据类型与运算符

数据类型 注意事项&#xff1a;1.初始化操作是可选的, 但是建议创建变量的时候都显式初始化. 2.最后不要忘记分号, 否则会编译失败. 3.初始化设定的值为 10L , 表示一个长整型的数字. 10l 也可以. 4.float 类型在 Java 中占四个字节, 遵守 IEEE 754 标准. 由于表示的数据精度范…

广东金牌电缆:法大大电子合同助力业务风险管控

广东金牌电缆集团股份有限公司&#xff08;以下简称“广东金牌电缆”&#xff09;成立于2013年&#xff0c;现为广东省电线电缆重点生产企业、广东省守合同重信用单位、国家专精特新小巨人企业、国家高新技术企业&#xff0c;拥有自主商标“夺冠”&#xff0c;“夺冠”商标被评…

P4学习(五)实验二:Basic Tunneling

目录 一. 实验目的二. 实验过程1. Topo2. Parse3.Ingress 三. 实验结果1. 测试dst_addr 10.0.2.2的正常包2.测试走隧道的正常包3.发给h3但是带上隧道标签的包4.测试总结 四. 拓展1.table-entries里的匹配规则2.myTunnel_header.py 一. 实验目的 In this exercise, we will add…

“一键中日文件夹名转换 - 批量修改,轻松实现中文到日语的名称翻译“

在处理大量文件夹时&#xff0c;你是否曾为中日文件夹名称的转换而感到困扰&#xff1f;现在&#xff0c;有了我们的批量修改工具&#xff0c;这些烦恼全部消失&#xff01;只需简单几步&#xff0c;就能将中文名的文件夹名称翻译成日语&#xff0c;让你的文件管理更加高效。 …

最新企业数据实时同步软件推荐

实时同步软件能够帮助企业快速、准确地共享和更新数据&#xff0c;提高工作效率和决策质量。本文将介绍企业数据实时同步的概念、意义和应用场景&#xff0c;并推荐几款非常优秀的企业数据实时同步软件。 一、数据实时同步的意义 企业数据实时同步是指在企业内部或跨部门之间&…

13 STM32-随机数发生器 (RNG)

13.1 随机数发生器 (RNG)简介 RNG 处理器是一个以连续模拟噪声为基础的随机数发生器&#xff0c;在主机读数时提供一个 32 位的随机数. RNG 提供由模拟量发生器产生的 32 位随机数,两个连续随机数的间隔为 40 个 PLL48CLK 时钟信号周期 13.2 RNG框图 随机数发生器采用模拟电路…

多目标优化(Python):多目标粒子群优化算法(MOPSO)求解ZDT1、ZDT2、ZDT3、ZDT4、ZDT6(提供Python代码)

一、多目标粒子群优化算法 多目标粒子群优化算法&#xff08;MOPSO&#xff09;是一种用于解决多目标优化问题的进化算法。它基于粒子群优化算法&#xff08;PSO&#xff09;&#xff0c;通过引入多个目标函数和非支配排序来处理多目标问题。 MOPSO的基本思想是将问题转化为在…

React配置src根目录@

文章目录 1.打开webpack配置文件2.配置webpack 1.打开webpack配置文件 yarn eject or npm run eject 如果报错了记得提前 git commit一下 2.配置webpack 找到 webpack.config.js 文件在 webpack.config.js 文件中找到 alias 配置在alias里添加: path.resolve(src) , 或者 : pa…

文本按照标点符号切分符号丢掉问题

问题&#xff1a;文本按照标点符号切分符号丢掉问题 项目场景&#xff1a;需要对一个文字段落按照标点符号切分成一个个句子&#xff0c;使用正则切分的过程中发现标点符号丢了&#xff0c; 问题描述 文本按照标点符号切分符号丢掉问题 原始代码&#xff1a; public static v…

在分类任务中准确率(accuracy)、精确率(precision)、召回率(recall)和 F1 分数是常用的性能指标,如何在python中使用呢?

在机器学习和数据科学中&#xff0c;准确率&#xff08;accuracy&#xff09;、精确率&#xff08;precision&#xff09;、召回率&#xff08;recall&#xff09;和 F1 分数是常用的性能指标&#xff0c;用于评估分类模型的性能。 1. 准确率&#xff08;Accuracy&#xff09;…

ChatGPT Plus续费充值,到账延迟,如何申诉?

ChatGPT Plus充值总是到账延迟比较严重&#xff0c;一般多是通过充值链接代充值遇到&#xff0c;如果是账号登陆充值&#xff0c;是即时到账。但是有的客户不愿意提供账号密码&#xff0c;遇到延迟到账的情况如何解决呢&#xff1f;客户可按下面操作申诉&#xff0c;可快速到账…

大创项目推荐 深度学习花卉识别 - python 机器视觉 opencv

文章目录 0 前言1 项目背景2 花卉识别的基本原理3 算法实现3.1 预处理3.2 特征提取和选择3.3 分类器设计和决策3.4 卷积神经网络基本原理 4 算法实现4.1 花卉图像数据4.2 模块组成 5 项目执行结果6 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &a…

Ansys Zemax | 如何使用光学制造全息图修正像差

附件下载 联系工作人员获取附件 本文介绍了利用光学全息图降低单透镜像差的方法。在描述了表示全息图构造光束的两个 ZMX 文件之后&#xff0c;本文演示了如何在重现文件中设置 OFH。然后解释了如何轻松地从重现文件中访问任何结构造光束变量&#xff0c;以实现衍射受限单透镜…

Git一台电脑 配置多个账号

Git一台电脑 配置多个账号 Git一台电脑 配置多个账号 常用的Git版本管理有 gitee github gitlab codeup &#xff0c;每个都有独立账号&#xff0c;经常需要在一个电脑上向多个代码仓提交后者更新代码&#xff0c;本文以ssh 方式为例配置 1 对应账号 公私钥生成 建议&#…

canvas绘制图形

目录 1、canvas绘制矩形 2、canvas绘制线 3、canvas绘制圆 4、canvas绘制多圈动画圆 HTML5<canvas>元素用于图形的绘制&#xff0c;Canvas API主要聚焦于2D图形。 1、canvas绘制矩形 canvas是一个二维网格&#xff0c;左上角坐标为(0,0)&#xff0c;横轴为x轴&…

【Git】实习使用记录

浏览器可以访问github仓库&#xff0c;但是使用git就用不了 https://blog.csdn.net/m0_63230155/article/details/132070860 可能是git http和https代理的问题 git config --global --unset http.proxy git config --global --unset https.proxy可能之前http和https之前是…

Python实现自动化办公(使用第三方库操作Excel)

1 使用 xlrd 读取Excel数据 1.1 获取具体单元格的数据 import xlrd# 1. 打开工作簿 workbook xlrd.open_workbook("D:/Python_study_projects/Python自动化办公/Excel/test1.xlsx") # 2. 打开工作表 sheet1 workbook.sheets()[0] # 选择所有工作表中的第一个 # …