ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 怎么才能让工作表禁止复制粘贴功能啊?

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2011-11-11 14:34 | 显示全部楼层 |阅读模式
各位老师:
   我刚才在工作表编辑器中写了一段代码,本来是想实现禁止工作表的复制和粘贴功能,但是写进去后,在调试的时候总是提示“运行时错误 无效的调用或参数”请哪位老师指点一下,谢谢!
代码是:
Private Sub Worksheet_Activate()
     With Application
   
        '屏蔽常用工具栏剪切、复制、粘贴
        .CommandBars(3).Controls("剪切(&T)").Enabled = False
        .CommandBars(3).Controls("复制(&C)").Enabled = False
        .CommandBars(3).Controls("粘贴(&P)").Enabled = False
        '屏蔽单元格右键菜单中的剪切、复制、粘贴命令
        .CommandBars("Cell").Controls("剪切(&T)").Enabled = False
        .CommandBars("Cell").Controls("复制(&C)").Enabled = False
        .CommandBars("Cell").Controls("粘贴(&P)").Enabled = False
        '屏蔽编辑菜单中的剪切、复制、粘贴命令
        .CommandBars(1).Controls("编辑(&E)").Controls("剪切(&T)").Enabled = False
        .CommandBars(1).Controls("编辑(&E)").Controls("复制(&C)").Enabled = False
        .CommandBars(1).Controls("编辑(&E)").Controls("粘贴(&P)").Enabled = False
        '屏蔽键盘剪切、复制、粘贴键
        .OnKey "^x", ""
        .OnKey "^c", ""
        .OnKey "^v", ""
    End With
End Sub

TA的精华主题

TA的得分主题

发表于 2011-11-11 14:43 | 显示全部楼层
楼主是否可以通过保护工作表来禁止复制粘贴呢?

TA的精华主题

TA的得分主题

发表于 2011-11-11 15:11 | 显示全部楼层
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Application.CutCopyMode = False
End Sub
在thisworkbook模块中加入此事件宏

评分

2

查看全部评分

TA的精华主题

TA的得分主题

发表于 2011-11-11 17:09 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
doitbest 发表于 2011-11-11 15:11
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Application.Cu ...

以下是本人在网上搜索后用工具破解的代码,很好用,可以禁止很多项,如禁止复制、粘贴、清除、填充等自己运行看吧。
窗体代码为:
Private Sub CommandButton2_Click()
Dim comm As Control
For Each comm In Me.Controls
If TypeName(comm) = "CheckBox" Then comm.Value = True
Next
End Sub
Private Sub CommandButton3_Click()
Dim comm As Control
For Each comm In Me.Controls
If TypeName(comm) = "CheckBox" Then comm.Value = False
Next
End Sub
Private Sub UserForm_Activate()
If Application.InputBox("请输入密码:", "权限验证", "不知道", Type:=1) <> 119 Then MsgBox "你没有操作权限": Unload Me: Exit Sub
Dim comm As Control
For Each comm In Me.Controls
If TypeName(comm) = "CheckBox" Then comm.Value = True
Next
End Sub
Private Sub CommandButton1_Click()
Dim comm As Control, i As Byte
i = 1
For Each comm In Me.Controls
If TypeName(comm) = "CheckBox" Then
Sheets("andy").Cells(i, 1).Value = comm.Value
i = i + 1
End If
Next
Dim ComBar As CommandBar
Dim ComBarCtrl As CommandBarControl
    EnableControl 295, Me.CheckBox5.Value '// ..cells
    EnableControl 296, Me.CheckBox5   '// ..Rows
    EnableControl 297, Me.CheckBox5.Value   '// ..Cols
    EnableControl 6002, Me.CheckBox2.Value  '// ..Cols
    EnableControl 478, Me.CheckBox6.Value  '// Edit > Delete...
    EnableControl 292, Me.CheckBox6.Value  '// &Delete...
    EnableControl 293, Me.CheckBox6.Value '// Row
    EnableControl 294, Me.CheckBox6.Value  '// Column
    EnableControl 847, Me.CheckBox6.Value  '// RightClick Tab
    EnableControl 21, Me.CheckBox3.Value   '// cut
    EnableControl 19, Me.CheckBox1.Value   '// copy
    EnableControl 22, Me.CheckBox2.Value   '// paste
    EnableControl 755, Me.CheckBox4.Value  '// pastespecial
    EnableControl 3125, Me.CheckBox6.Value '// Clear Contents
    EnableControl 1964, Me.CheckBox6.Value '// All
    EnableControl 872, Me.CheckBox6.Value  '// Formats
    EnableControl 755, Me.CheckBox4.Value  '// Formats
    EnableControl 873, Me.CheckBox6.Value  '// Contents
    EnableControl 874, Me.CheckBox6.Value  '// Comments
    EnableControl 809, Me.CheckBox2.Value   '// pastespecial
