在Excel中禁用编辑属性

任何人都知道如何禁用Excel单元格中的编辑属性?

我想要的是,如果用户直接点击(不是双击)单元格,它会提示一条消息,说:

您不允许编辑内容!

我有这个代码:

Private Sub Worksheet_SelectionChange(ByVal Target As Range, Cancel As Boolean) Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet1") If Not Intersect(Target, Range("C21:D" & ws.Range("C" & ws.Rows.Count).End(xlUp).Row)) Is Nothing Then Cancel = True MsgBox "You are not allowed to edit the content!", vbCritical + vbOKOnly End If End Sub 

但它返回一个错误说:

在这里输入图像说明

如果你这样做…

 Option Explicit Public OriginalCell As Range Public ProtectedCell As Range Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set OriginalCell = [A5] If Not Intersect(Target, [A1:B1]) Is Nothing Then Application.ScreenUpdating = False Set ProtectedCell = Target MsgBox "Access Denied", vbExclamation, "Access Status" OriginalCell.Select Application.ScreenUpdating = True Else Set OriginalCell = Target End If End Sub 

单击,双击或select表提示MsgBox

编辑

 Option Explicit Public OriginalCell As Range Public ProtectedCell As Range Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim ws As Worksheet Set ws = ThisWorkbook.Worksheets("Sheet1") Set OriginalCell = Range("C22") If Not Intersect(Target, Range("C21:D" & ws.Range("C" & ws.Rows.Count).End(xlUp).Row)) Is Nothing Then Application.ScreenUpdating = False Set ProtectedCell = Target MsgBox "Access Denied", vbExclamation, "Access Status" OriginalCell.Select Application.ScreenUpdating = True Else Set OriginalCell = Target End If End Sub 

我终于这样做了:

 Option Explicit Private Sub Worksheet_SelectionChange(ByVal Target As Range) Dim ws As Worksheet Dim lastRow As Long Set ws = ThisWorkbook.Worksheets("Sheet1") lastRow = Cells(Rows.Count, 3).End(xlUp).Row + 1 If Not Intersect(Target, Range("C1:D" & ws.Range("C" & ws.Rows.Count).End(xlUp).Row)) Is Nothing Then Application.ScreenUpdating = False Set ProtectedCell = Target MsgBox "Access Denied", vbExclamation, "Access Status" Cells(lastRow, 3).Select Application.ScreenUpdating = True End If 

感谢所有的帮助和想法!

你不需要这个VBA,这是一个已经内置到Excel的function。

只需保护表格(带或不带密码); 所有“locking”单元格将不再可编辑。 在“保护”选项卡中更改使用单元格属性(Ctrl + 1)locking哪些单元格。

您可以使用Worksheet.Protect / Worksheet.Unprotect方法以编程方式切换工作表保护。

您需要为SelectionChange定义子

尝试SelectionChange而不是BeforeDoubleClick在您的片段