部分保护工作簿的VBA excel拼写检查

部分保护工作簿的VBA excel拼写检查,excel,vba,Excel,Vba,以下是此处提出的问题: 我想使工作簿的保护形状与开始时相同 基本上,我的大多数工作表都从第1行到第5行受到保护 已分别将其标记为每张图纸的专用接头,如下所示: Private Sub Worksheet_SelectionChange(ByVal Target As Range) Const pw As String = "Secret" Dim rFormulaCheck As Range On Error Resume Next With Target .Parent.U

以下是此处提出的问题:

我想使工作簿的保护形状与开始时相同

基本上,我的大多数工作表都从第1行到第5行受到保护

已分别将其标记为每张图纸的专用接头,如下所示:

 Private Sub Worksheet_SelectionChange(ByVal Target As Range)
 Const pw As String = "Secret"

 Dim rFormulaCheck As Range

 On Error Resume Next

 With Target
 .Parent.Unprotect pw
 .Locked = False
 .FormulaHidden = False

 If .Cells.Count = 1 Then
 If .HasFormula Then
 .Locked = True
 .FormulaHidden = True
 .Parent.Protect pw, , , , 1
 End If

 ElseIf .Count > 1 And .Count < 5 Then

 With .SpecialCells(xlCellTypeFormulas)
 .Locked = True
 .FormulaHidden = True
 .Parent.Protect pw, , , , 1
 End With

 End If

 End With

 On Error GoTo 0
End Sub
但是,当我使用
sh.Protect“Secret”
时。我无法编辑整个文档中的任何单元格。 它用错误来表示: 您试图更改的单元格或图表位于受保护的工作表上。要进行更改,请取消对图纸的保护。可能会要求您输入密码。

到目前为止,如果我想使我的文档可编辑,我必须关闭sh.Protect“Secret”。不幸的是,
Private子工作表\u SelectionChange(ByVal Target As Range)
不再工作

在拼写检查过程之后,是否有机会将这些保护设置恢复到初始阶段

更新:

我试着这样做:

 Sub Spellcheck()
    For Each sh In Worksheets
    sh.Unprotect "Secret"
    sh.CheckSpelling
    'sh.Protect "Secret"
   Next sh
  Call Worksheet_SelectionChange
End Sub
但现在我发现了一个错误: 未定义子功能或函数。


它没有在模块中定义,但在大多数工作表中都有定义。

请注意,
工作表_SelectionChange
当您在工作表中单击/选择单元格/区域时(而
目标
是所选区域),它将自动运行。实际上我不明白这一切的目的。你想要达到的总体目标是什么还请注意,使用“下一步继续执行错误时的
,您只需隐藏错误消息,但错误仍然会发生。删除它并修复错误。不,你是不对的。当我重新打开文档时,我的所有单元格都已锁定。另一方面,当我记下代码的最后一行时,它们都被解锁。私有子工作表\u SelectionChange不见了。请注意,我所说的是Excel中的一个事实(与您的特定代码无关),从定义上讲就是这样。所以请解释我怎么可能是对的你的代码对我来说毫无意义。因此,请用文字说明你应该做什么。这么做的目的是什么?还要解释你所说的“私人子工作表\u选择更改已消失”是什么意思也许你可以把你的问题删掉,因为我认为一条评论对于这种解释是不够的。好的,我现在编辑了我的问题。我也可以添加一些图片。@MariuszKrukar为什么否决投票?如果你不再需要帮助,你可以删除你的问题,或者在你找到答案的时候自己发布答案(如果你认为它对其他人有用的话)。如果你仍然需要帮助,我建议删除这一条,并提出一个新的更明确的问题。别忘了一定要包括你预期的行为(将来可能会有助于问一些好问题)。
 Sub Spellcheck()
    For Each sh In Worksheets
    sh.Unprotect "Secret"
    sh.CheckSpelling
    'sh.Protect "Secret"
   Next sh
  Call Worksheet_SelectionChange
End Sub