大家好,我们今日继续讲解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 本文讲到了三个知识点,读者是否清楚了呢? |
|