我的问题是我试图让用户在给出输入之后无法编辑单元格,例如我想让用户从单元格C22-C28
输入内容,然后在用户输入单元格后,不应该编辑该特定单元格。什么应该是最好的解决方案?有什么建议?
答案 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
希望它能帮助你解决问题。