我想了下有2个方案,一个是利用保护工作表实现,另一个当然就是我所说的利用VBA代码了。
第一种保护工作表方案实现起来比较简单(适合懒人)。
具体步骤:工具-保护–保护工作表–在“允许此工作表的所有用户进行”的下拉框中选择全部为不选中,保护工作表。搞定!此时不管你点哪里都不能进行数据区域选择!此时复制、粘贴按钮是未禁止的,但是限制了数据区域,什么也干不了。操作简单就不再截图了~
第二种VBA代码。还是贴代码吧,具体原理都注释在上面了。
- Private Sub Workbook_Open()
- 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
原理就是由EXCEL事件来触发VBA的运行禁用快捷键和鼠标右键菜单的复制、粘贴功能,这里选择OPEN是在工作簿打开时执行,此时复制、粘贴呈现非激活的灰色(上图),当然事件也有很多,如activate激活事件,具体选择随意。
我只想到了两种,如果大家有什么好的idea,可以给我留言,当然我也接受大家的Excel难题,我会帮助大家解决,尽我所能吧!我喜欢你们给我留难题和你们的思路!
在这里感谢上善若水同学的问题!
乖乖隆的东,韭菜炒大葱。
请问如果我想限制本地用户黏贴其他格式,然后用VBA怎么编写?谢谢! 🙂
@ T_T : 不是很明白你表达的意思?什么叫其他格式?
@ Kael.Z : 就是说我将工作簿限定统一的格式,比如对齐格式。然后如何限制其他用户无法用黏贴的方式更改格式?
@ Kael.Z : 因为即使我用保护工作簿也无法阻止其他格式以黏贴的方式篡改。
@ T_T : 只能说你没设置好保护工作簿的属性,要取消选中单元格这个选项才能防止被复制
@ Kael.Z : 我忘了说明一点了,这张工作簿是多用户公用的,所以不可以阻止别人复制。另外我的想法是限制其他的用户(比如编写一个VBA)自动将其他地方复制来的格式更正为本工作簿的设定格式。这下清楚了哈哈
@ T_T : 你没示例的表格,我不好确定,你那些可以编辑的单元格是以什么样的格式保存,数字?文本?还是某一列或某一行全是统一格式….
@ Kael.Z : 对齐方式都是居中,边框格式A列:G列全为最细的实线,就这些。
@ T_T : 边框格式感觉你要依靠代码,完全是化简为繁了。我可以用代码帮你强制居中。毕竟我也是初学者 ❓
@ Kael.Z : 么事么事,哈哈,边框我再问问别人好了,那个强制居中怎么写?辛苦了,嘿嘿
@ T_T : 代码放进VBA编辑器
Private Sub Worksheet_Change(ByVal Target As Range)
Columns(“A:G”).HorizontalAlignment = xlCenter
End Sub
@ T_T : 这个代码强制A~G列数据在发生改变时强制居中,及时人为左右对齐,也会自动改回居中
@ Kael.Z :恩恩,谢谢啦!祝你有所成就,嘿嘿
@ T_T : 没什么,纯属瞎折腾吧~
@ Kael.Z : 昨天那个代码放进去以后运行前弹出个框说要输入宏名称,该怎么写?
@ T_T : 将上面的代码直接复制进thisworkbook这个里面,粘贴保存就好了~
@ Kael.Z : 试过了,保存后运行时总是弹出一个框,需要填宏名称什么的,怎么回事?
@ T_T : 哈哈,我记错了是在你想要的那张表插入代码比如sheet1,直接粘贴就好了,我给你发了个示例,你看邮件的代码吧~
@ Kael.Z : 懂了,它自动运行的..
@ T_T : 对头~!他在发生数据改变时自动运行~
@ Kael.Z : 有一个问题。。现在是可以强制居中了,但是必须对黏贴后的单元格双击以后才会变成居中,这样即便黏贴后保存了,我在打开仍然是没有居中的。。这个怎么办?
@ T_T : 这是利用事件触发的,如果你想达到万无一失的情况,把Private Sub Worksheet_Activate()
Columns(“A:G”).HorizontalAlignment = xlCenter
End Sub贴在那个下面吧,这样打开表格就能自动居中了~
@ Kael.Z : 恩,谢了,虽然需要切换工作表才可以执行。但已经不错了,谢谢。
@ T_T : 呵呵,客气了~
Pingback: 恢复Excel粘贴复制功能 | 印象·派
感谢博主解答问题,学习了,以后再向你请教问题了!
可以的,你把你的想法留下,我会尽我所能帮你的~呵呵~欢迎常来~
..哎,我也就做做简单的表格.高级的东西对我来说还真没什么用.
这个也不算高级,只是简便重复的操作!
excel不太熟悉,不过这个很强大。
呵呵,别人提的问题
路过,支持一下博主
恩,谢谢,常走动~
前来支持博主!以后多多走动哈
一定的。哈哈
其实你的改变也不是很大呀,你可以先试着改改的了!
我还是现在本地调试好了再上传,免得到时麻烦~