如何使特定的单元格无法实现

时间:2016-03-07 02:13:43

标签: excel vba excel-vba cells

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

2 个答案:

答案 0 :(得分:0)

看看这个问题 How to Lock the data in a cell in excel using vba

哪里有多个不错的答案。基本上,您需要将范围设置为.locked,然后通过.protect保护工作表,有关更多开发信息,请尝试查看msdn

编辑:这样您就可以使用此问题(Restricting the user to delete the cell contents

中提到的内容

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

Sub worksheet_change只是控制,如果用户定位指定的行和列(可以调整整个范围),并且如果他尝试更改值,则会提示他并设置值。

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

答案 1 :(得分:0)

也许你可以试试下面的代码:

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

希望它能帮助你解决问题。