当工作表受到保护时,用于清除单元格中的公式的Excel宏代码不起作用

时间:2013-06-26 00:10:43

标签: excel-vba vba excel

经过一些谷歌搜索后,我终于找到了一些代码,我可以阻止用户在单元格中放置公式。它工作得很好,直到我保护工作表。谁能告诉我我做错了什么?我是VB的新手。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
On Error Resume Next
Range("I39").SpecialCells(xlCellTypeFormulas).ClearContents
On Error GoTo 0
Application.EnableEvents = True
End If
End Sub

我的sub的整个代码如下。我需要阻止用户粘贴单元格并将公式放入其中。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Not Intersect(Target, Range("C26")) Is Nothing Then
        Application.CutCopyMode = True
        Application.EnableEvents = False
        On Error Resume Next
        Range("C26").SpecialCells(xlCellTypeFormulas).ClearContents
        On Error GoTo 0
        Application.EnableEvents = True
    End If
End Sub

3 个答案:

答案 0 :(得分:1)

如果您想允许在单元格C26中输入数据,但不允许输入公式条目,请使用更改事件:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rNoFormulas As Range
    Set rNoFormulas = Range("C26")
    If Intersect(Target, rNoFormulas) Is Nothing Then Exit Sub
    If rNoFormulas.HasFormula Then
        Application.EnableEvents = False
        rNoFormulas.ClearContents
        MsgBox "formulas not allowed in cell C26"
        rNoFormulas.Select
        Application.EnableEvents = True
    End If
End Sub

答案 1 :(得分:1)

这是一个便于对一系列单元格进行公式检查的版本:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim rNoFormulas As Range
    Set rNoFormulas = Range("C26:I26")
    If Intersect(Target, rNoFormulas) Is Nothing Then Exit Sub
    If Target.HasFormula Then
        Application.EnableEvents = False
        Target.ClearContents
        MsgBox "formulas not allowed in cell " & Target.Address
        Target.Select
        Application.EnableEvents = True
    End If
End Sub

答案 2 :(得分:0)

如果您只想保护某些单元格,则不需要vba代码。 按照这一步: 打开包含要保护的单元格或列的工作表,在选择要保护的单元格或列时按ctrl,然后右键单击,选择格式单元格,选择保护选项卡并取消选中锁定选项。虽然您已经保​​护了工作表,但这些单元格或列不会被锁定。默认设置是工作表中的所有单元格都已锁定,因此您必须在保护工作表时选择要解锁的单元格。如果您仍想使用vba,则可以录制宏。希望这个帮助