总是听到或看到有人问,编程好学吗?如何入门?多久能学会?它能做些什么?怎么写代码呀?执行过程中出问题了谁能帮帮我...如果你也有类似的问题那就赶快关注我的公众号,一起学起来吧!
现今,数据安全越来越受到重视,在Excel中,使用VBA编码禁用复制功能是一种有效的数据保护手段,可以防止重要数据被意外复制、剪切、粘贴
1 实现原理
通过VBA代码,能够禁用鼠标拖拽操作、拦截复制粘贴的快捷键(如Ctrl+C/Ctrl+V),并屏蔽右键菜单中的相关选项,从而将所有可能的复制粘贴操作入口全部封锁,具体做法:
另外,对于极其敏感的区域,还可以再叠加“工作表保护”进行彻底锁定
友情提醒:这些方法对于熟悉Excel的高级用户并非绝对安全,但对于防范普通的、无意的数据复制和泄露已经足够有效
2.1 操作步骤
- 在VBA编辑器左侧的“工程资源管理器”窗口中,找到并双击目标工作簿下的ThisWorkbook对象,打开代码窗口
2.2 代码实现
代码中使用了以下四个工作簿事件
Workbook_Open
Workbook_Activate
Workbook_Deactivate
Workbook_BeforeClose
以此确保无论我们是通过打开文件、切换窗口还是其他方式操作,禁用功能都能及时生效;在离开该工作簿或关闭时,功能被恢复,不影响我们使用其他Excel文件
参考代码
Option ExplicitPrivate Sub Workbook_Open() ' 工作簿打开时,禁用复制相关功能 Call DisableCopyPasteEnd SubPrivate Sub Workbook_Activate() ' 工作簿被激活时(例如从其他工作簿切换回来),确保功能被禁用 Call DisableCopyPasteEnd SubPrivate Sub Workbook_Deactivate() ' 工作簿失活时,恢复功能,避免影响其他Excel实例或工作簿的正常使用 Call EnableCopyPasteEnd SubPrivate Sub Workbook_BeforeClose(Cancel As Boolean) ' 工作簿关闭前,恢复所有功能 Call EnableCopyPasteEnd Sub' 禁用复制、剪切、粘贴Sub DisableCopyPaste() With Application ' 清除当前剪贴板模式 .CutCopyMode = False ' 屏蔽键盘快捷键 .OnKey "^c", "" ' Ctrl+C .OnKey "^x", "" ' Ctrl+X .OnKey "^v", "" ' Ctrl+V '禁用单元格拖放 .CellDragAndDrop = False ' 禁用常用工具栏上的命令 On Error Resume Next ' 防止在不存在该命令栏的Excel版本中报错 .CommandBars("Standard").Controls("剪切(&T)").Enabled = False .CommandBars("Standard").Controls("复制(&C)").Enabled = False .CommandBars("Standard").Controls("粘贴(&P)").Enabled = False ' 禁用单元格右键菜单中的命令 .CommandBars("Cell").Controls("剪切(&T)").Enabled = False .CommandBars("Cell").Controls("复制(&C)").Enabled = False .CommandBars("Cell").Controls("粘贴(&P)").Enabled = False On Error GoTo 0 End With ' 为了以防万一,开启保护所有工作表功能(密码:123456),禁止选中单元格(强化禁止复制) Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets ws.Protect Password:="123456", AllowFormattingCells:=True, _ AllowSorting:=True, AllowFiltering:=True ' 取消选中单元格的权限,使复制无法进行 ws.EnableSelection = xlNoSelection Next wsEnd Sub' 启用复制、剪切、粘贴Sub EnableCopyPaste() With Application .CutCopyMode = False ' 恢复键盘快捷键 .OnKey "^c" .OnKey "^x" .OnKey "^v" ' 启用单元格拖放 .CellDragAndDrop = True ' 恢复常用工具栏和右键菜单命令 On Error Resume Next .CommandBars("Standard").Controls("剪切(&T)").Enabled = True .CommandBars("Standard").Controls("复制(&C)").Enabled = True .CommandBars("Standard").Controls("粘贴(&P)").Enabled = True .CommandBars("Cell").Controls("剪切(&T)").Enabled = True .CommandBars("Cell").Controls("复制(&C)").Enabled = True .CommandBars("Cell").Controls("粘贴(&P)").Enabled = True On Error GoTo 0 End With ' 解除所有工作表的保护(密码:123456) Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets ws.Unprotect Password:="123456" Next wsEnd Sub
备注:解除工作表保护时使用的密码(第80行代码),必须与当初设置保护时使用的密码(第49行代码)一致。如果需要更改密码,请务必同时更新
3 结尾
好了,今天的编程知识到此结束了,咱们下期继续
本公众号一直在不间断地分享免费的编程案例和实用技巧。无论您是用来提升自动化办公效率还是想提升自我,请关注我的公众号,解锁更多的编程知识