限制Excel表中进行复制粘贴操作

限制复制粘贴操作
昨天写了篇关于VBA限制打印的文章,本意是为了保护数据不被他人打印,今天上善若水同学却给我提出了另外一个问题—-让excel中的数据保密,不能被复制粘贴呢?
我想了下有2个方案,一个是利用保护工作表实现,另一个当然就是我所说的利用VBA代码了。
第一种保护工作表方案实现起来比较简单(适合懒人)。
具体步骤:工具-保护–保护工作表–在“允许此工作表的所有用户进行”的下拉框中选择全部为不选中,保护工作表。搞定!此时不管你点哪里都不能进行数据区域选择!此时复制粘贴按钮是未禁止的,但是限制了数据区域,什么也干不了。操作简单就不再截图了~
第二种VBA代码。还是贴代码吧,具体原理都注释在上面了。
 
  1. Private Sub Workbook_Open()   
  2.     With Application   
  3.         '屏蔽常用工具栏剪切、复制、粘贴   
  4.         .CommandBars(3).Controls("剪切(&T)").Enabled = False   
  5.         .CommandBars(3).Controls("复制(&C)").Enabled = False   
  6.         .CommandBars(3).Controls("粘贴(&P)").Enabled = False   
  7.         '屏蔽单元格右键菜单中的剪切、复制、粘贴命令   
  8.         .CommandBars("Cell").Controls("剪切(&T)").Enabled = False   
  9.         .CommandBars("Cell").Controls("复制(&C)").Enabled = False   
  10.         .CommandBars("Cell").Controls("粘贴(&P)").Enabled = False   
  11.         '屏蔽编辑菜单中的剪切、复制、粘贴命令   
  12.         .CommandBars(1).Controls("编辑(&E)").Controls("剪切(&T)").Enabled = False   
  13.         .CommandBars(1).Controls("编辑(&E)").Controls("复制(&C)").Enabled = False   
  14.         .CommandBars(1).Controls("编辑(&E)").Controls("粘贴(&P)").Enabled = False   
  15.         '屏蔽键盘剪切、复制、粘贴键   
  16.         .OnKey "^x", ""  
  17.         .OnKey "^c", ""  
  18.         .OnKey "^v", ""  
  19.     End With   
  20. End Sub   
禁止复制粘贴
原理就是由EXCEL事件来触发VBA的运行禁用快捷键和鼠标右键菜单的复制、粘贴功能,这里选择OPEN是在工作簿打开时执行,此时复制、粘贴呈现非激活的灰色(上图),当然事件也有很多,如activate激活事件,具体选择随意。
我只想到了两种,如果大家有什么好的idea,可以给我留言,当然我也接受大家的Excel难题,我会帮助大家解决,尽我所能吧!我喜欢你们给我留难题和你们的思路!
在这里感谢上善若水同学的问题!
分享到:

38 条评论

点击这里取消回复。
注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。

