如何解决为受保护的工作表启用下拉宏
我创建了一个宏,该宏允许用户从下拉列表中选择一个选项,该选项可取消隐藏与其选择相对应的所选行。问题是当我保护工作表时,当我为下拉列表选择一个选项时,出现以下错误“运行时错误'1004'”。我需要保护此工作表,以便用户无法触摸显示的数据集。这是示例代码(原始版本很长):
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Activate
If Not Application.Intersect(Range("C15"),Range(Target.Address)) Is nothing Then
Select Case Target.Value
Case Is ="Option 1"
Rows("17:75").EntireRow.Hidden = True
Case Is ="Option 2"
Rows("17:28").EntireRow.Hidden = False
End Select
End If
End Sub
我一直在阅读其他线程,并且遇到了一些选项,它们说我需要取消保护表并保护我的表,但是我不确定如何将其添加到上面的代码中。如果这是我要完成的工作的最佳选择
选项1
Sub UnprotectAll()
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Worksheets
sh.Unprotect Password:=yourPassword
Next sh
End Sub
Sub ProtectAll()
Dim sh As Worksheet
For Each sh In ActiveWorkbook.Worksheets
sh.Protect Password:=yourPassword
Next sh
End Sub
UserInterFaceOnly:=True
关于如何实现此目标的任何建议?完整的代码是什么样的?
非常感谢!
解决方法
@ExcelNoob我根据您的问题做出了以下假设:
- 仅活动工作表相关
- 您将单元格C15的格式设置为“未锁定”(当工作表不受保护时,右键单击C15 / format / protection并取消选中“锁定”和“隐藏”
- 您已指示要隐藏或不隐藏的正确行(似乎有些奇怪?)
- 只有2个选项
在这种情况下,下面的最低代码将满足您的要求。如果要使用特定的密码,只需将其放在双引号之间即可。
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("C15"),Target) Is Nothing Then
ActiveSheet.Unprotect Password:=""
If Range("C15").Value = "Option 1" Then
Rows("17:75").Hidden = True
ElseIf Range("C15").Value = "Option 2" Then
Rows("17:28").Hidden = False
End If
ActiveSheet.Protect Password:=""
End If
End Sub
,
如上所述,但是如果您不想保护/取消保护,请以表格形式放下并使用:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Sheet1.Protect "Password",UserInterfaceOnly:=True
End Sub
将“密码”更改为所需的任何密码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。