VBA学习(9):按指定名单一键删除工作表

今天继续给大家聊VBA编程中工作表对象的常用操作,主要内容是如何批量删除工作表;也就是删除单个工作表、删除全部工作表和删除指定名单内的工作表。

1.删除单个工作表

删除工作表需要使用到工作表对象的delete方法,语法格式如下:

工作表对象.delete

举个例子,以下代码可以删除当前工作簿的首个工作表。

Sub DelSht()
    Application.DisplayAlerts = False
    Worksheets(1).Delete
    Application.DisplayAlerts = True
End Sub

删除工作表的动作,会引发系统会弹出一个消息框

图片

第2行代码的作用就是屏蔽此类系统显示的警告和消息,避免程序运行被打断

第4行代码恢复系统显示警告消息的功能。

2.删除全部工作表

以下代码可以删除当前工作簿"全部"的工作表

Sub DelShtAll()
    Dim sht As Worksheet
    Application.DisplayAlerts = False
    For Each sht In Sheets '集合遍历
        If sht.Name <> ActiveSheet.Name Then
            sht.Delete '如果sht的名字不等于当前工作表则删除
        End If
    Next
    Application.DisplayAlerts = True
End Sub

代码采用集合遍历的方式遍历当前工作簿每一张工作表,如果该工作表不是当前工作表则删除。代码运行后,工作簿就只剩下当前工作表孤零零一个人了。

打个响指,需要说明两点,一个是系统要求工作簿必须存在至少一张可见工作表,因此我们并不能将全部工作表都解雇,上述代码选择了保留当前工作表

图片

另外,删除这个动作是无视工作表是否隐藏的,即便工作表隐藏不可见,也一样会被删掉

3.删除指定名单工作表

如下图所示,需要根据A2:B9单元格区域所提供的名单将相关工作表全部删除。

图片

示例代码如下:

Sub DelShtByCustom()
    Dim sht As Worksheet, rngData As Range, c As Range
    Dim d As Object, y As Long
    Dim strName As String, strErr As String
    If ActiveWorkbook.ProtectStructure = True Then
        MsgBox "工作簿有保护,需要先撤销保护再运行代码"
        Exit Sub
    End If
    On Error Resume Next '使程序忽略错误继续运行
    Set rngData = Application.InputBox("请选择需要删除的工作表名单区域", _
                                Title:="公众号Excel星球", _
                                Default:=Selection.Address, _
                                Type:=8)
    Set rngData = Intersect(rngData, rngData.Parent.UsedRange)
    If rngData Is Nothing Then
        MsgBox "未选择有效数据区域。"
        Exit Sub
    End If
    Set d = CreateObject("scripting.dictionary") '后期字典
    For Each sht In Sheets '遍历工作表名存入字典
        strName = sht.Name
        d(strName) = ""
    Next
    With Application '取消屏幕刷新、信息警告等
        .ScreenUpdating = False
        .DisplayAlerts = False
        .Calculation = xlCalculationManual
    End With
    For Each c In rngData '遍历名单区域
        strName = c.Value
        If Len(strName) Then '如果名字非空
            If d.exists(strName) Then '如果字典中存在删除表名
                If Sheets.Count > 1 Then '判断工作表个数是否可删
                    Sheets(strName).Delete '删除工作表
                    y = y + 1 '累加个数
                Else
                    MsgBox "系统要求工作表必须保留至少一张,因此" & _
                            strName & "未能删除。"
                End If
            Else '如果不存在删除表名
                strErr = strErr & "," & strName '合并不存在的表名
            End If
        End If
    Next
    With Application '恢复屏幕刷新、信息警告等
        .ScreenUpdating = True
        .DisplayAlerts = True
        .Calculation = xlCalculationAutomatic
    End With
    If strErr <> "" Then
        MsgBox "以下名称工作簿中不存在工作表,未能删除:" & vbCrLf _
            & Mid(strErr, 2)
    Else
        MsgBox "处理完成。"
    End If
    Set d = Nothing
