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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 03.12.2008, 11:13   #1
evutk
 
Регистрация: 03.12.2008
Сообщений: 7
По умолчанию Марокс для excel по защите строк

Никто не подскажет, как сделать макрос, чтобы автоматически протектились ячейки определенного цвета? Желательно написать по-подробнее... буду очень благодарен!
evutk вне форума
Старый 03.12.2008, 12:01   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Тема: макрос по защите строк, а спрашиваете как защитить ячейки.

Код:
Sub ProtectXX(xx)
  On Error Resume Next
  ActiveSheet.Unprotect
  For Each c In Cells
    c.Locked = c.Interior.Color = xx
  Next
  ActiveSheet.Protect
End Sub
этот макрос защитит ячейки цветом хх, а остальные откроет.
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 03.12.2008, 12:39   #3
evutk
 
Регистрация: 03.12.2008
Сообщений: 7
По умолчанию

Очень благодарен за идеальный ответ но, возникла одна проблемка, после данного кода excel полностью виснет не подскажите, в чем может быть причина?
evutk вне форума
Старый 03.12.2008, 12:48   #4
evutk
 
Регистрация: 03.12.2008
Сообщений: 7
По умолчанию

Если это происходит из-за мощности компьютера (эксель долго обрабытывает каждую ячейку), то можно ли как-нибудь облегчить данный цикл? И хотел бы точно удостовериться, что правильно понимаю код:
Sub Protect()
On Error Resume Next
ActiveSheet.Unprotect
For Each c In Cells
c.Locked = c.Interior.ColorIndex = 6
Next
ActiveSheet.Protect
End Sub

--> он будет лочить все ячейки желтого цвета (ColorIndex = 6), правильно ведь?
evutk вне форума
Старый 03.12.2008, 12:58   #5
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Попробуйте такой вариант:

Код:
Sub PaintCells()    ' красим некоторые ячейки в красный цвет
    ActiveSheet.UsedRange.Clear
    For i = 4 To 20
        For j = 6 To 32
            If (i + j) Mod 5 = 2 Then Cells(j, i).Interior.Color = vbRed
        Next
    Next
End Sub

Sub ЗащититьКрасныеЯчейки()    'защищаем красные ячейки
    Dim cell As Range
    For Each cell In ActiveSheet.UsedRange.Cells ' перебираем все ячейки в используемой области листа
        cell.Locked = (cell.Interior.Color = vbRed) ' блокируем красные ячейки
    Next
    ActiveSheet.Protect UserInterfaceOnly:=True, Password:="456" ' защищаем лист с паролем 456
End Sub


Sub СнятьЗащитуЛиста()
    ActiveSheet.Unprotect Password:="456"
End Sub
Сначала запустите макрос PaintCells, потом - макрос ЗащититьКрасныеЯчейки

По сути, всё то же самое, что и в примере от IgorGO, только вместо перебора всех ячеек листа (For Each c In Cells)
происходит перебор ячеек в используемой области листа - ActiveSheet.UsedRange.Cells

Возможно, разница в одном слове - UsedRange - значительно увеличит скорость обработки.

Последний раз редактировалось EducatedFool; 03.12.2008 в 13:01.
EducatedFool вне форума
Старый 04.12.2008, 09:58   #6
evutk
 
Регистрация: 03.12.2008
Сообщений: 7
По умолчанию

Всем большущие спасибо!!!
evutk вне форума
Старый 04.12.2008, 10:00   #7
evutk
 
Регистрация: 03.12.2008
Сообщений: 7
По умолчанию

Только еще один маленький вопрос: как можно это сделать на большее количество цветов, а то я как не пытаюсь через if сделать или простым дублированием - ничего не помогает
evutk вне форума
Старый 04.12.2008, 11:07   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

так даже правильнее будет: предыдущий код присваивал статус "защищаемая"/"незащищаемая" всем ячейкам. Ячейки которые не имели нужного цвета - становились "беззащитными"..., теперь их просто "не трогают".
For Each c In Cells
if c.Interior.Color = xx then
c.Locked = True: Exit sub
end if
if c.Interior.Color = yy then
c.Locked = True: Exit sub
end if
.... и так по всем цветам
Next
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума
Старый 04.12.2008, 12:00   #9
evutk
 
Регистрация: 03.12.2008
Сообщений: 7
По умолчанию

IgorGO,
к сожаленю, после и этого Вашего кода, мой эксель-файлик просто, намертво, виснет есть ли какой-нибудь более облегченный вариант?
evutk вне форума
Старый 04.12.2008, 12:07   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Попробуйте так:

Код:
Sub ЗащититьЦветныеЯчейки()
    Dim cell As Range
    For Each cell In ActiveSheet.UsedRange.Cells    ' перебираем все ячейки в используемой области листа
        Select Case cell.Interior.ColorIndex
            Case 4: cell.Locked = True    ' блокируем ячейки этого цвета
            Case 6: cell.Locked = True    ' блокируем ячейки этого цвета
            Case 7: cell.Locked = True    ' блокируем ячейки этого цвета
            Case 11: cell.Locked = True    ' блокируем ячейки этого цвета
            Case 55: cell.Locked = True    ' блокируем ячейки этого цвета
        End Select
    Next
    ActiveSheet.Protect UserInterfaceOnly:=True, Password:="456"    ' защищаем лист с паролем 456
End Sub
EducatedFool вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добрый день и снова вопрос по защите) Wasily Microsoft Office Excel 17 18.06.2008 10:26
Excel max 256 строк VS user надо 300 строк Exo Microsoft Office Excel 3 10.01.2008 17:14
HELP!Си - программа для работы со строками + сумма строк в матрице! DUPLET Помощь студентам 1 20.12.2007 21:16
подписать столбцы в компоненте StringGrid и убрать поля для надписи строк? фЁдОр Помощь студентам 35 12.09.2007 14:13
Совмещение строк по ячейкам в Excel asfa Microsoft Office Excel 6 16.03.2007 01:13