Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2014, 05:17   #1
brik
Пользователь
 
Регистрация: 17.04.2014
Сообщений: 22
По умолчанию Поставить защиту на диапазон строк

Поставить защиту на диапазон строк ниже последней заполненной строки
на открытие книги
Заполнение проверяем по столбцу A на всех листах кроме листа "Итог"

Private Sub Workbook_Open()

Dim wsSh As Worksheet 'снимаем защиту листов
For Each wsSh In Sheets
wsSh.Unprotect "123

Dim j
For Each i In ThisWorkbook.Sheets
lLastRow = Cells(Rows.Count,1).End(xlUp).Row
j = lLastRow
If i.Name <> "Итог" Then
i.Cells(2, 10000).Locked = False 'сначала снимаем возможные защищенные ячейки если попало что с 2 строки
i.Cells(j, 10000).Locked = True 'устанавливаем защищенные ячейки с последней незаполненной строки до конца
End If
Next
End Sub

но почемуто не заработало ..
brik вне форума Ответить с цитированием
Старый 29.04.2014, 10:29   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Цитата:
но почемуто не заработало ..
потому что лист не защитили
Код:
End If
wsSh.protect "123
Next
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 29.04.2014, 10:56   #3
brik
Пользователь
 
Регистрация: 17.04.2014
Сообщений: 22
По умолчанию

Цитата:
Private Sub Workbook_Open()

Dim wsSh As Worksheet 'снимаем защиту листов
For Each wsSh In Sheets
wsSh.Unprotect "123"

Dim lLastRow&, j&
For Each i In ThisWorkbook.Sheets
lLastRow = Cells(Rows.Count, 1).End(xlUp).Row
j = lLastRow
If i.Name <> "Итог" Then
i.Cells(2, 10000).Locked = False 'сначала снимаем возможные защищенные ячейки если попало что с 2 строки
i.Cells(j, 10000).Locked = True 'устанавливаем защищенные ячейки с последней незаполненной строки до конца
End If
wsSh.Protect "123"
Next
End Sub
ругается однако чтото не так
Вложения
Тип файла: zip Книга2.zip (12.0 Кб, 9 просмотров)
brik вне форума Ответить с цитированием
Старый 29.04.2014, 11:30   #4
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

не срабатывает не потому, что строка добавилась, а потому что
количество For не соответствует количеству Next
Код:
Private Sub Workbook_Open() 
Dim i As Worksheet 'снимаем защиту листов 
For Each i In Sheets 
i.Unprotect "123" 
Dim lLastRow&, j& 
lLastRow = i.Cells(Rows.Count, 1).End(xlUp).Row 
j = lLastRow 
If i.Name <> "Итог" Then 
i.Cells(2, 10000).Locked = False 'сначала снимаем возможные защищенные ячейки если попало что с 2 строки 
i.Cells(j, 10000).Locked = True 'устанавливаем защищенные ячейки с последней незаполненной строки до конца 
End If 
i.Protect "123" 
Next 
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 29.04.2014, 11:40   #5
brik
Пользователь
 
Регистрация: 17.04.2014
Сообщений: 22
По умолчанию

спасибо Igor что помогли но чтото не так

щас проверил - 1 строка блокируется на листах которые должны быть защищены

а макрос должен работать в диапазоне начиная со 2 строки тк предварительно первую строку в защищенных листах заполнил по столбцу A - чето неправильно сделал в задании диапазона а вот что ?
Вложения
Тип файла: zip Книга3.zip (13.8 Кб, 7 просмотров)

Последний раз редактировалось brik; 29.04.2014 в 12:00.
brik вне форума Ответить с цитированием
Старый 29.04.2014, 21:02   #6
brik
Пользователь
 
Регистрация: 17.04.2014
Сообщений: 22
По умолчанию

вот так правильно - все голову изломал
Цитата:
Private Sub Workbook_Open()
Dim i As Worksheet 'снимаем защиту листов
For Each i In Sheets
i.Unprotect "123"
Dim lLastRow
If i.Name <> "Итог" Then
lLastRow = i.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Row
i.Range(i.Cells(1, 1), i.Cells(1000, 23)).Locked = False
i.Range(i.Cells(lLastRow, 1), i.Cells(1000, 23)).Locked = True
End If
i.Protect "123"
Next
End Sub
Вложения
Тип файла: zip Книга3.zip (40.7 Кб, 19 просмотров)
brik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Step7 -> Настройки (как поставить защиту на настройки?) as_sati Безопасность, Шифрование 10 14.12.2012 18:53
В книге защищен каждый лист. Как быстро снять защиту со всех листов, а потом ее поставить опять? Катик7 Microsoft Office Excel 13 28.04.2011 16:02
Выделить диапазон строк vefer Microsoft Office Excel 6 03.02.2011 13:10
Хочу поставить защиту от записи на USB flash solis257 Компьютерное железо 2 19.01.2011 21:31
При создании нового листа программно поставить на него защиту (с помощью VBA) Lis000iq Microsoft Office Excel 2 30.06.2009 18:41