End Sub

代码详细解释见注释,概要总结如下:

第5至第8行代码判断工作簿是否有保护,工作簿结构保护状态下,工作表是不被允许开除的,违法行为知道吧?

第9行代码使程序忽视错误继续运行。

第10至第18行代码使用Application.InputBox语句允许户选择删除名单的区域,并判断该区域是否有效。

第19至第23行代码将当前工作簿现有工作表的名字存入字典。

第24至第28行代码取消屏幕刷新、警告消息框、公式重算等。

第29至第44行代码遍历名单数据,第32行代码判断字典中是否存在需要删除的表名,如果存在,则删除,否则使用变量strErr记录未能删除的名单。

第45至第49行代码恢复屏幕刷新、警告消息框、公式重算等。

第50至第55行代码使用Msgbox语句显示处理结果相关信息。

技术交流,软件开发,欢迎加微信xwlink1996 


作者其他作品:

VBA实战(Excel)(1):提升运行速度

Ribbon第一节:控件大全

HTML实战(1):新建一个HTML

VB.net实战(VSTO):Excel插件的安装与卸载

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python单行代码:一招鲜,吃遍天

大家好&#xff0c;在Python编程中&#xff0c;我们时常需要高效、简洁的代码来解决复杂的问题。今天&#xff0c;我将向大家介绍10个非常有用的Python单行代码。 一行代码指的是将复杂的任务浓缩在一行代码中完成。它充分利用Python的简洁和强大&#xff0c;使代码更简洁、更…

智能穿梭,无缝连接:迈威通信助力AGV智慧物流系统高效运转

随着智能制造模式的兴起&#xff0c;在工业4.0和“中国制造2025”的推动下&#xff0c;智能物流迎来了重大的发展机遇。AGV作为智慧仓储物流系统的“关键角色”之一&#xff0c;通过联系、调节离散型物流管理系统&#xff0c;使各环节有效地衔接起来&#xff0c;实现全厂物流运…

git使用摘樱桃的方式,实现特定需求进行提交合并

文章目录 先checkOut到主要的分支(需求提交到这) 然后双击点别的需求分支,对提交内容选定 进行摘樱桃操作 然后双击回到主要分支,会发现那2个提交内容代码已经在主要分支的本地里,选中其 右键选择Squash Commits进行合并 标注自己的需求标题提交名更改后, 最后进行push推送到…

grafana连接influxdb2.x做数据大盘

连接influxdb 展示数据 新建仪表盘 选择存储库 设置展示

【嵌入式】SD NAND:SD卡的集成与优化

嵌入式SD卡&#xff0c;也称为SD NAND或贴片式SD卡&#xff0c;是一种专为空间受限的设备设计的存储解决方案。这种存储卡与传统的SD卡不同&#xff0c;它采用贴片式封装&#xff0c;可以直接焊接到设备的PCB上&#xff0c;从而为电子设备提供内置存储功能。以下是嵌入式SD卡的…

Google 新 AI 为视频生成配乐和对白;Runway 发布 Gen-3 视频生成模型丨 RTE 开发者日报 Vol.226

开发者朋友们大家好&#xff1a; 这里是 「RTE 开发者日报」 &#xff0c;每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE&#xff08;Real-Time Engagement&#xff09; 领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「…

python+selenium之点击元素报错:‘NoneType‘ object has no attribute ‘click‘

今日遇到一个很奇怪的问题 case1:当使用顺序结构直接从登录到点击页面菜单&#xff0c;则可以正常点击菜单 case2&#xff1a;若把登录分离开&#xff0c;采用封装的方法点击菜单则会提示&#xff1a;‘NoneType’ object has no attribute ‘click’ 具体页面如下&#xff0c…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 字符串分隔(二)(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 字符串分隔(二)(100分) 🌍 评测功能需要订阅专栏后私信联系…

玩转nRF52840-DK开发套件 (5) RTT打印调试日志

