Работа с книгой Excel в режиме общего доступа/share workbook

Программирование на Visual Basic for Applications
ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Работа с книгой Excel в режиме общего доступа/share workbook

Сообщение ZlydenGL » 08.02.2007 (Чт) 20:19

Добрый день всем :)

Преамбула:
Конференция в целях интереса писал(а):А вы точно искали ответ, не нашли его и задаете осмысленный и не противоречащий Правилам Конференции (которые Вы конечно же, скрупулезно изучили), вопрос?

Ответ я искал, НЕ нашел, вопрос постараюсь сформулировать максимально осмысленно. С правилами вроде бы конфликтов нет :oops:

Собственно сабж: в некоей организации для работы используется здоровенная (10 Мб) книга Excel, буквально пронизанная различными макросами и защитой ячеек/листов/самой книги. Недавно появилась задача - необходимо заставить эту самую книгу работать в режиме общего доступа, что сразу повлекло за собой ряд проблем. Оказалось, что дедушка Ёксель режим общего доступа не очень любит, и при попытке в оном применить команду Workbooks("ИмяКниги").Unprotect вываливается с сообщением:

Дедушка Ёксель писал(а):Runtime error 1004. Method "Unprotect" of object "_Worksheet" failed/
.

Пытаясь найти какие-либо свойства/методы, связанные с режимом общего доступа, наткнулся только на два метода: ProtectShared и UnprotectShared. Т.е. функций, которые возвращают режим работы книги (общий или монопольный) то ли нет, то ли я их проморгал (искренне надеюсь на второе).

Ну и вопросы:

1. Есть ли возможность снимать программно защиту с листов в режиме общего доступа к книге?

2. Если ее нет, можно ли определять режим работы книги помимо обработки события "On Error..." в теле макросов синхронизации?

Как обычно - заранее спасибо :)

С уважением,
Злыдень.
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.02.2007 (Пт) 15:39

1. Зачем? Не проще ли изначально защитить книгу только от пользователя, но не от макроса?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 09.02.2007 (Пт) 16:01

Мысль понял (и пошел искать пепел, чтоб голову посыпать - как она мне самому и раньше в голову не пришла? :shock: ).

Только вот вопрос - а как "отщитить" книгу от макроса? Какой параметр команды .Protect надо менять? Из тех параметров, что попадают на глаза, подходит только один:

Scenarios Optional Variant. True to protect scenarios. This argument is valid only for worksheets. The default value is True.

Но он вроде бы касается защиты самих сценариев, разве нет?
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.02.2007 (Пт) 16:28

UserInterfaceOnly Optional Variant. True to protect the user interface, but not macros. If this argument is omitted, protection applies both to macros and to the user interface.

If you apply the Protect method with the UserInterfaceOnly argument set to True to a worksheet and then save the workbook, the entire worksheet (not just the interface) will be fully protected when you reopen the workbook. To re-enable the user interface protection after the workbook is opened, you must again apply the Protect method with UserInterfaceOnly set to True.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

ZlydenGL
Продвинутый пользователь
Продвинутый пользователь
Аватара пользователя
 
Сообщения: 148
Зарегистрирован: 13.08.2004 (Пт) 10:02

Сообщение ZlydenGL » 09.02.2007 (Пт) 16:39

Тогда я вообще не понял :( У меня:

Код: Выделить всё
Sub BlockSheet(WS As Excel.Worksheet)
If Not WS.ProtectContents And isThisBookActive Then
    WS.Protect Password:=PWD, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True _
        , AllowUsingPivotTables:=True, UserInterfaceOnly:=True, AllowFormattingColumns:=True, AllowFormattingCells:=True, AllowSorting:=True
Else
    If Not OnChange Then MsgBox "This sheet has already been protected!"
End If
End Sub


И все равно блочит... Разве что этот ключ надо "припоминать" даже после сохранения? Пойду, попробую...

Добавлено позже.

Ну конечно, блин!!! При переходе в зашаренный режим книга ПЕРЕОТКРЫВАЕТСЯ!!! Пошел имплементить :)

GSerg, как обычно - респектище!!!
Покой нам только снится!!! И то редко. Поскольку нет в мире совершенства, а есть только стремление к оному.

KL
Microsoft MVP
 
Сообщения: 483
Зарегистрирован: 30.10.2005 (Вс) 0:31
Откуда: Madrid

Сообщение KL » 10.02.2007 (Сб) 16:15

ZlydenGL писал(а):Тогда я вообще не понял :( У меня:

Код: Выделить всё
Sub BlockSheet(WS As Excel.Worksheet)
If Not WS.ProtectContents And isThisBookActive Then
    WS.Protect Password:=PWD, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFiltering:=True _
        , AllowUsingPivotTables:=True, UserInterfaceOnly:=True, AllowFormattingColumns:=True, AllowFormattingCells:=True, AllowSorting:=True
Else
    If Not OnChange Then MsgBox "This sheet has already been protected!"
End If
End Sub


И все равно блочит... Разве что этот ключ надо "припоминать" даже после сохранения? Пойду, попробую...

Добавлено позже.

Ну конечно, блин!!! При переходе в зашаренный режим книга ПЕРЕОТКРЫВАЕТСЯ!!! Пошел имплементить :)

GSerg, как обычно - респектище!!!


Думаю, победу трубить рановато :-)

1. ограничения режима общего доступа: http://bbs.vbstreets.ru/viewtopic.php?p=6634774#6633343

2. параметр UserInterfaceOnly после закрытия файла не сохраняется и требует использоавания инструкции wb.Protect... c указанием UserInterfaceOnly=True (и пароля в версиях позднее XL2000) при каждом открытии.

3. использование метода Protect в режиме общего доступа исключено
Привет,
KL


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 77

    TopList