Vba 如何使excel中的特定单元格不可编辑

Vba 如何使excel中的特定单元格不可编辑,vba,excel,cells,Vba,Excel,Cells,我的问题是,我试图让用户在输入后无法编辑单元格,例如,我想让用户从单元格C22-C28中输入一些内容,然后在用户输入单元格后,不应编辑该特定单元格。什么是最好的解决方案?有什么建议吗 看看这个问题 这里有多个好答案。在basic中,您需要将范围设置为.locked,然后通过.protect保护工作表,有关更多开发信息,请查看msdn 编辑:所以你可以使用这个问题中提到的() 如果没有“锁定”和“解锁”,您可以使用此功能。我们有一个全局变量来存储选择值(在更改状态之前保留)。函数Selectio

我的问题是,我试图让用户在输入后无法编辑单元格,例如,我想让用户从单元格
C22-C28
中输入一些内容,然后在用户输入单元格后,不应编辑该特定单元格。什么是最好的解决方案?有什么建议吗

看看这个问题

这里有多个好答案。在basic中,您需要将范围设置为
.locked
,然后通过
.protect
保护工作表,有关更多开发信息,请查看msdn

编辑:所以你可以使用这个问题中提到的()

如果没有“锁定”和“解锁”,您可以使用此功能。我们有一个全局变量来存储选择值(在更改状态之前保留)。函数SelectionChange,更新当前单元格的值,这样我们可以在用户尝试后恢复单元格值

子工作表\u仅更改控制,如果用户针对指定的行和列(可针对整个范围进行调整),并且如果他尝试更改值,则会提示他并将值设置回原位

Dim prevValue As Variant

Private Sub worksheet_SelectionChange(ByVal target As Range)

    prevValue = target.Value

End Sub

Private Sub worksheet_change(ByVal target As Range)



    If target.Row = 5 And target.Column = 5 Then

        If target.Value <> prevValue Then
            target.Value = prevValue


            MsgBox "You are not allowed to edit!", vbCritical + vbOKOnly

        End If

    End If


End Sub
Dim prevValue作为变量
专用子工作表\u选择更改(ByVal目标作为范围)
prevValue=target.Value
端接头
私有子工作表_更改(ByVal目标作为范围)
如果target.Row=5,target.Column=5,则
如果target.Value在Value之前,则
target.Value=prevValue
MsgBox“不允许编辑!”,vbCritical+vbOKOnly
如果结束
如果结束
端接头

也许您可以尝试以下代码:

Option Explicit
Public OriginalCell As Range
Public ProtectedCell As Range

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

希望这将有助于解决您的问题。

非常感谢您的建议@Lubos Suk。嗯,事实上,我想问一下,我是否可以不让用户在不使用PROTECT关键字或不向单元格输入密码的情况下编辑和删除特定单元格。例如,它只会弹出一些
MsgBox
,指示“不允许编辑单元格!”。有什么想法吗?