如何使用 VBA 允许在受保护的工作表中编辑范围?

问题描述 投票:0回答:1

我只想阻止某些范围。换句话说,我想允许在受保护的工作表中进行编辑。我可以手动执行此操作,甚至可以在执行此操作时录制宏。但是当我尝试运行此过程的代码时,屏幕上会弹出错误窗口。

代码:

ActiveSheet.Protection.AllowEditRanges.Add Title:="Intervalo3", Range:= _
        Range("H18")
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

错误: 运行时错误1004 应用程序定义或对象定义错误。

我尝试在受保护的工作表中记录允许编辑范围的宏,因为我想自动执行此操作。我成功地录制了宏,允许编辑范围并保护工作表。但是,当我进入 VBA 工作区尝试运行此操作背后的代码时,我无法运行,并且弹出了错误窗口。

excel vba excel-2010 worksheet
1个回答
0
投票

我从来没有真正玩过

AllowEditRanges
- 通常我会按照@jkpieterse的建议进行操作,并在保护工作表之前解锁格式单元格>保护对话框中的单元格。容易多了。

话虽如此,看起来您无法调用与现有对象同名的

AllowEditRange
对象,如果您第二次运行它,这就是您的代码所做的事情。
如果工作表受保护,您也无法删除
AllowEditRange
命名范围。

话虽如此,这似乎可以解决问题:

Public Sub Test()

    Dim EditRangeTitle As String
    EditRangeTitle = "Intervalo3"

    With ThisWorkbook.Worksheets("Sheet1")
    
        .Unprotect
    
        Dim AER As AllowEditRange
        For Each AER In .Protection.AllowEditRanges
            If AER.Title = EditRangeTitle Then Exit For
        Next AER
        
        If Not AER Is Nothing Then
            AER.Delete
        End If
        
        .Protection.AllowEditRanges.Add Title:=EditRangeTitle, Range:=.Range("H18")
        .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
        
    End With
    
End Sub  

这适用于包含代码 (

Sheet1
) 的工作簿的
ThisWorkbook

进一步阅读:
以...结束
本练习册
对于每个...下一个

© www.soinside.com 2019 - 2024. All rights reserved.