经过一些谷歌搜索后,我终于找到了一些代码,我可以阻止用户在单元格中放置公式。它工作得很好,直到我保护工作表。谁能告诉我我做错了什么?我是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
答案 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,则可以录制宏。希望这个帮助