|
|
|
Проблема с блокированием действий над листами в Excel 2007
|
|||
|---|---|---|---|
|
#18+
Пиплз! Если кто знает поделитесь опытом... Имеется документ Excel 2007, необходимо заблокировать все действия над листами (добавление, удаление, переименование, перемещение/копирование), так как все обращения идут по индексам листов. Пробовал через блокирование элементов по ControlsID, в итоге получилось заблокировать только команды контексного меню. Но возможности перетаскивать листы при удержании левой кнопки мыши листов и переименование при двойном клике по листу остались. Есть ли возможность заблокировать все меню List, оставив пользователю только возможность переходить по листам (кроме защиты структуры)? Заранее спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 19:25 |
|
||
|
Проблема с блокированием действий над листами в Excel 2007
|
|||
|---|---|---|---|
|
#18+
А чем не нравится защита структуры? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 20:37 |
|
||
|
Проблема с блокированием действий над листами в Excel 2007
|
|||
|---|---|---|---|
|
#18+
У меня стоит задача урезать все действия пользователя, так как после нужно делать импорт в базу данных из этого шаблона. Защиту структуры я пробовал, но возникли трудности, в частности при установке защиты структуры и сохранении документа, при следующем запуске файла не работали макросы, для этого на открытие документа я ставил защиту, а на закрытие убирал. В конечном итоге при сохранении файла как шаблона с поддержкой макроса (*.xltm) возникла очень неудобная вещь: когда открываешь шаблон и не производишь никаких действий, закрываешь - предлагает сохранить документ без макросов (а на закрытие, после снятия защиты структуры я поставил сохранение). Ищу пути, как сделать проще. С защитой структуры придется итак не маленький макрос утяжелять проверкой - были ли внесены изменения. В общем объяснять долго, поэтому небольшой фрагмент кода: Public PasswordValue As String Public LockEnabled As Boolean Public ExtraDataSheet As Variant 'Массив номеров листов дополнительных данных Private Sub Workbook_Activate() Dim FindExtraDataSheet As Boolean ExtraDataSheet = Array(8, 9, 10, 11, 12) PasswordValue = "admin" LockEnabled = True If LockEnabled Then For i = 1 To Application.Sheets.Count For j = LBound(ExtraDataSheet) To UBound(ExtraDataSheet) FindExtraDataSheet = False If i = ExtraDataSheet(j) Then FindExtraDataSheet = True Exit For End If Next j If FindExtraDataSheet = False Then Application.Sheets(i).EnableSelection = xlUnlockedCells Application.Sheets(i).Protect Password:=PasswordValue End If Next i ActiveWorkbook.Protect Password:=PasswordValue, Structure:=True, Windows:=False Else For i = 1 To Application.Sheets.Count Application.Sheets(i).EnableSelection = xlNoRestrictions Application.Sheets(i).Unprotect Password:=PasswordValue Next i ActiveWorkbook.Unprotect Password:=PasswordValue End If End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) If LockEnabled Then ActiveWorkbook.Unprotect Password:=PasswordValue ActiveWorkbook.Save End If ActiveWorkbook.Save End Sub ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.02.2010, 21:48 |
|
||
|
Проблема с блокированием действий над листами в Excel 2007
|
|||
|---|---|---|---|
|
#18+
Ничего не понял. При создании нового документа на основе шаблона с макросами Эксель 2007 предлагает сохранить новую книгу, но уже без макросов? А вообще, ты не в ту сторону копаешь. По хорошему - Эксель нафиг и пишешь нормального клиента к БД. Но если хочется извращаться с Экселем, то рисуешь шаблон для данных, никаких макросов в шаблон не кладешь вообще. Разрешаешь изменять некоторые ячейки шаблона. И ставишь защиту на все. А обрабатывать будешь потом внешней "управляющей" книгой в которой уже будет сколько угодно макросов.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2010, 00:01 |
|
||
|
Проблема с блокированием действий над листами в Excel 2007
|
|||
|---|---|---|---|
|
#18+
White OwlА вообще, ты не в ту сторону копаешь. По хорошему - Эксель нафиг и пишешь нормального клиента к БД. Идея с Экселем мне и самому не нравится, но сделать нужно. Клиента к БД уже давно написали на C# со множеством функций, который и будет проверять и обрабатывать инфу из шаблонов. White OwlНо если хочется извращаться с Экселем, то рисуешь шаблон для данных, никаких макросов в шаблон не кладешь вообще. Разрешаешь изменять некоторые ячейки шаблона. И ставишь защиту на все. Данный вариант в моем случае не подходит: от макросов отказать вообще я не могу, так на листах документа таблицы не статические (столбцов в каждой таблице может быть от 3 до 280), ячейки в первоначальной таблице я разрешил изменять и сделал два макроса на добавление (рисование сетки, снятие защиты с ячеек) и удаление столбцов таблицы. Для обеспечения блокирования действий над листами я защитил структуру книги, но некоторые инструкции в моих макросах не могут быть выполнены в защищенной книге, выдается соответствующее сообщение, и макросы не выполняются. Поэтому ищу способ самим заблокировать все действия над листами кроме переходов по листам. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2010, 09:58 |
|
||
|
Проблема с блокированием действий над листами в Excel 2007
|
|||
|---|---|---|---|
|
#18+
Ну тогда в макросе делаешь что-то вроде: Код: plaintext 1. 2. 3. То есть снимай защиту в самом макросе только на время обработки требующей незащищенной книги, а потом сразу ставь обратно. Между запусками макроса книга будет всегда защищенной. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.02.2010, 18:03 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=36483850&tid=2178449]: |
0ms |
get settings: |
6ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
172ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 506ms |

| 0 / 0 |
