0

经过一番谷歌搜索后,我终于找到了一些代码,可以防止用户在单元格中放置公式。效果很好,直到我保护了工作表。谁能告诉我我做错了什么?我对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

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

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
4

3 回答 3

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
于 2013-06-26T12:48:52.583 回答
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
于 2013-06-26T02:29:51.983 回答
0

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

于 2013-06-26T09:05:44.460 回答