excel中禁止使用“清除—全部和格式”命令的VBA如何写?

excel本身存在一个致命错误:对被保护工作表中可录入数据的“活动单元格”,一旦执行“清除—全部或格式”命令,“活动单元格”立即锁死,无法再录入数据。所以想用VBA禁止“清除—全部或格式”命令。

为了验证你的问题特意去看了看,是这样,清除全部是selection.clear,会把单元格恢复到原始的状态,即锁定状态,所以在你保护的表上当然无法编辑了,
我能想到的方法1,禁止菜单的“清除”菜单项(disable),或者干脆删掉这个项。具体可以参考下commandbar的对象属性及方法
方法2,用onchange事件,在工作表中添加这个事件,当有内容被改变可以检查下是否有单元格被锁定,锁定的解锁之。。。onclear这种事件是没有的。。。。
有问题的话可继续提问,望采纳追问

如何在工作表中添加onchange这个事件?具体代码怎样写?请赐教。

追答

alt+f11,打开vb编辑器,在左边双击一个工作表,在右边下拉表选worksheet,最右边选相应的事件change,下边会自动出现类似的代码:
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
下边,你该知道怎么做啦

追问

请赐教能达到“禁止清除——全部或格式”的全部vba代码,越完整越好,多谢啦!

追答

楼下的朋友代劳了,呵呵,就借花献佛吧,下边就是全部的代码,特别简单吧?顺便帮你解释下
当你清除了全部后,相关单元格会触发一个change事件,下面就是针对这个事件写的代码,首先解锁当前工作表的保护,然后把你清除全部的区域重新设置成没有锁定,再重新对表格加保护
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect Password:=""
Target.Locked = False
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=""
End Sub

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-10-22
添加工作表事件如下:两个引号内的密码你自己加上,保护的选项自己更改。
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect Password:=""
Target.Locked = False
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=""
End Sub
第2个回答  2012-10-21
知道有类似代码,你搜搜
第3个回答  2012-10-21
水平有限,只知道在EXCEL2003中使用VBA代码对这两个菜单进行屏蔽,EXCEL2007以上版本用VBA操作选项卡和功能区,貌似是一门学问,目前懂的人不是特别多吧.

如何用VBA语言屏蔽Excel编辑菜单中的“删除工作表”功能
Sub stopDeleSheet()Application.CommandBars(1).Controls(2).Controls(12).Enabled = FalseEnd Sub运行后效果如图,如果放在工作簿打开事件中,就能对该工作簿自动生效。你也可以把这句代码放在模块中作为Excel加载项,这样就可以对所有Excel文档生效了 ...

Excel vba 清除本sheet所有单元格内容和清除所有sheet中所有单元格...
Public Sub 清除本工作表() Worksheets("sheet1").UsedRange.ClearContentsEnd SubPublic Sub 清除所有表() Dim WS As Worksheet For Each WS In Worksheets WS.UsedRange.ClearContents NextEnd Sub

怎样在excel工作簿中利用VBA禁止删除批注
Sub Example() Dim i As CommandBarControl For Each i In Application.CommandBars.FindControls If i.ID = 1592 Then i.OnAction = "MySub" End If Next End Sub Sub MySub() MsgBox "不能删除批注!" End Sub 我在07版测试过了,OK ...

excel中如何用vba,让表格所有列不能被删除(复杂)
1、利用SelectChange事件,来捕捉用户选择工作表区域的行为 2、用VBA把系统菜单、快捷菜单中删除列的菜单项都封了,这样他就是选择了也无法调用删除菜单 3、把系统菜单和快捷菜单中的删除行菜单项封了。如果在SelectChange事件中,用户选择的不是第1、2行,重新激活这个菜单项允许他删除,不然仍然保持菜单...

excel中如何用vba,让表格所有列不能被删除(复杂)
用保护工作表功能应该就可以了。全选,设置单元格格式-保护,解除锁定,确定;选中1、2行,单元格格式-保护,锁定;工具-保护-保护工作表,除了“选定锁定单元格”和“删除列”外,其他打勾。设置密码。搞定

excel中如何用vba,让表格所有列不能被删除(好像把所有人难住了)_百...
If Target.Columns.Count = 1 And Target.Rows.Count = ActiveSheet.Rows.Count Then With Application .ScreenUpdating = False .Undo .ScreenUpdating = True End With End If End Sub --- 这个VBA程序最大的问题是在做Undo时,execel是对每个单元去做的 undo,因此屏幕会有闪烁且花的时间较长...

EXCEL2010 VBA如何禁止删除工作表
方法1:使删除功能不可用 打开文档或激活文档后即使功能不可用 Sub DisableDelSheet()Application.CommandBars("edit").Controls(12).Enabled = False Application.CommandBars("ply").Controls(3).Enabled = False End Sub 关闭文档或切换文档之前记住要恢复功能可用 Sub EnableDelSheet()Application....

Excel 如何清空指定单元格区域全部内容的VBA
1、新建一个EXCEL工作表,而后打开,在下方工作表标签位置,就是sheet1的地方,点击鼠标右键,而后在弹出的选项卡里面找到查看代码 2、点击查看代码,而后会弹出EXCEL支持的后台代码VBA界面,我们我们可以看到左侧是我们的工作表标签,而后右边就是代码窗口 3、我们在sheet1的右侧代码窗口,输入代码,这里的...

请问EXCEL2007中如何用VBA屏蔽“格式刷”和“清除”按钮呀?
word2007如何屏蔽关闭按钮 ,最小化按钮, 还有最大化按钮全部屏蔽掉,2003中用api setWindowLong可以, 2007就不行了,顶多只能屏蔽掉最小化按钮!

vba如何清除excel所有单元格的格式
软件版本:Office2007 方法如下:1.下面单元格中存在填充底色、文字颜色、边框以及条件格式等等诸多格式:2.Alt+F11,在当前工作表中输入代码如下:3.F5执行代码,返回Excel,就看到所有格式都没有了:

相似回答