2015-10-01 3 views
3

Я не могу заблокировать свой листок, потому что мне нужно получить доступ к некоторым ячейкам для запуска макросов.Заставить пользователя выбрать только одну конкретную ячейку

Я хочу макрос, который выбирает ячейку (F1), когда пользователь пытается выбрать любую другую ячейку.

Мне нужен макрос, как этот, я думаю:

Private Sub Worksheet_Change(ByVal Target As Range) 


    End Sub 
+0

Вы знаете, вы можете защитить и Снять защиту листа в пределах VBA? Возможно, вам будет проще заблокировать ваш листок для всех и разблокировать при выполнении вашего макроса! ;) – R3uK

+0

Ну, я это знаю, но в моем коде много раз, когда я обращаюсь к этому листу, мне нужно было бы его блокировать и разблокировать несколько раз. –

+1

Вы можете защитить диапазоны и просто оставить открытыми те, которые вам нужны. http://stackoverflow.com/questions/7763205/lock-certain-cells-in-a-range – MatthewD

ответ

2

Поместите этот код в модуль листа:

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

Он хочет «макрос, который выбирает эту ячейку (F1), когда пользователь пытается выбрать любую другую ячейку». Во всяком случае, я думаю, что невозможно изменить любую ячейку, не выбирая ее раньше (если вы не используете VBA, но я полагаю, что пользователи не будут использовать VBA). – mielk

+0

Это должно сделать это +1, но пользователь сможет вставить 100 значений (по всему месту) –

+0

Будет ли кто-нибудь из вас взглянуть на эту ошибку (http://bit.ly/1KXjeuf), которую я нашел? Благодарю. –

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 
+0

Кто-нибудь из вас взглянет на эту ошибку (http://bit.ly/1KXjeuf), которую я нашел? Благодарю. –

0

Есть 2 опции:

.

1. Без защиты листа - в каждом модуле листа, чтобы настроить "разблокировано" клеток (Ex. "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

    • могут быть перемещены в модуль ThisWorkbook , с параметрами для строки и колонка
  • Вариант 2 используется пустой пароль, а также позволяет выполнять VBA (UserInterfaceOnly)

Смежные вопросы