【问题标题】:Enable Drop Down Macro for Protected Sheet为受保护的工作表启用下拉宏
【发布时间】:2020-12-10 05:34:24
【问题描述】:

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

对我如何实现这一点有什么建议吗?完整的代码是什么样的?

非常感谢!

【问题讨论】:

    标签: excel vba protected


    【解决方案1】:

    @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
    

    【讨论】:

    • 将 ActiveSheet.Unprotect 和 Protect 添加到代码的顶部和底部效果很好!
    【解决方案2】:

    如上所述,但如果您不想保护/取消保护,请将下拉列表放入表单并使用:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    
    Sheet1.Protect "Password", UserInterfaceOnly:=True
    
    End Sub
    

    其中“密码”更改为您想要的任何密码。

    【讨论】:

      猜你喜欢
      • 2018-03-11
      • 2019-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-05
      • 1970-01-01
      相关资源
      最近更新 更多