Application.CommandBars("cell").Controls(4).Enabled = False
    With Application
    If Me.CheckBox7 = False Then .OnKey "^c", "info"
    If Me.CheckBox7 = True Then .OnKey "^c"
    If Me.CheckBox8 = False Then .OnKey "^v", "info"
    If Me.CheckBox8 = True Then .OnKey "^v"
    If Me.CheckBox9 = False Then .OnKey "^x", "info"
    If Me.CheckBox9 = True Then .OnKey "^x"
    If Me.CheckBox10 = False Then .OnKey "{del}", "info"
    If Me.CheckBox10 = True Then .OnKey "{del}"
     .CellDragAndDrop = Me.CheckBox12.Value
    If Me.CheckBox11 = False Then .OnDoubleClick = "info"
    If Me.CheckBox11 = True Then .OnDoubleClick = ""
    End With
ThisWorkbook.Save
    Unload Me
End Sub
Sub EnableControl(iId As Integer, blnState As Boolean)
Dim ComBar As CommandBar
Dim ComBarCtrl As CommandBarControl
  On Error Resume Next
For Each ComBar In Application.CommandBars
    Set ComBarCtrl = ComBar.FindControl(ID:=iId, recursive:=True)
    If Not ComBarCtrl Is Nothing Then ComBarCtrl.Visible = blnState
Next
End Sub




模块代码为:
Sub auto_open()
    Dim Menu As CommandBarControl, SubMenu As CommandBarControl
    Set SubMenu = Application.CommandBars("tools").Controls.Add(msoControlPopup, 1, , 3, 1)
    SubMenu.Caption = "禁止复制与删除(&UnCopy)"
     With SubMenu.Controls.Add(msoControlButton, 1, , , True)
        .Caption = "禁止复制与删除(&Computer)"
        .OnAction = "禁止"
        .Style = msoButtonIconAndCaption
        .FaceId = 225
      End With
'-----------------------------------------
      With SubMenu.Controls.Add(msoControlButton, 1, , , True)
        .Caption = "恢复复制与删除(&Enable)"
        .OnAction = "恢复"
        .Style = msoButtonIconAndCaption
        .FaceId = 277
      End With
      With SubMenu.Controls.Add(msoControlButton, 1, , , True)
        .Caption = "使用说明(&About)"
        .OnAction = "关于复制"
        .Style = msoButtonIconAndCaption
        .FaceId = 272
      End With
  End Sub
Sub auto_close()
Application.CommandBars("tools").Reset
End Sub
Sub EnableControl(iId As Integer, blnState As Boolean)
Dim ComBar As CommandBar
Dim ComBarCtrl As CommandBarControl
  On Error Resume Next
For Each ComBar In Application.CommandBars
    Set ComBarCtrl = ComBar.FindControl(ID:=iId, recursive:=True)
    If Not ComBarCtrl Is Nothing Then ComBarCtrl.Visible = blnState
Next
End Sub

TA的精华主题

TA的得分主题

发表于 2011-11-11 17:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
tianhua_30005 发表于 2011-11-11 17:09
以下是本人在网上搜索后用工具破解的代码,很好用,可以禁止很多项,如禁止复制、粘贴、清除、填充等自己 ...

不足之处是只能全部禁止,或全部恢复,还没有只能禁止个别项,禁止保存后再打开要么全部禁止要么已全部恢复。本人也正在求其它高手解决此问题。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-11-12 21:22 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
doitbest 发表于 2011-11-11 15:11
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
Application.Cu ...

高手就是高手  一句话就解决问题了  赞

TA的精华主题

TA的得分主题

发表于 2011-11-13 20:11 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 tianhua_30005 于 2011-11-13 20:12 编辑
erblet 发表于 2011-11-12 21:22
高手就是高手  一句话就解决问题了  赞


运用此法只能在EXCEL中禁止,如果是从WORD或别的该当中复制的数据,再在EXCEL单元格中双击,然后再运用CTRL+V,便会轻轻松松地将数据复制到EXCEL单元格中,如果能彻底禁止在EXCEL中复制粘贴数据就好了,期盼中。。。。。

TA的精华主题

TA的得分主题

发表于 2011-11-13 20:35 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
学习中,不知有没用

TA的精华主题

TA的得分主题

发表于 2011-11-14 15:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2011-11-14 16:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
既要让人看,又不让人复制,干脆截图给别人算了。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 12:25 , Processed in 0.045870 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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