yuantian 发表于 2021-3-10 21:14:10

分享Excel VBA操作,保护工作表用法

本帖最后由 yuantian 于 2021-3-24 21:20 编辑

前言:【本帖可能会比较啰嗦,劳烦大家伙儿耐心看完】
1.最近在学习Excel相关文件处理,突发奇想,是否可以利用AU3实现保护工作表。
查询本论坛相关内容及国外AU3官方论坛,只找见了简单的添加密码,
只有这一句。。。
$oWorkbook.ActiveSheet.Protect("123")
并不能自定义一些功能,例如保护工作表后,允许插入列,或者删除列
[就是允许自定义勾选以下内容]



2.然后事先通过录制Excel宏命令,获取到了Excel VBA当中可能会用到的命令

Sub 宏1()
      ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
      False, AllowFormattingCells:=True, AllowFormattingColumns:=True, _
      AllowFormattingRows:=True, AllowInsertingColumns:=True, AllowInsertingRows _
      :=True, AllowInsertingHyperlinks:=True, AllowDeletingColumns:=True, _
      AllowDeletingRows:=True, AllowSorting:=True, AllowFiltering:=True, _
      AllowUsingPivotTables:=True
End Sub
3.我看到这个宏命令之后,还是比较懵的,
因为并不知道怎么把这类的代码转化为AU3能够识别的格式
尝试改过一版,
With $oWorkbook.ActiveSheet
      .Protection.DrawingObjects=True
      .Protection.Contents=True
      .Protection.Scenarios=True
      .Protection.AllowFormattingCells=True
      .Protection.AllowFormattingColumns=True
      .Protection.AllowFormattingRows=True
      .Protection.AllowInsertingColumns=True
      .Protection.AllowInsertingRows=True
      .Protection.AllowInsertingHyperlinks=True
      .Protection.AllowDeletingColumns=True
      .Protection.AllowDeletingRows=True
      .Protection.AllowSorting=True
      .Protection.AllowFiltering=True
      .Protection.AllowUsingPivotTables=True
      .Protect("123")
Endwith结果运行之后,发现程序只进行加密了,并不能实现自定义选择保护内容反复在查找是否格式不正确,不得解、、

4.最后在AU3英文论坛上偶然看到一条注释,写法为
;$excel.Activesheet.Protect("", True, True)这个就突然提醒我了,是不是只有这一个功能,然后像一般的函数一样,那些条件只是函数里的部分参数,默认不修改的那种
于是反复测试,一点点儿记录,最终得到了算是能够满足需求的


5.最最后,话不多说,上代码


#include <Excel.au3>


$sFilePath = @ScriptDir & "\Test.xlsx"
$oExcel = _Excel_Open()
$oWorkbook = _Excel_BookNew ($oExcel, 1)

;表格内容填充
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, "Data", "A1");
Local $aArray2D = [, , ]
_Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $aArray2D, "B2")

$oWorkbook.ActiveSheet.Protect("123", _                ;密码
                                                True, _                ;True,保护形状;                                                False,允许修改形状;
                                                True, _                ;True,保护内容,保护图表
                                                True, _                ;True,保护方案;                                                False,允许修改形状;
                                                True, _                ;True,保护用户界面但不保护宏;                           False,则既保护宏也保护用户界面;
                                                True, _                ;True,允许设置单元格格式;                                 False,取消勾选;                | AllowFormattingCells
                                                True, _                ;True,允许设置列格式;                                        False,取消勾选;                | AllowFormattingColumns
                                                True, _                ;True,允许设置行格式;                                        False,取消勾选;                | AllowFormattingRows
                                                True, _                ;True,允许插入列;                                             False,取消勾选;                | AllowInsertingColumns
                                                True, _                ;True,允许插入行;                                             False,取消勾选;                | AllowInsertingRows
                                                True, _                ;True,允许插入超链接;                                       False,取消勾选;                | AllowInsertingHyperlinks
                                                True, _                ;True,允许删除行;                                             False,取消勾选;                | AllowDeletingColumns
                                                True, _                ;True,允许删除列;                                             False,取消勾选;                | AllowDeletingRows
                                                True, _                ;True,允许排序;                                                   False,取消勾选;                | AllowSorting
                                                True, _                ;True,允许使用自动筛选;                                    False,取消勾选;                | AllowFiltering
                                                True _                ;True,允许使用数据透视表和数据透视图;                False,取消勾选;                | AllowUsingPivotTables
                                                )

$oWorkbook.ActiveSheet.EnableSelection = 0      ;xlUnlockedCells=1,只能选择未锁定单元格;xlNoSelection=-4142,不能选择任何内容;xlNoRestrictions=0,可以选择任何内容。
_Excel_BookSaveAs($oWorkbook, $sFilePath, Default, True)

--------------------------------------
6.微软查到VBA内容相关:
(1)关于保护工作表基础内容
https://docs.microsoft.com/zh-cn/office/vba/api/excel.chart.protect

(2)关于保护工作表Protection 对象内容
https://docs.microsoft.com/zh-cn/office/vba/api/excel.protection

(3)关于【选定锁定单元格】及【选定解除锁定的单元格】部分的值来源在此:
https://docs.microsoft.com/zh-cn/office/vba/api/excel.xlenableselection

--------------------------------------
为什么1和2能搭配着用,就不得而知了、。。
:face (9):

==========================




yohoboy 发表于 2021-3-11 00:14:59

收藏,收藏

make2855 发表于 2021-3-11 08:00:57

有价值,感谢分享

Dontang2018 发表于 2021-3-11 13:17:41

有价值, 感谢分享

netmaple 发表于 2021-3-18 20:32:39

看贴必须回复,。。。。!
页: [1]
查看完整版本: 分享Excel VBA操作,保护工作表用法