找回密码
 加入
搜索
查看: 2206|回复: 4

[系统综合] 分享Excel VBA操作,保护工作表用法

[复制链接]
发表于 2021-3-10 21:14:10 | 显示全部楼层 |阅读模式
本帖最后由 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[3][5] = [[11, 12, 13, 14, 15], [21, 22, 23, 24, 25], [31, 32, 33, 34, 35]]
_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能搭配着用,就不得而知了、。。


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




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×

评分

参与人数 2金钱 +100 收起 理由
floor6ggg + 40
zghwelcome + 60 生动,好贴

查看全部评分

发表于 2021-3-11 08:00:57 来自手机 | 显示全部楼层
有价值,感谢分享
发表于 2021-3-11 13:17:41 | 显示全部楼层
有价值, 感谢分享
发表于 2021-3-18 20:32:39 | 显示全部楼层
看贴必须回复,。。。。!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-3-28 20:17 , Processed in 0.079619 second(s), 21 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表