昵称
  1. 郑州白癜风医院

    乖乖隆的东,韭菜炒大葱。

  2. T_T

    请问如果我想限制本地用户黏贴其他格式,然后用VBA怎么编写?谢谢! 🙂

    1. Kael.Z

      @ T_T : 不是很明白你表达的意思?什么叫其他格式?

      1. T_T

        @ Kael.Z : 就是说我将工作簿限定统一的格式,比如对齐格式。然后如何限制其他用户无法用黏贴的方式更改格式?

      2. T_T

        @ Kael.Z : 因为即使我用保护工作簿也无法阻止其他格式以黏贴的方式篡改。

        1. Kael.Z

          @ T_T : 只能说你没设置好保护工作簿的属性,要取消选中单元格这个选项才能防止被复制

          Notify
        2. T_T

          @ Kael.Z : 我忘了说明一点了,这张工作簿是多用户公用的,所以不可以阻止别人复制。另外我的想法是限制其他的用户(比如编写一个VBA)自动将其他地方复制来的格式更正为本工作簿的设定格式。这下清楚了哈哈

          Notify
        3. Kael.Z

          @ T_T : 你没示例的表格,我不好确定,你那些可以编辑的单元格是以什么样的格式保存,数字?文本?还是某一列或某一行全是统一格式….

          Notify
        4. T_T

          @ Kael.Z : 对齐方式都是居中,边框格式A列:G列全为最细的实线,就这些。

          Notify
        5. Kael.Z

          @ T_T : 边框格式感觉你要依靠代码,完全是化简为繁了。我可以用代码帮你强制居中。毕竟我也是初学者 ❓

          Notify
        6. T_T

          @ Kael.Z : 么事么事,哈哈,边框我再问问别人好了,那个强制居中怎么写?辛苦了,嘿嘿

          Notify
        7. Kael.Z

          @ T_T : 代码放进VBA编辑器
          Private Sub Worksheet_Change(ByVal Target As Range)
          Columns(“A:G”).HorizontalAlignment = xlCenter
          End Sub

          Notify
        8. Kael.Z

          @ T_T : 这个代码强制A~G列数据在发生改变时强制居中,及时人为左右对齐,也会自动改回居中

          Notify
        9. T_T

          @ Kael.Z :恩恩,谢谢啦!祝你有所成就,嘿嘿

          Notify
        10. Kael.Z

          @ T_T : 没什么,纯属瞎折腾吧~

          Notify
        11. T_T

          @ Kael.Z : 昨天那个代码放进去以后运行前弹出个框说要输入宏名称,该怎么写?

          Notify
        12. Kael.Z

          @ T_T : 将上面的代码直接复制进thisworkbook这个里面,粘贴保存就好了~

          Notify
        13. T_T

          @ Kael.Z : 试过了,保存后运行时总是弹出一个框,需要填宏名称什么的,怎么回事?

          Notify
        14. Kael.Z

          @ T_T : 哈哈,我记错了是在你想要的那张表插入代码比如sheet1,直接粘贴就好了,我给你发了个示例,你看邮件的代码吧~

          Notify
        15. T_T

          @ Kael.Z : 懂了,它自动运行的..

          Notify
        16. Kael.Z

          @ T_T : 对头~!他在发生数据改变时自动运行~

          Notify
        17. T_T

          @ Kael.Z : 有一个问题。。现在是可以强制居中了,但是必须对黏贴后的单元格双击以后才会变成居中,这样即便黏贴后保存了,我在打开仍然是没有居中的。。这个怎么办?

          Notify
        18. Kael.Z

          @ T_T : 这是利用事件触发的,如果你想达到万无一失的情况,把Private Sub Worksheet_Activate()
          Columns(“A:G”).HorizontalAlignment = xlCenter
          End Sub贴在那个下面吧,这样打开表格就能自动居中了~

          Notify
        19. T_T

          @ Kael.Z : 恩,谢了,虽然需要切换工作表才可以执行。但已经不错了,谢谢。

          Notify
        20. Kael.Z

          @ T_T : 呵呵,客气了~

          Notify
  3. Pingback: 恢复Excel粘贴复制功能 | 印象·派

  4. 上善若水

    感谢博主解答问题,学习了,以后再向你请教问题了!

    1. Kael.Z

      可以的,你把你的想法留下,我会尽我所能帮你的~呵呵~欢迎常来~

  5. 蓝殇

    ..哎,我也就做做简单的表格.高级的东西对我来说还真没什么用.

    1. Kael.Z

      这个也不算高级,只是简便重复的操作!

  6. 无锡网站优化

    excel不太熟悉,不过这个很强大。

    1. Kael.Z

      呵呵,别人提的问题

  7. 青岛专业软件研发

    路过,支持一下博主

    1. Kael.Z

      恩,谢谢,常走动~

  8. SEO优化

    前来支持博主!以后多多走动哈

    1. Kael.Z

      一定的。哈哈

      1. 明月登楼

        其实你的改变也不是很大呀,你可以先试着改改的了!

        1. Kael.Z

          我还是现在本地调试好了再上传,免得到时麻烦~

          Notify