【问题标题】:Allowing user to hide columns when sheet is locked允许用户在工作表锁定时隐藏列
【发布时间】:2018-11-14 01:34:55
【问题描述】:

当工作簿中的工作表被锁定时,我正在使用以下 VBA 脚本为用户提供某些权限。我无法弄清楚如何添加一条还允许用户隐藏和取消隐藏列的行。有什么建议吗?

Sub EnableOutlining()
'Update 20140603
Dim xWs As Worksheet
Set xWs = Application.ActiveSheet
Dim xPws As String
xPws = Application.InputBox("Password:", xTitleId, "", Type:=2)
xWs.Protect Password:=xPws, Userinterfaceonly:=True
xWs.EnableOutlining = True
xWs.EnableOutlining = True
xWs.EnableAutoFilter = True
xWs.EnableFormatConditionsCalculation = True
End Sub

【问题讨论】:

    标签: excel vba show-hide


    【解决方案1】:

    将努力检查最后一个用户操作实际上是隐藏/取消隐藏,而不是其他。但现在应该允许用户隐藏/取消隐藏。

    对于列:

    xWs.protect Password:= "1234",AllowFormattingColumns:= true
    

    对于行:

    xWs.protect Password:= "1234",AllowFormattingRows:= true
    

    此脚本应有助于将用户活动限制为仅调整列宽。 (lastAction把隐藏列描述为调整宽度,一定是隐藏列真的只是一个最小化列宽的功能,不是什么特殊动作)

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim lastAction As String
            lastAction = Application.CommandBars("Standard").Controls("&Undo").List(1)
    
        If lastAction <> "Column Width" Then
            Application.EnableEvents = False
            Application.Undo
            MsgBox "PLEASE ONLY HIDE OR UNHIDE COLUMNS"
            Application.EnableEvents = True
        End If
    End Sub
    

    【讨论】:

    • 谢谢,但我不太了解您要做什么。我只想让用户使用 VBA 在锁定的工作簿中隐藏或取消隐藏他们选择的列。无需在其他工作表中指定列值。对于建议使用“xWs.AllowFormattingColumns:= true”的回复的第一部分,我收到一条错误消息,提示“未找到方法或数据成员”。我认为这是因为 AllowFormattingColumns 不是 EnableOutlining() 函数的一部分。
    • danny 看到编辑,很抱歉造成混乱。这现在可以工作,但它还允许用户在隐藏/取消隐藏之外进行其他格式更改。我试图想出一种方法来禁止隐藏/取消隐藏之外的任何格式更改。 @AJD 我希望今晚能解决这个问题,请提供帮助和意见。
    【解决方案2】:

    为此,您只需更改锁定工作表时允许用户处理的部分。我选择了除“选择锁定的单元格”之外的所有内容,然后它就可以工作了。这意味着代码仍然隐藏在我不想编辑的单元格中,但基于我的 VBA 代码的隐藏展开按钮正在工作。

    【讨论】:

    • 您的答案需要一些支持信息。您能否尝试更明确一点,并分享一些代码,说明如何准确执行您的建议?
    猜你喜欢
    • 2020-05-14
    • 1970-01-01
    • 1970-01-01
    • 2013-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多