Vba 强制用户仅选择一个特定单元格
我无法锁定工作表,因为我需要访问一些单元格才能运行宏 我需要一个宏,每当用户尝试选择任何其他单元格时,该宏都会选择单元格(F1) 我需要这样一个宏,我想:Vba 强制用户仅选择一个特定单元格,vba,excel,Vba,Excel,我无法锁定工作表,因为我需要访问一些单元格才能运行宏 我需要一个宏,每当用户尝试选择任何其他单元格时,该宏都会选择单元格(F1) 我需要这样一个宏,我想: Private Sub Worksheet_Change(ByVal Target As Range) End Sub 将此代码放入工作表模块: Private Sub Worksheet_SelectionChange(ByVal Target As Range) Call Cells(1, 6).Select
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
正如其他人所写,最好是取消对工作表的保护,播放宏并保护工作表,但是,如果您认为禁用所有单元格(减去您标识的单元格)是最好的方法,您可以使用以下代码:
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
这里有两个选项:
1。不保护工作表-在每个工作表模块中自定义“解锁”单元格(例如“C3”)
- 选项1强制用户选择单元格C3
- 可以使用行和列的参数移动到此工作簿模块
- 选项2使用空密码,并允许VBA执行(
)UserInterfaceOnly
UserInterFaceOnly:=True
。您需要向工作簿打开事件中添加代码以每次重置它,但这意味着只有您的代码可以更改单元格。他想要“一个宏,每当用户试图选择任何其他单元格时,该宏都会选择此单元格(F1)”。无论如何,我认为不选择任何单元格是不可能改变的(除非你使用VBA,但我想用户不会使用VBA)。这应该可以+1,但用户可以粘贴100个值(到处都是)。你们中有人可以看看我发现的这个bug()吗?谢谢。你们谁能看看我发现的这个bug()吗?谢谢
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
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