Копирование в защищенный лист

Программирование на Visual Basic for Applications
batiq
Обычный пользователь
Обычный пользователь
 
Сообщения: 95
Зарегистрирован: 21.01.2005 (Пт) 13:47

Копирование в защищенный лист

Сообщение batiq » 24.08.2005 (Ср) 14:59

Возможно ли скопировать диапозон ячеек в защищенный лист?.

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Копирование в защищенный лист

Сообщение K.Sergey » 24.08.2005 (Ср) 15:40

Если на листе есть ячейки, для которых снята защита, то в них можно. Во всех остальных случаях нужно снимать защиту. Посредством VBA она снимается следующим образом:
ActiveSheet.Unprotect(Password)
Life is what happens to us when we are planning to do something else...

batiq
Обычный пользователь
Обычный пользователь
 
Сообщения: 95
Зарегистрирован: 21.01.2005 (Пт) 13:47

Сообщение batiq » 24.08.2005 (Ср) 15:46

жаль..
а во время выполнения макроса над листом, доступ к нему перекрывается для остальных действий (чужих макросов или действия пользователя)?.
кажется, проблемы могут быть.. макрос может быть отменен до выполнения обратной защиты листа.. и тогда лист останется незащищенным..
может, все же, есть другой способ?.

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

Сообщение GSerg » 24.08.2005 (Ср) 15:56

Начиная с не помню какого офиса (кажется, 97) можно защитить документ от юзера, но дать полный доступ для макроса.
Последний раз редактировалось GSerg 24.08.2005 (Ср) 15:58, всего редактировалось 1 раз.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

batiq
Обычный пользователь
Обычный пользователь
 
Сообщения: 95
Зарегистрирован: 21.01.2005 (Пт) 13:47

Сообщение batiq » 24.08.2005 (Ср) 15:57

вот, это мне подходит.. а как?.

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

Сообщение GSerg » 24.08.2005 (Ср) 15:59

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

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 24.08.2005 (Ср) 15:59

Выходом в твоей ситуации может быть следующая структура:

Sub PastValuesToProtectedSheet()
On Error GoTo ErrorHandler
.....
'Здесь - нужные тебе преобразования
.....
ErrorHandler:
ActiveSheet.Protect
End Sub
Т.е. если случится ошибка во время исполнения процедуры, лист автоматически заблакируется.
Но пользователь все равно может нажать CTR+BREAK и процедура прервется.
А подразумевается что пользователь знает VBA?
Если нет - можно создать лист, сделать его very hidden и держать все данные там. А на том листе, который будет показываться пользователю - ссылки. Тогда для обновления не надо будет снимать защиту (с конечного листа).
Life is what happens to us when we are planning to do something else...

batiq
Обычный пользователь
Обычный пользователь
 
Сообщения: 95
Зарегистрирован: 21.01.2005 (Пт) 13:47

Сообщение batiq » 24.08.2005 (Ср) 16:06

K.Sergey писал(а):можно создать лист, сделать его very hidden
Ух, Ты.. не знал.. а как?.

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 24.08.2005 (Ср) 16:10

ActiveSheet.Visible = xlVeryHidden
Сделать его после этого видимым можно будет только с помощью VBA.
Life is what happens to us when we are planning to do something else...

batiq
Обычный пользователь
Обычный пользователь
 
Сообщения: 95
Зарегистрирован: 21.01.2005 (Пт) 13:47

Сообщение batiq » 24.08.2005 (Ср) 16:11

а без vba можно сделать невидимым?.

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 24.08.2005 (Ср) 16:15

Нет. Можно в редакторе VBA выделить нужный лист и в окне свойств ручками сделать его very hidden.
Life is what happens to us when we are planning to do something else...

K.Sergey
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 115
Зарегистрирован: 11.10.2004 (Пн) 0:42
Откуда: Санкт-Петербург

Сообщение K.Sergey » 24.08.2005 (Ср) 18:48

В твоем случае может также помочь не защита листа, а ограничение области, к которой пользователь имеет доступ:
Worksheets(1).ScrollArea = "a1:f10"
В данном случае, пользователь не сможет вводить данные в строки ниже 10 и столбцы правее F. Кроме того, он не сможет даже перейти к ячейкам, которые находятся не в этой области (даже scroll на мыши не помогает).
Я предпочитаю пользоваться именно этим свойством, а не защитой листа.
Life is what happens to us when we are planning to do something else...


Вернуться в VBA

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

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

    TopList  
cron