2016-07-20 9 views
0

У меня есть код, который будет переименовывать листы на основе значений ячеек в раскрывающемся списке. У меня есть два выпадающих списка «C21» и «G17» и кнопка, которая поможет мне переименовать лист.Код VBA для отключения ячеек

Моя забота: мне нужно отключить ячейки от «H1» до «M40», чтобы пользователь не мог вводить данные, пока он не переименует лист. В принципе, если кнопка успешно выполнена, ячейки должны быть активными, если не «НЕТ». Не могли бы вы мне помочь?

Sub RenameCurrentSheet() 
Application.DisplayAlerts = False 
Application.ScreenUpdating = False 
    Dim worksh As Integer 
    Dim worksheetexists As Boolean 
    Dim ws As Worksheet 
    worksh = Application.Sheets.Count 
    worksheetexists = False 
    ThisWorkbook.Unprotect Password:="xyz" 
    For x = 1 To worksh 
    If Worksheets(x).Name = ActiveSheet.Range("C21").Value & "-" & ActiveSheet.Range("G17").Value Then 
      worksheetexists = True 
      MsgBox ("Sheet with the name " + Worksheets(x).Name + " Already Exists!!!") 
    Exit For 
    End If 
    Next x 
    If worksheetexists = False Then 
    For x = 1 To worksh 
     If ActiveSheet.Name = "MainSheet" Then 
      MsgBox "You Cannot Change Name of This Sheet!!!" 
     Else 
      ActiveSheet.Name = Range("C21").Value & "-" & Range("G17").Value 
      Exit For 
     End If 
    Next x 
    End If 

Application.DisplayAlerts = True 
ThisWorkbook.Protect Password:="xyz" 
End Sub 

Пожалуйста, помогите !!

ответ

0

В своем коде, чтобы проверить имена листов, можно отключить клетки с кодом:

Range("H1:M40").Locked = True 

, а затем она будет равна ложным, когда имя уже не является дубликатом.

Примечание Это будет работать, только если лист защищен.

Edit:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Target.Count > 1 Then Exit Sub 
    Set myRng = Range("H1:M40") 
    For Each C In myRng 
     If C.Address = Target.Address And ActiveSheet.Name = ActiveSheet.Range("C21").Value & "-" & ActiveSheet.Range("G17").Value Then 
      ActiveSheet.Unprotect Password:= "xyz" 
      Range("H1:M40").Locked = False 
      ActiveSheet.Protect Password:= "xyz" 
      Exit For 
     Else 
      ActiveSheet.Unprotect Password:= "xyz" 
      Range("H1:M40").Locked = True 
      ActiveSheet.Protect Password:= "xyz" 
     End If 
    Next C 
End Sub 
+0

Я включил эту строку на гика, а не на кнопку (код, который я Приведенную выше был дан для баяна/модуля). Ячейки теперь становятся отключенными, когда значение имени листа совпадает со значением 2 ячеек. Но проблема заключается в том, когда имя листа совпадает, он будет занимать 4-5 кликов на ячейке, чтобы активировать его и его раздражать. Я делаю что-то не так. – sady

+0

См. Мой отредактированный код выше для события выбора рабочего листа, которое поможет при блокировке/разблокировке этих ячеек. – Jason

+0

Спасибо, Джейсон, который сработал! – sady

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