一、两种日志信息的输出方式 日志信息输出可以方便调试者观察程序运行状态&#xff0c;通常用串口 printf 来输出日志。nRF52840-DK也可以用仿真器 JLink 的 RTT Viewer 输出方式。 二、SDK_config.h配置 勾选相关项&#xff1a; 三、SDK_config.h配置 在主函数 main 中&#x…

一图看懂华为云CodeArts API 7大特性,带你玩转一站式API

华为云CodeArts API是API全生命周期一体化协作平台 &#xff0c;支持开发者高效实现API设计、API开发、API测试、API托管、API运维、API变现的一站式体验。以API契约为锚点&#xff0c;CodeArts API保证了API各阶段数据高度一致&#xff0c;为开发者提供友好易用的API全流程端到…

如何在本地部署ChatTTS? 完美部署 简单几步 cpu gpu cuda

前言 最近,24-05-27号,github上出现了一个新项目,ChatTTS。该项目提供了一个文本转语音(Text To Speech)的开源方案,同时支持中文和英文。在官网的演示视频中,可以看到合成效果高度接近真人。 到目前(06-04)为止,已经有18.3k的star。 那我们就来看看这个模型的基本…

录制视频软件哪个好?录制视频,4款好软件推荐

随着网络技术的飞速发展和社交媒体的普及&#xff0c;录制视频已经成为人们记录生活、分享知识和展示才华的重要方式。在众多录制视频软件中&#xff0c;如何挑选一款功能强大、操作简便的工具&#xff0c;成为了许多用户的难题。本文将为您推荐4款优秀的录制视频软件&#xff…

想体验“时光倒流”吗?文件时光机——可道云teamOS,历史版本管理,随时回溯版本

大家在工作中&#xff0c;遇到过的最奔溃的事情是什么&#xff1f; 是工作没有做好&#xff0c;还是客户要求太离谱&#xff1f; 不知道大家有没有过这样的经历&#xff0c;根据客户要求改方案、改稿子&#xff0c;改了一版又一版&#xff0c;结果客户说还是最初版本更好………

深入理解计算机系统 CSAPP 家庭作业6.40

这书真是会绕. A:16*16*4 B:256 ,第一个for 50%不命中 0.5*16*16.第二个for 每两个循环1次不命中 也就是128次 C:0.25

【Python机器学习实战】 | 基于决策树的药物研究分类预测

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

C#开发-集合使用和技巧(六)特殊转换方法SelectMany的介绍和用法

介绍 SelectMany 方法在C#中用于将集合中的元素转换为其他类型的集合&#xff0c;并将这些集合扁平化为一个单一的序列。它是LINQ的一部分&#xff0c;允许你在一个序列上进行投影和过滤操作&#xff0c;然后将结果合并成一个序列。 方法定义 public static IEnumerable<…

面向对象进阶--继承(Java继承(超详解))

目录 1. 继承 1.1 继承概述 1.2 继承特点 1.3练习 1.4继承父类的内容 构造方法是否被子类继承 成员变量是否被子类继承 成员方法是否被子类继承 1.5总结 继承中&#xff1a;成员变量的访问特点 继承中&#xff1a;成员方法的访问特点 方法重写概述 方法重写的本质 …

什么是浅拷贝和深拷贝,如何用 js 代码实现?

〇、简介和对比 简介 浅拷贝&#xff1a;只复制原始对象的第一层属性值。 如果属性值是值类型&#xff0c;将直接复制值&#xff0c;本值和副本变更互不影响&#xff1b; 如果是引用数据类型&#xff0c;则复制内存地址&#xff0c;因此原始对象和新对象的属性指向相同的内存地…

小规模自建 Elasticsearch 的部署及优化

本文将详细介绍如何在 CentOS 7 操作系统上部署并优化 Elasticsearch 5.3.0,以承载千万级后端服务的数据采集。要使用Elasticsearch至少需要三台独立的服务器,本文所用服务器配置为4核8G的ECS云服务器,其中一台作为 master + data 节点、一台作为 client + data 节点、最后一…