为受保护的工作表启用下拉宏

我创建了一个宏,该宏允许用户从下拉列表中选择一个选项,该选项可取消隐藏与其选择相对应的所选行。问题是当我保护工作表时,当我为下拉列表选择一个选项时,出现以下错误“运行时错误'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

选项2-将此代码添加到下面的某处

UserInterFaceonly:=True

关于如何实现此目标的任何建议?完整的代码是什么样的?

非常感谢!

iCMS 回答:为受保护的工作表启用下拉宏

@ExcelNoob我根据您的问题做出了以下假设:

  1. 仅活动工作表相关
  2. 您将单元格C15的格式设置为“未锁定”(当工作表不受保护时,右键单击C15 / format / protection并取消选中“锁定”和“隐藏”
  3. 您已指示要隐藏或不隐藏的正确行(似乎有些奇怪?)
  4. 只有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

将“密码”更改为所需的任何密码。

本文链接:https://www.f2er.com/1708931.html

大家都在问