背景
需要做一个物料信息统计表,Item数量尽可能少,结构清晰,有数据透视图,部分表格禁止编辑。
步骤
首先需要明确表的结构,这里我采用的是“组合”,将Item按照父子的从属关系进行区分罗列,进而组合。如下图所示
image.png
接下来就是做数据透视图,正常做法,略去详细步骤。
最后就是部分列的保护功能,如果仅仅只是保护部分数据,可以直接在“审阅/允许编辑区域”中进行操作,但有个问题,这样会导致组合在不输入密码的情况下无法使用。因此这里采用VBA的方式进行操作。
组合不能用的保护方式
在sheet标签处右键查看代码,进入VBA编辑区,在ThisWorkbook处贴入以下代码,保存退出,重新打开就可以操作了。
这里,我指定密码为PWD,A,B,D,G,H,I列为不可修改,具体可以根据自己的实际情况进行修改。关于Protect后各个参数的含义,大家可以查看下面的图示。
Protect参数命令图示Private Sub Workbook_Open()
Dim xWs As Worksheet
Set xWs = Application.ActiveSheet
xWs.Protect Password:="PWD", UserInterfaceOnly:=True, >AllowInsertingColumns:=False, AllowInsertingRows:=True, >AllowFiltering:=True, AllowUsingPivotTables:=True, >AllowFormattingCells:=True
xWs.Range("A:A,B:B,D:D,G:G,H:H,I:I").Locked = True
xWs.EnableOutlining = True
xWs.EnableAutoFilter = True
End Sub
VBA加密,目前为止,我们的密码是直接写在了VBA里,这就失去意义了,为VBA工程加上密码,确保安全。
在下图所示为止,增加密码保护。
VBA加密
至此,我们已经实现了既定的目标。
这里有几个地方,还是想再强调下:
- VBA脚本要放在ThisWorkbook,不能放在模块和sheet里。上面那段代码,只有在运行后是起作用的,如果放在sheet或者模块里,每次打开excel文件,依然无法使用组合。放在ThisWorkbook中,每次打开excel文件都会执行一遍这段代码。
- excel文件需要保存为xlsm格式,因为包含宏。
网友评论