excel怎么避免因补充破坏数据有效性

Excel 数据有效性(在 Excel 2013 及以上版本中改称数据验证)是一项很方便的功能,帮助我们让用户在单元格中输入指定的数据 。然而,将数据复制粘贴到设置了数据有效的单元格时,会破坏掉数据有效设置 。
利用 VBA 代码,可以避免因粘贴数据而破坏单元格数据有效设置 。我原来的思路是,如果是有数据有效设置的单元格,在用户粘贴数据前,我保存数据有效设置,在用户但一直没有着手编写代码,今天在jkp-ads.com 中看到实现这样功能的代码,偷个懒,稍稍作整理和修改,辑录于此,供有需要的朋友参考 。
要想避免粘贴操作带来的影响,首先要捕获所有可以采用的粘贴操作命令,有很多粘贴命令,包括:
1.Ctrl + V 组合键
2.Ctrl +插入组合键
3.Shift +插入组合键
4.输入键
5. 功能区,菜单等位置的命令
下面是捕获粘贴操作并指定相应处理的代码 。
在 VBE 中,插入一个称为 clsCommandBarCatcher 的类模块,输入代码:
‘ 捕获命令预设的预设以阻止粘贴
公共WithEvents oComBarCtl作为Office.CommandBarButton
私人子Class_Terminate()
设置oComBarCtl = Nothing
结束子
私人Sub oComBarCtl_Click(_
ByVal Ctrl作为Office.CommandBarButton,_
cancelDefault为Boolean)
cancelDefault = True
Application.OnTime现在,“ MyPasteValues”
结束子
插入一个标准模块,输入代码:
选件专用模块
“ 禁用复制粘贴
昏暗的mcCatchers作为收藏
‘ 确保将所有的复制操作重定向到自已的操作
‘ 视网膜覆盖掉样式和有效性验证
子CatchPaste()
StopCatchPaste
设置mcCatchers =新收藏
‘ 粘贴按钮
AddCatch“虚拟”,22
‘ 粘贴(带拖动)
EnableDisableControl 6002,否
‘ 选择性粘贴按钮
AddCatch“虚拟”,755
‘ 粘贴链接按钮
AddCatch“虚拟”,2787年
‘ 粘贴格式按钮
AddCatch“虚拟”,369
‘ 插入剪切单元格按钮
AddCatch“虚拟”,3185
‘ 插入复制单元格按钮
AddCatch“虚拟”,3187
‘Ctrl + V
Application.OnKey“ ^ v”,“ MyPasteValues”
‘Ctrl +插入
Application.OnKey“ ^ {Insert}”,“ MyPasteValues”
‘Shift +插入
Application.OnKey“ + {Insert}”,“ MyPasteValues”
‘输入
Application.OnKey“?”,“ MyPasteValues”
Application.OnKey“ {Enter}”,“ MyPasteValues”
‘ 修改单元格折射率模式
如果是Application.CellDragAndDrop然后
Application.CellDragAndDrop =假
万一
结束子
‘ 重置粘贴操作为重置值
子StopCatchPaste()
尽可能暗淡
关于错误继续
设置mcCatchers = Nothing
EnableDisableControl 6002,真
Application.OnKey“ ^ v”
Application.OnKey“ ^ {插入}”
Application.OnKey“ + {插入}”
Application.OnKey“?”
Application.OnKey“ {Enter}”
‘Application.CellDragAndDrop = True
结束子
‘ 添加到监控的命令栏控件
Sub AddCatch(sCombarName为字符串,lID为长)
Dim oCtl作为CommandBarControl
昏暗的CCatcher作为clsCommandBarCatcher
Dim oBar作为CommandBar
设置oCtl =否
关于错误继续
设置oBar = Application.CommandBars(sCombarName)
如果oBar什么都没有,那么
设置oBar = Application.CommandBars.Add(sCombarName,,,True)
oBar.Controls.Add ID:= lID
oBar.Visible = True
万一
带oBar
设置oCtl = .FindControl(ID:= lID,递归:= True)
如果oCtl什么都没有

推荐阅读