ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 7653|回复: 7

禁止删除工作表的另外两种思路

[复制链接]

TA的精华主题

TA的得分主题

发表于 2016-11-16 13:22 | 显示全部楼层 |阅读模式
    看了教程,基本都是将删除工作表的功能指向一个新的自编子过程来实现的,我在2013中怎么也无法正常实现这个功能,示例中的这些代码总是没法正常保护工作表不被删除。
    教程示例见附件。
    我实现这个功能用了下面两种方法:
1:
Private Sub Worksheet_BeforeDelete()
    MsgBox "禁止删除本工作表,本excel文件将立即将退出!"
    Application.DisplayAlerts = False
    ActiveWorkbook.Close True
End Sub

就是在删除工作表的动作进行以前,强制保存并退出文件。缺点:会导致后面的删除工作表操作出错,不过只要点下确定就行了。
2:
Private Sub Worksheet_BeforeDelete()
    Sheets("工龄").Copy after:=Sheets("工龄")
    Sheets("工龄").Name = "dlsaflajl6535随便写个乱码字符串"
    ActiveSheet.Name = "工龄"
    MsgBox "禁止删除这个工作表!(codename已经变更)"
End Sub

缺点:这个工作表Sheets("工龄")的codename会变。

范例22 禁止删除指定工作表.rar

12.25 KB, 下载次数: 245

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-16 13:24 | 显示全部楼层
这个事件如果 加个参数 cancel as boolean,用来阻止删除工作表
就不用废这么大力气想办法了

TA的精华主题

TA的得分主题

发表于 2016-11-16 13:57 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-11-16 15:04 | 显示全部楼层

抛砖引玉,我其实是想知道,附件中提供的方法为什么无效

TA的精华主题

TA的得分主题

发表于 2019-6-3 16:35 | 显示全部楼层
yjjjxf 发表于 2016-11-16 15:04
抛砖引玉,我其实是想知道,附件中提供的方法为什么无效

我也想问问这个问题,
Public Ctl As CommandBarControl
Sub DelSht()
    Set Ctl = Application.CommandBars.FindControl(ID:=847)
    Ctl.OnAction = "MyDelSht"
End Sub
Sub ResSht()
    Set Ctl = Application.CommandBars.FindControl(ID:=847)
    Ctl.OnAction = ""
End Sub
Sub MyDelSht()
    If VBA.UCase$(ActiveSheet.CodeName) = "SHEET2" Then
        MsgBox "禁止删除" & ActiveSheet.Name & "工作表!"
    Else
        ActiveSheet.Delete
    End If
End Sub


这个貌似不好用了。
我是office365

TA的精华主题

TA的得分主题

发表于 2021-5-26 11:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
我最帅 发表于 2019-6-3 16:35
我也想问问这个问题,
Public Ctl As CommandBarControl
Sub DelSht()

如何修改为,禁止删除所有工作表格呢。

TA的精华主题

TA的得分主题

发表于 2022-9-7 10:08 | 显示全部楼层
在第一个方法中,Application.DisplayAlerts = False的作用是关闭警告吗?这一句的作用是什么呢?

TA的精华主题

TA的得分主题

发表于 2024-6-13 16:44 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
我是这样实现的,在thisworkbook中加入以下代码:


Private Sub Workbook_SheetActivate(ByVal Sh As Object)
'对指定的工作表设定保护,这样起到禁止改名\插入工作表\或删除的功能--限制右键删除功能。
'如果要更改或删除、插入工作表就将下面的代码注释掉

If ActiveSheet.Name = "勿删1" Or ActiveSheet.Name = "勿删2"  Then
   ActiveWorkbook.Protect Structure:=True, Windows:=False '如果激活表是指定的表名就进行保护
Else
   ActiveWorkbook.Unprotect '如果不是激活表就取消保护
End If
End Sub


您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-17 13:56 , Processed in 0.041994 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表