我无法锁定我的工作表,因为我需要访问某些单元来运行宏。强制用户只选择一个特定单元
我想要一个当用户试图选择任何其他单元格时选择单元格(F1)的宏。
我需要这样一个宏,我想:
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
我无法锁定我的工作表,因为我需要访问某些单元来运行宏。强制用户只选择一个特定单元
我想要一个当用户试图选择任何其他单元格时选择单元格(F1)的宏。
我需要这样一个宏,我想:
Private Sub Worksheet_Change(ByVal Target As Range)
End Sub
把工作表模块中的代码:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call Cells(1, 6).Select
End Sub
他希望“每当用户尝试选择任何其他单元格时,选择该单元格的宏(F1)”。无论如何,我认为不改变任何单元格是不可能的(除非你使用VBA,但我想用户不会使用VBA)。 – mielk
这应该这样做+1,但用户将能够粘贴100个值(遍布整个地方) –
你们有没有看看我发现的这个bug(http://bit.ly/1KXjeuf)?谢谢。 –
像其他人写的,是更好地取消保护片,播放您的宏和保护工作表,但如果您认为禁用所有单元格,减去您识别的单元格是最好的方法,则可以使用此代码:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Not Intersect(Target, Range("F10")) Is Nothing Then 'use your free cell
do
Else
Application.Undo
MsgBox "you can modify only the cell(F10)" 'Just to inform what is the cell editable
Range("F10").Select
End If
Application.EnableEvents = True
End Sub
你们有没有看看我发现的这个bug(http://bit.ly/1KXjeuf)?谢谢。 –
以下是2种选择:
。
1.在不保护片 - 每片模块中的自定义 “解锁” 细胞(实施例 “C3”)
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
With Target
If .Column <> 3 Or .Row <> 3 Or .CountLarge > 1 Then Application.Undo
End With
Application.EnableEvents = True
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
With Target
If .Column <> 3 Or .Row <> 3 Or .CountLarge > 1 Then Cells(3, 3).Select
End With
Application.EnableEvents = True
End Sub
。
2.保护片 - 的ThisWorkbook模块中
Private Sub Workbook_Open()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Worksheets
protectWS ws
Next
End Sub
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
protectWS Sh
End Sub
Public Function protectWS(Optional ByRef ws As Worksheet = Nothing) As Boolean
If ws Is Nothing Then Set ws = Application.ActiveSheet
If Not isWSProtected(ws) Then
ws.Protect Password:=vbNullString, _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True, _
UserInterfaceOnly:=True, _
AllowFormattingCells:=False, _
AllowFormattingColumns:=False, _
AllowFormattingRows:=False, _
AllowInsertingColumns:=False, _
AllowInsertingRows:=False, _
AllowInsertingHyperlinks:=False, _
AllowDeletingColumns:=False, _
AllowDeletingRows:=False, _
AllowSorting:=False, _
AllowFiltering:=False, _
AllowUsingPivotTables:=False
End If
End Function
Private Function isWSProtected(Optional ByRef ws As Worksheet = Nothing) As Boolean
isWSProtected = ws.ProtectContents Or _
ws.ProtectDrawingObjects Or _
ws.ProtectScenarios
End Function
选项1迫使用户到小区C3
选项2使用空密码,并允许VBA执行(UserInterfaceOnly
)
你知道你可以取消保护,保护内VBA材料了吗?锁定你的工作表可能更容易,并在执行宏时解锁! ;) – R3uK
好吧,我知道,但是在我访问这张表的代码中有很多次,我不得不多次锁定和解锁它。 –
你可以保护范围,只需要打开你需要的范围。 http://stackoverflow.com/questions/7763205/lock-certain-cells-in-a-range – MatthewD