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

news2024/11/26 22:33:56

今天继续给大家聊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插件的安装与卸载

 

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

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

相关文章

SpringMVC系列八: 手动实现SpringMVC底层机制-下

手动实现SpringMVC底层机制-下 实现任务阶段五&#x1f34d;完成Spring容器对象的自动装配-Autowired 实现任务阶段六&#x1f34d;完成控制器方法获取参数-RequestParam1.&#x1f966;将 方法的 HttpServletRequest 和 HttpServletResponse 参数封装到数组, 进行反射调用2.&a…

软件测试/测试开发丨Selenium如何复用已打开浏览器

步骤说明&#xff1a; 将浏览器启动方式添加到环境变量。便于我们在终端任意位置启动浏览器终端中使用命令行&#xff0c;打开浏览器debug模式代码中创建driver时&#xff0c;添加debugger_address设置 以Chrome浏览器为例&#xff0c;设置步骤如下&#xff1a; 将浏览器启动…

SpringMVC系列六: 视图和视图解析器

视图和视图解析器 &#x1f49e;基本介绍&#x1f49e; 自定义视图为什么需要自定义视图自定义试图实例-代码实现自定义视图工作流程小结Debug源码默认视图解析器执行流程多个视图解析器执行流程 &#x1f49e;目标方法直接指定转发或重定向使用实例指定请求转发流程-Debug源码…

重磅新闻!狂揽120台订单!大运重卡唐山销服一体运营店盛大开业

2024年6月13日&#xff0c;唐山市迎来了一件令人振奋的商用车行业盛事——大运重卡经销商唐山滦都汽贸暨滦州通世坤销服一体盛大开业&#xff01; 参加本次开业庆典的有大运重卡营销中心副总经理助理张申、大运重卡营销中心销售总监倪世界、唐山滦都汽车贸易有限公司总经理王力…

【STM32】使用标准库创建一个工程

创建工程 本系列文章中使用的硬件和软件版本如下&#xff1a; CPU型号&#xff1a;STM32F407ZGT6 Keil版本&#xff1a;V5.38.0.0 ARM编译器版本&#xff1a;V5.06 标准库版本&#xff1a;V1.8.0 1.下载标准库 官网链接&#xff1a;STSW-STM32065 - STM32F4 DSP和标准外…

Go语言轻松搞定Excel的操作,简单生成图表

原文链接&#xff1a;GO轻松搞定Excel 库简介 Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库&#xff0c;基于 ECMA-376&#xff0c;ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLS…

微信小程序接入lottie动画

1、注意&#xff1a;canvas渲染出来的层级太高&#xff0c;当有弹窗的情况会暴露在弹窗外 模拟器上会有这个问题&#xff0c;线上版本不会有 2、需求 需要把lottie动画在小程序的环境下进行展示 3、什么是lottie动画 由Airbnb开发并开源。允许设计师将复杂的矢量动画导出为…

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

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

【论文精读】ViM: Out-Of-Distribution with Virtual-logit Matching 使用虚拟分对数匹配的分布外检测

文章目录 一、文章概览&#xff08;一&#xff09;问题来源&#xff08;二&#xff09;文章的主要工作&#xff08;三&#xff09;相关研究 二、动机&#xff1a;Logits 中缺失的信息&#xff08;一&#xff09;logits&#xff08;三&#xff09;基于零空间的 OOD 评分&#xf…

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

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

grafana连接influxdb2.x做数据大盘

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

数据可视化---绘制常用图表,组合图表,定制图表主题

题目一&#xff1a;绘制桑基图&#xff0c;展示某商铺新老客服群体的商品喜好 编写程序。根据第9.3.7&#xff0c;绘制桑基图&#xff0c;展示某商铺新老客服群体的商品喜好。 运行代码&#xff1a; #绘制桑基图&#xff0c;展示某商铺新老客服群体的商品喜好 from pyecharts…

男士内裤哪个品牌质量好?国内质量好的男士内裤推荐

今天想和大家分享一个虽不起眼但至关重要的时尚单品——男士内裤。它可能不像外套或鞋子那样引人注目&#xff0c;但却承载着男士们日常的舒适与健康。选择一款合适的男士内裤&#xff0c;不仅能提升穿着体验&#xff0c;更是展现个人品味和生活态度的关键。以下是一些选择内裤…

机器学习实战19-利用机器学习模型与算法实现销售数据的归因分析与图形生成

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下机器学习实战19-利用机器学习模型与算法实现销售数据的归因分析与图形生成。 归因分析是数据分析中的一个重要环节&#xff0c;它主要用于确定不同因素对特定结果&#xff08;如销售额、转化率等&#xff09;的贡献…

Nuxt.js 深入浅出:目录结构与文件组织详解

title: Nuxt.js 深入浅出&#xff1a;目录结构与文件组织详解 date: 2024/6/18 updated: 2024/6/18 author: cmdragon excerpt: 摘要&#xff1a;本文详述了Nuxt.js框架中关键目录与配置文件的作用及使用方法&#xff0c;包括布局设定、页面结构管理、插件集成、静态资源处理…

Linux安装并配置Java

1、Linux操作系统安装Java 1.1、下载Java JDK解压包 官方提供的网址&#xff1a; 选择Linux版本 下载列表选择最后一项&#xff0c;通过解压方式安装 倒数第二项是以rpm方式进行安装&#xff0c;另一篇安装MySQL时就是用到rpm方法。 1.2、解压JDK tar -zxvf jdk-8u411-lin…

建筑幕墙甲级设计资质:申请条件与评分标准

建筑幕墙甲级设计资质的申请条件与评分标准可以清晰归纳如下&#xff1a; 申请条件 一、企业基本情况 独立企业法人资格&#xff1a;企业需具有独立企业法人资格。注册资本&#xff1a;注册资本不少于300万元人民币。 二、技术人员条件 主要技术负责人或总工程师&#xff…

1688新品爆款筛选技巧,电商小白也能秒变选品达人

不管是做淘宝、拼多多、抖音、小红书、京东等国内电商平台的商家&#xff0c;可能都有去1688选品的需求。电商环境越来越卷&#xff0c;为了迎合市场和消费者&#xff0c;商家必须不断推陈出新&#xff0c;挖掘潜力新品。 所以有的商友表示想选1688上所有带新品标识的品&#…

Hi3861 OpenHarmony嵌入式应用入门--轮询按键

本篇介绍使用轮询方式读取gpio状态来判断按键状态。 原理图如下 GPIO API API名称 说明 hi_u32 hi_gpio_init(hi_void); GPIO模块初始化 hi_u32 hi_io_set_pull(hi_io_name id, hi_io_pull val); 设置某个IO上下拉功能。 hi_u32 hi_gpio_set_dir(hi_gpio_idx id, hi_gpi…

ollama部署本地大模型

文章目录 一、Ollama1.ollama简介2.安装流程&#xff08;1&#xff09;官网下载ollama&#xff08;2&#xff09;选择特定的大模型版本下载安装&#xff08;3&#xff09;测试 二、spring项目集成Ollama的大模型1.环境信息2.配置文件&#xff08;1&#xff09;application.yml&…