Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 4350|回复: 4

[分享] 【烟花原创】VBA零基础之第50篇 工作表对象Worksheet(五)

[复制链接]
发表于 2013-12-15 11:15 | 显示全部楼层 |阅读模式
  Worksheet.ProtectContents 属性
  表示指定工作表的内容是否受保护,Boolean 类型,只读。
  要打开内容保护,请使用 Protect 方法,并将 Contents 参数设置为 True
  当对受保护的工作表进行写入时操作时,会产生一个1004的运行错误。
  示例:
   If ActiveSheet.ProtectContents Then
      MsgBox "当前工作表的内容处于保护状态,无法写入,请先解除保护"
   Else
      Range("a1").Value = 1
   End If
  这里有个前提,就是单元格的保护选项中锁定需要勾选。
  如果锁定没有勾选,还是可以直接写入的。
  为了避免不必要的错误,在写入单元格前先检测当前工作表的内容是否受保护。
  如果在保护状态,则提示解决保护,否则直接写入单元格。

  Worksheet.ProtectDrawingObjects 属性
  表示特定工作表的形状是否受保护,Boolean 类型,只读。
  要打开形状保护,请使用 Protect 方法,并将 DrawingObjects 参数设置为 True
  当工作表内的形状牌保护时,执行删除方法会产生代码为-214702480的错误,提示内容为“指定的值超出了范围”。
  当碰到这个错误提示时就要注意当前工作表的保护了。
  解决方法:一是解除保护,二是保护时,编辑对象要勾选(DrawingObjects=false)。
  示例:
    If ActiveSheet.ProtectDrawingObjects Then
       MsgBox "当前工作表的形状内容处于保护状态,无法删除,请先解除保护"
    Else
       For Each shp In ActiveSheet.Shapes
      shp.Delete
       Next
       MsgBox "当前工作表内的形状删除完成"
    End If

  Worksheet.Protection 属性
  返回一个 Protection 对象,该对象表示工作表的保护选项。
  Protection对象的属性如下:
    AllowDeletingColumns 是否允许删除受保护工作表上的列,只读。
    AllowDeletingRows 是否允许删除受保护工作表上的行,,只读。
    AllowEditRanges 返回一个 AllowEditRanges 对象。
    AllowFiltering 是否允许用户使用工作表受保护之前设置的“自动筛选”,只读。
    AllowFormattingCells 是否允许对受保护的工作表上的单元格进行格式设置,只读。
    AllowFormattingColumns 是否允许对受保护的工作表上的列进行格式设置,只读。
    AllowFormattingRows 是否允许对受保护的工作表上的行进行格式设置,只读。
    AllowInsertingColumns 是否允许在受保护的工作表上插入列,只读。
    AllowInsertingHyperlinks是否允许在受保护的工作表上插入超链接,只读。
    AllowInsertingRows 是否允许用户在受保护的工作表上插入行,只读。
    AllowSorting 是否允许在受保护的工作表上使用排序选项,只读。
    AllowUsingPivotTables 是否允许用户在受保护的工作表上处理数据透视表,只读。
  其中每一个设置都对应着保护工作表中的某个选项。

  Worksheet.ProtectionMode 属性
  表示是否启用了用户界面专用保护,Boolean 类型,只读。
  要打开用户界面保护,请使用 Protect 方法,并将 UserInterfaceOnly 参数设置为 True
  关于Protect方法的UserInterfaceOnly属性描述如下:
    UserInterfaceOnly如果为 True,则保护用户界面,但不保护宏。
    如果省略此参数,则既保护宏也保护用户界面。
    说得直接点就是,当为True时,用VBA是可以修改单元格的,但是在工作表操作是不能修改的。
    这个属性设置只适用于当前会话,工作簿关闭后再打开属性又会是False
    如果每次都想保护时能够用代码操作的话,可以在OPEN事件里在调用protect方法传递UserInterfaceOnly:=True
  示例:
    If ActiveSheet.ProtectContents Then
     ActiveSheet.Unprotect
    End If
    '直接调用activesheet.unprotect也是可以的。
    '调用Unprotect方法时,如果工作表并没有保护,则方法不起作用。
    ActiveSheet.Protect userinterfaceonly:=True
    If ActiveSheet.ProtectionMode Then
     Range("a1").Value = Now
    End If
    ActiveSheet.Unprotect
    ActiveSheet.Protectuserinterfaceonly:=False
    Range("a1").Value = Now
    '这里会报1004错误
    '如果在上一行的protect方法中省略userinterfaceonly:=False,还是能写入。
    '如果在调用protect方法时有在参数里明确设置过userinterfaceonly:=true的情况下
    '如果取消这项,建议在再次调用Protect方法时还是显式加上userinterfaceonly:=false
    '虽然帮助里说这个参数省略时为False,但从刚刚的测试发现,还是能写入。
    '似乎有记忆效应。

  Worksheet.ProtectScenarios 属性
  表示特定工作表的方案是否处于保护状态,Boolean 类型,只读。

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-6-11 12:30 | 显示全部楼层
回复

使用道具 举报

发表于 2014-6-18 11:18 | 显示全部楼层
回复

使用道具 举报

发表于 2014-6-18 16:23 | 显示全部楼层
{:35:}
回复

使用道具 举报

发表于 2014-6-25 07:33 | 显示全部楼层
Worksheet.ProtectScenarios 属性
  表示特定工作表的方案是否处于保护状态,Boolean 类型,只读。
谢谢分享,标记,五十
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-2 19:09 , Processed in 0.206874 second(s), 3 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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