复制&在受保护的工作表中插入公式

时间:2017-04-18 09:22:14

标签: vba

我想通过双击插入从上面的行复制的行,其中包含公式。当我打开保护工作表宏不起作用。我尝试了ActiveSheet.Unprotect Password:="1"的方法,但它没有用。你们中的任何人都可以指导我的错误是什么以及解决方案是什么?

Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect Password:="1"
If [BusinessType] = "Operating Lease (Contract Based)" Then
  Range("hide").EntireRow.Hidden = False
Else
    Range("hide").EntireRow.Hidden = True
End If
ActiveSheet.Protect Password:="1"
End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As 
Boolean)
ActiveSheet.Unprotect Password:="1"

'Updateby Extendoffice 20160725

    Cancel = True
    Target.Offset(1).EntireRow.Insert
    Target.EntireRow.Copy Target.Offset(1).EntireRow
    On Error Resume Next
    Target.Offset(1).EntireRow.SpecialCells(xlConstants).ClearContents 
ActiveSheet.Protect Password:="1"
End Sub

1 个答案:

答案 0 :(得分:0)

使用Worksheet_Change事件时应始终小心,因为它会随每次工作表更改而触发。在这种情况下,调用Target.Offset(1).EntireRow.Insert会触发Worksheet_Change事件。事件的最后一步是保护工作表,这在下一行Target.EntireRow.Copy Target.Offset(1).EntireRow上引发错误。当这行代码运行时,工作表将受到保护,从而引发错误。

可能的解决方案:

  1. 尽可能避免使用Worksheet_Change
  2. Sheet.protect()中删除Worksheet_Change
  3. 使用Worksheet_BeforeDoubleClickApplication.EnableEvents = False中禁用事件。但是,我不建议您这样做,因为您必须确保再次启用事件(使用适当的错误处理)。