大家好,我们今日继续讲解VBA代码解决方案的第50讲内容:如何利用VBA代码,有效的屏蔽工作表的复制功能。为什么要进入这节的内容呢?因为有时我们并不希望用户对工作表中的数据进行复制粘贴操作,这些是我的私有财产,不能让人轻易的获得,那么该怎么办呢?此时我们可以把所有的复制功能都屏蔽掉,这里会利用三个知识点
一:CommandBars对象的FindControl方法。
应用于CommandBars对象的FindControl方法返回一个符合指定条件的CommandBarControl对象。语法如下:expression.FindControl(Type, Id, Tag, Visible, Recursive)
参数
a) expression是必需的,返回一个CommandBars对象。
b) Type是可选的,要查找控件的类型。
c) Id是可选的,要查找控件的标识符。
d) Tag是可选的,要查找控件的标记值。
e) Visible是可选,如果该值为True,那么只查找屏幕上显示的命令栏控件。默认值为False。
f) Recursive是可选的,如果该值为True,那么将在命令栏及其全部弹出式子工具栏中查找。此参数仅应用于CommandBar对象。默认值为False。
特别注意:如果没有控件符合搜索条件,那么FindControl方法返回Nothing。
二:利用CellDragAndDrop 属性设置单元格的拖放功能,如果允许使用单元格拖放功能,则该值为True,如果不允许则该值设为false.
三:关于应用于Application 对象的OnKey方法,这个知识点在我之前的文章中讲解过,这里给大家复习一下:应用于Application 对象的OnKey方法指定特定键或特定的组合键运行的过程,语法如下:expression.OnKey(Key, Procedure)
参数:a) expression是必需的,该表达式返回一个Application 对象。
b) Key是必需的,用于表示要按的键的字符串,具体请参阅VBA中的帮助。
c) Procedure是可选的,表示要运行的过程名称的字符串,如果将Procedure参数指定为空文本(''),则不发生任何操作。
下面我们看如何利用VBA代码达到屏蔽复制功能的作用,如下面的代码:
Dim CmdCtrls As CommandBarControls
Dim Cmd As CommandBarControl
Sub MyProCopy()
Set CmdCtrls = Application.CommandBars.FindControls(ID:=19)
For Each Cmd In CmdCtrls
Cmd.Enabled = False
Next
Application.CellDragAndDrop = False
Application.OnKey ('^c'), ''
End Sub
Sub MyStaCopy()
Set CmdCtrls = Application.CommandBars.FindControls(ID:=19)
For Each Cmd In CmdCtrls
Cmd.Enabled = True
Next
Application.CellDragAndDrop = True
Application.OnKey ('^c')
End Sub
代码解析:
第1、2行代码在模块顶部声明两个模块级的变量。
第3行到第10行代码ProCopy过程,屏蔽工作表中所有的复制功能。其中第4行到第7行代码使用FindControls方法将所有与'复制'相关的命令栏控件赋给变量CmdCtrls后将其Enabled设置为False。
第8行代码屏蔽单元格拖放功能,利用了应用于Application对象的CellDragAndDrop属性
第9行代码屏蔽<Ctrl+C>组合键功能。
第11行到第18行代码StaCopy过程,恢复所有的复制功能。
下面看代码窗口:
其次:运行MyProCopy后:我这里按钮1是关联的MyProCopy,此时复制不起任何作用,在A1单元格中也不存在填充柄。
最后我们运行MyStaCopy,我这里关联的是按钮2,如图,复制可以了,也出现了填充柄。
今日内容回向:
1 如何做到复制不起作用呢?大概的思路是怎么样的?
2 本文讲到了三个知识点,读者是否清楚了呢?
联系客服