ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VSTO中如何禁止删除某一特定工作表

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-1-25 09:21 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
VSTO中如何禁止删除某一特定工作表?哪位大侠能帮忙写个范例,谢谢

TA的精华主题

TA的得分主题

发表于 2013-1-27 18:32 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
这个很简单。。。

打开表格的时候(也就是人还没有开始操作的时候),检查指定的表是否存在。存在就复制一张然后隐藏
用户每次selectchange的时候 检查一次 这个表在不在。。。如果不在了。。那就不是删除了么。。你做提示:不允许删除。然后再恢复。。
文件关闭的时候。。。自动删除备份的表格。。
这个方法比较愚蠢。。但是比较容易实现,可以保留原来的所有 颜色字体 公式。。。。是保守做法

当然你可以把每个单元格的内容加载入单独的内存空间。。判断不在后再写入回去。。。这个。。涉及你的数据结构。如果你有表格的任何信息没有保存上。恢复的时候这些东西就丢失了。。。什么注释。格式什么的

最牛逼的。也是最复杂的。。就是API去挂个钩子。。检测用户有没有按下 删除表格的按键,再判断是不是禁止删除的。。。然后拦截这个消息。。这个是最高明的。。也是技术含量最高的。。

当然还有更牛逼的。。。就是 修改表名为  “表名(不准删除)”,一般情况下不遇上变态级的用户 这个表都是存在的。。


评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-1-28 09:04 | 显示全部楼层

VBA有如下的实例代码,但是搬到VSTO无法到达目的。

#001 Public Ctl As CommandBarControl
#002 Sub DelSht()
#003 Set Ctl = Application.CommandBars.FindControl(ID:=847)
#004 Ctl.OnAction = "MyDelSht"
#005 End Sub
#006 Sub ResSht()
#007 Set Ctl = Application.CommandBars.FindControl(ID:=847)
#008 Ctl.OnAction = ""
#009 End Sub
#010 Sub MyDelSht()
#011 If VBA.UCase$(ActiveSheet.CodeName) = "SHEET2" Then
#012 MsgBox "禁止删除" & ActiveSheet.Name & "工作表!"
#013 Else
#014 ActiveSheet.Delete
#015 End If
#016 End Sub

TA的精华主题

TA的得分主题

发表于 2013-1-28 15:19 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
xmhjf 发表于 2013-1-28 09:04
VBA有如下的实例代码,但是搬到VSTO无法到达目的。

#001 Public Ctl As CommandBarControl

你这个 好像是。。。excel2000的代码。。。。

TA的精华主题

TA的得分主题

发表于 2013-1-28 20:21 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
  1. Dim WithEvents DelAnNiu As Office.CommandBarButton
  2.     Private Sub ThisWorkbook_Startup() Handles Me.Startup
  3.         DelAnNiu = Application.CommandBars.FindControl(Id:=847)
  4.     End Sub
  5. Private Sub DelAnNiu_Click(ByVal Ctrl As Microsoft.Office.Core.CommandBarButton, ByRef CancelDefault As Boolean) Handles DelAnNiu.Click
  6.         If ActiveSheet.Name = "Sheet1" Then
  7.             MsgBox("本表禁止删除!")
  8.             CancelDefault = True
  9.         End If
  10.     End Sub
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2013-1-29 13:18 | 显示全部楼层
amesman 发表于 2013-1-28 20:21

用了你的代码在2010里面测试无效,什么情况。。。

TA的精华主题

TA的得分主题

发表于 2013-1-29 21:59 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
2010没试过,我的是2007,测试通过。。。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2025-1-12 16:13 , Processed in 0.040600 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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