强制用户只选择一个特定的单元格

时间:2015-10-01 14:43:05

标签: excel vba excel-vba

我无法锁定我的工作表,因为我需要访问一些单元格才能运行宏。

我想要一个宏,只要用户尝试选择任何其他单元格,就会选择单元格(F1)。

我想要一个像这样的宏,我想:

    Private Sub Worksheet_Change(ByVal Target As Range)


    End Sub

3 个答案:

答案 0 :(得分:2)

将此代码放在工作表模块中:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Call Cells(1, 6).Select
End Sub

答案 1 :(得分:1)

像其他人写的那样,最好取消保护工作表,播放宏并保护工作表但是,如果您认为禁用所有单元格,减去您识别的单元格,是最好的方法,您可以使用此代码:

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

答案 2 :(得分:0)

以下是两个选项:

<强> 1。不保护表单 - 在每个工作表模块中自定义&#34;解锁&#34;细胞(例如&#34; C3&#34;)

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

    • 可以移动到ThisWorkbook模块,其中包含行和列的参数
  • 选项2使用空密码,并允许VBA执行(UserInterfaceOnly