Есть база данных, в ней два листа с информацией: Sheet1 и Sheet2
При закрытии файла срабатывает макрос и ставит пароль на все закрытые ячейки (locked cells). При открытии файла Sheet1 позволяет выделять курсором открытые ячейки (unlocked cells), а Sheet2 - не даёт! Прикладываю скрины для лучшего понимания проблемы:
Красным прямоугольником я выделил те ячейки, которые я оставил открытыми для редактирования (unlocked cells).
Как видно на скринах, первый лист без проблем даёт выделить ячейку (появляется зелёный прямоугольник). На втором листе зелёный прямоугольник просто не появляется при клике на открытые для редактирования ячейки (unlocked cells). Причём при двойной клике возможность редактирования всё-таки появляется, но ячейка всё также не выделяется зелёным прямоугольником.
Пытался добавить в макрос SelectUnlockedCells:=True вот таким вот образом:
[vba]
Код
Private Sub Workbook_Open() For Each sh In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")) With sh .Unprotect "motikas" .Protect Password:="motikas", UserInterfaceOnly:=True, Scenarios:=True, AllowFiltering:=True, SelectUnlockedCells:=True .EnableOutlining = True End With Next End Sub
[/vba] После чего файл выкидывает ошибку при открытии, а листы и вовсе остаются "незапороленными".
Странно то, что для обеих листов применён абсолютно идентичный код VBA, да и галочки в свойствах ячеек (format cells) я тоже указывал одинаково, только вот первый лист даёт выделять unlocked cells нормально, а второй лист - даёт только при двойном клике, причём НЕ выделяет саму ячейку зелёным.
Проблема, вроде бы, не серьёзная, но т.к. базу данных редактируют десятки человек, многие из них не догадываются делать двойной клик по ячейкам и постоянно жалуются, что файл не доступен для редактирования. Если честно, то меня и самого эти двойные клики немного напрягают, т.к. невозможно перемещаться по ячейкам при помощи клавиатуры - постоянно приходится делать двойной клик для выделения той или иной ячейки.
Файл прилагаю, пароль на открытие листов: "motikas".
Содержание файла на эстонском языке, но это, в принципе, особо мешать не должно.
Я был бы очень признателен за помощь в решении данной проблемы!
Здравствуйте,
Прошу вашей помощи в решении следующей проблемы:
Есть база данных, в ней два листа с информацией: Sheet1 и Sheet2
При закрытии файла срабатывает макрос и ставит пароль на все закрытые ячейки (locked cells). При открытии файла Sheet1 позволяет выделять курсором открытые ячейки (unlocked cells), а Sheet2 - не даёт! Прикладываю скрины для лучшего понимания проблемы:
Красным прямоугольником я выделил те ячейки, которые я оставил открытыми для редактирования (unlocked cells).
Как видно на скринах, первый лист без проблем даёт выделить ячейку (появляется зелёный прямоугольник). На втором листе зелёный прямоугольник просто не появляется при клике на открытые для редактирования ячейки (unlocked cells). Причём при двойной клике возможность редактирования всё-таки появляется, но ячейка всё также не выделяется зелёным прямоугольником.
Пытался добавить в макрос SelectUnlockedCells:=True вот таким вот образом:
[vba]
Код
Private Sub Workbook_Open() For Each sh In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")) With sh .Unprotect "motikas" .Protect Password:="motikas", UserInterfaceOnly:=True, Scenarios:=True, AllowFiltering:=True, SelectUnlockedCells:=True .EnableOutlining = True End With Next End Sub
[/vba] После чего файл выкидывает ошибку при открытии, а листы и вовсе остаются "незапороленными".
Странно то, что для обеих листов применён абсолютно идентичный код VBA, да и галочки в свойствах ячеек (format cells) я тоже указывал одинаково, только вот первый лист даёт выделять unlocked cells нормально, а второй лист - даёт только при двойном клике, причём НЕ выделяет саму ячейку зелёным.
Проблема, вроде бы, не серьёзная, но т.к. базу данных редактируют десятки человек, многие из них не догадываются делать двойной клик по ячейкам и постоянно жалуются, что файл не доступен для редактирования. Если честно, то меня и самого эти двойные клики немного напрягают, т.к. невозможно перемещаться по ячейкам при помощи клавиатуры - постоянно приходится делать двойной клик для выделения той или иной ячейки.
Файл прилагаю, пароль на открытие листов: "motikas".
Содержание файла на эстонском языке, но это, в принципе, особо мешать не должно.
Я был бы очень признателен за помощь в решении данной проблемы! KIMVSR
Защита - галка "Защищаемая ячейка" снята, а во втором поставлена
_Boroda_, не совсем так - просто со скриншота не видно какие столбцы пытались выделить - они при открытии книги скрываются. Похоже проблема в строке: [vba]
Код
If .Name = "Oskused" Then .Cells(8, "g").Select Else .Cells(8, "f").Select
[/vba] замените на: [vba]
Код
If .Name = "Oskused" Then .Cells(8, "g").Select Else .Cells(5, "f").Select: .Cells(1, "f").Select
[/vba] и в очередности выполнения: Вы сначала защищаете лист - потом выделяете заблокированную ячейку . И вообще нужно выделять незаблокированную в конце. Поэтому снял защиту с ячейки f1 и в конце выделяю ее. вот пробуйте так: [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next For Each sh In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")) With sh .Activate .ShowAllData .Outline.ShowLevels RowLevels:=1, ColumnLevels:=1 .Unprotect "motikas" If .Name = "Oskused" Then .Cells(8, "g").Select Else .Cells(5, "f").Select: .Cells(1, "f").Select .Protect Password:="motikas", UserInterfaceOnly:=True, Scenarios:=True, AllowFiltering:=True End With Next End Sub
Защита - галка "Защищаемая ячейка" снята, а во втором поставлена
_Boroda_, не совсем так - просто со скриншота не видно какие столбцы пытались выделить - они при открытии книги скрываются. Похоже проблема в строке: [vba]
Код
If .Name = "Oskused" Then .Cells(8, "g").Select Else .Cells(8, "f").Select
[/vba] замените на: [vba]
Код
If .Name = "Oskused" Then .Cells(8, "g").Select Else .Cells(5, "f").Select: .Cells(1, "f").Select
[/vba] и в очередности выполнения: Вы сначала защищаете лист - потом выделяете заблокированную ячейку . И вообще нужно выделять незаблокированную в конце. Поэтому снял защиту с ячейки f1 и в конце выделяю ее. вот пробуйте так: [vba]
Код
Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next For Each sh In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")) With sh .Activate .ShowAllData .Outline.ShowLevels RowLevels:=1, ColumnLevels:=1 .Unprotect "motikas" If .Name = "Oskused" Then .Cells(8, "g").Select Else .Cells(5, "f").Select: .Cells(1, "f").Select .Protect Password:="motikas", UserInterfaceOnly:=True, Scenarios:=True, AllowFiltering:=True End With Next End Sub