Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Защита от редактирования большого числа файлов - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Защита от редактирования большого числа файлов (Макросы/Sub)
Защита от редактирования большого числа файлов
Мурад Дата: Пятница, 01.12.2017, 10:33 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Добрый день, форумчане!
Помогите автоматизировать процесс защиты множества книг. Необходимо защитить паролем (любым, к примеру "123456") определенные ячейки в книгах. Во всех книгах только 1 лист "TDSheet". Защищаем все ячейки в книгах, кроме тех, что:
1) расположены в столбцах от C до Z через один, т.е. C E G I .. Z, И
2) имеют значение формата ТЕКСТ равное "0,00", И
3) цвет фона равен "Нет заливки".

В итоге, в этих ячейках будет предоставлена возможность для занесения данных пользователями.
К сообщению приложен файл: example.xls (20.0 Kb)


Сообщение отредактировал Мурад - Пятница, 01.12.2017, 10:35
 
Ответить
СообщениеДобрый день, форумчане!
Помогите автоматизировать процесс защиты множества книг. Необходимо защитить паролем (любым, к примеру "123456") определенные ячейки в книгах. Во всех книгах только 1 лист "TDSheet". Защищаем все ячейки в книгах, кроме тех, что:
1) расположены в столбцах от C до Z через один, т.е. C E G I .. Z, И
2) имеют значение формата ТЕКСТ равное "0,00", И
3) цвет фона равен "Нет заливки".

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

Автор - Мурад
Дата добавления - 01.12.2017 в 10:33
Мурад Дата: Пятница, 01.12.2017, 13:43 | Сообщение № 2
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
В ручном режиме алгоритм следующий:
1. Открываем поиск, указываем формат ячейки С5. Вводим значения для поиска 0,00
2. Нажимаем найти все. Закрываем поиск.
3. Открываем Формат ячеек, переходим на вкладку Защита
4. Снимаем галочку с "Защищаемая ячейка", ОК
5. Выбираем Защиту листа, вводим пароль, ОК.

И все, готово. Вот аналогичные действия скопировать для остальных файлов..
 
Ответить
СообщениеВ ручном режиме алгоритм следующий:
1. Открываем поиск, указываем формат ячейки С5. Вводим значения для поиска 0,00
2. Нажимаем найти все. Закрываем поиск.
3. Открываем Формат ячеек, переходим на вкладку Защита
4. Снимаем галочку с "Защищаемая ячейка", ОК
5. Выбираем Защиту листа, вводим пароль, ОК.

И все, готово. Вот аналогичные действия скопировать для остальных файлов..

Автор - Мурад
Дата добавления - 01.12.2017 в 13:43
SLAVICK Дата: Пятница, 01.12.2017, 15:10 | Сообщение № 3
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
можно так:
[vba]
Код
Sub d()
Dim wb As Workbook
Dim r As Range, cell As Range, r1 As Range, c As Range

For Each cell In Selection
Set wb = Workbooks.Open(cell.Value)

With wb
    With wb.Sheets(1)
        .Cells.Locked = True
        
        Set r = Intersect(.Range("C:C,E:E,G:G,I:I,K:K,M:M,O:O"), .UsedRange)
        For Each c In r
            If c.Text = "0,00" And c.Interior.Pattern = xlNone Then
            If r1 Is Nothing Then Set r1 = c Else Set r1 = Union(r1, c)
            End If
        Next
        r1.Locked = False
'        r1.Select
        .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=123
    End With
    .Close True
End With
Next
End Sub
[/vba]
К сообщению приложен файл: ttt.xlsm (18.5 Kb)


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщениеможно так:
[vba]
Код
Sub d()
Dim wb As Workbook
Dim r As Range, cell As Range, r1 As Range, c As Range

For Each cell In Selection
Set wb = Workbooks.Open(cell.Value)

With wb
    With wb.Sheets(1)
        .Cells.Locked = True
        
        Set r = Intersect(.Range("C:C,E:E,G:G,I:I,K:K,M:M,O:O"), .UsedRange)
        For Each c In r
            If c.Text = "0,00" And c.Interior.Pattern = xlNone Then
            If r1 Is Nothing Then Set r1 = c Else Set r1 = Union(r1, c)
            End If
        Next
        r1.Locked = False
'        r1.Select
        .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=123
    End With
    .Close True
End With
Next
End Sub
[/vba]

Автор - SLAVICK
Дата добавления - 01.12.2017 в 15:10
Shylo Дата: Пятница, 01.12.2017, 15:41 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 155
Репутация: 7 ±
Замечаний: 0% ±

Excel-2003; 2010
SLAVICK, тоже интересен этот вопрос но ругается на строку:
[vba]
Код
Set wb = Workbooks.Open(cell.Value)
[/vba]
 
Ответить
СообщениеSLAVICK, тоже интересен этот вопрос но ругается на строку:
[vba]
Код
Set wb = Workbooks.Open(cell.Value)
[/vba]

Автор - Shylo
Дата добавления - 01.12.2017 в 15:41
Roman777 Дата: Пятница, 01.12.2017, 15:54 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Shylo, Вероятнее всего, Вы не выделили диапазон ячеек, в которых указаны полные адреса книг, по отношению к которым Вы планируете устанавливать защиту.
[vba]
Код
For Each cell In Selection
[/vba]
Тут макрос подразумевает запуск из книги с перечнем всех книг (а вернее полных адресов книг) в ячейках. Эти ячейки нужно предварительно выделить, а уже после запустит макрос.


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Пятница, 01.12.2017, 15:55
 
Ответить
СообщениеShylo, Вероятнее всего, Вы не выделили диапазон ячеек, в которых указаны полные адреса книг, по отношению к которым Вы планируете устанавливать защиту.
[vba]
Код
For Each cell In Selection
[/vba]
Тут макрос подразумевает запуск из книги с перечнем всех книг (а вернее полных адресов книг) в ячейках. Эти ячейки нужно предварительно выделить, а уже после запустит макрос.

Автор - Roman777
Дата добавления - 01.12.2017 в 15:54
SLAVICK Дата: Пятница, 01.12.2017, 16:04 | Сообщение № 6
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
но ругается на строку:

Да все верно
макрос подразумевает запуск из книги с перечнем всех книг

вставьте список с полными названиями файлов, потом выделите их и только потом можно запускать - забыл написать - спешил.


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
но ругается на строку:

Да все верно
макрос подразумевает запуск из книги с перечнем всех книг

вставьте список с полными названиями файлов, потом выделите их и только потом можно запускать - забыл написать - спешил.

Автор - SLAVICK
Дата добавления - 01.12.2017 в 16:04
Shylo Дата: Пятница, 01.12.2017, 16:29 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 155
Репутация: 7 ±
Замечаний: 0% ±

Excel-2003; 2010
Понял, тогда поищу на форуме по защите ячеек, или создам тему. Спасибо.
 
Ответить
СообщениеПонял, тогда поищу на форуме по защите ячеек, или создам тему. Спасибо.

Автор - Shylo
Дата добавления - 01.12.2017 в 16:29
Мурад Дата: Воскресенье, 03.12.2017, 12:41 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
SLAVICK, спасибо огромное!
По поводу указания списка файлов, где производится защита, есть кусок макроса:

[vba]
Код
'Запрос сбора данных с книг(если Нет - то сбор идет с активной книги)

    If MsgBox("Собрать данные с нескольких книг?", vbInformation + vbYesNo, "Excel-VBA") = vbYes Then
        avFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", , "Выбор файлов", , True)
        If VarType(avFiles) = vbBoolean Then Exit Sub
        bPolyBooks = True
        lCol = 1
    Else
        avFiles = Array(ThisWorkbook.FullName)
    End If
[/vba]

Вот его встроить бы, и будет макрос-конфетка)


Сообщение отредактировал Мурад - Воскресенье, 03.12.2017, 12:42
 
Ответить
СообщениеSLAVICK, спасибо огромное!
По поводу указания списка файлов, где производится защита, есть кусок макроса:

[vba]
Код
'Запрос сбора данных с книг(если Нет - то сбор идет с активной книги)

    If MsgBox("Собрать данные с нескольких книг?", vbInformation + vbYesNo, "Excel-VBA") = vbYes Then
        avFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", , "Выбор файлов", , True)
        If VarType(avFiles) = vbBoolean Then Exit Sub
        bPolyBooks = True
        lCol = 1
    Else
        avFiles = Array(ThisWorkbook.FullName)
    End If
[/vba]

Вот его встроить бы, и будет макрос-конфетка)

Автор - Мурад
Дата добавления - 03.12.2017 в 12:41
SLAVICK Дата: Понедельник, 04.12.2017, 10:00 | Сообщение № 9
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
Вот его встроить бы,

Можно и встроить:
[vba]
Код
Sub d()
Dim wb As Workbook
Dim r As Range, It, r1 As Range, c As Range
    
avFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", , "Âûáîð ôàéëîâ", , True)
If VarType(avFiles) = vbBoolean Then Exit Sub

For Each It In avFiles
Set wb = Workbooks.Open(It)
With wb
On Error GoTo errH
    With wb.Sheets(1)
        .Cells.Locked = True
        
        Set r = Intersect(.Range("C:C,E:E,G:G,I:I,K:K,M:M,O:O"), .UsedRange)
        For Each c In r
            If c.Text = "0,00" And c.Interior.Pattern = xlNone Then
            If r1 Is Nothing Then Set r1 = c Else Set r1 = Union(r1, c)
            End If
        Next
        r1.Locked = False
'        r1.Select
        .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=123
    End With
    .Close True
End With
Next
MsgBox "Done"
Exit Sub
errH:
MsgBox Err.Number & vbCr & Err.Description
End Sub
[/vba]
Я для получения списка файлов чаще использую TotalCommander - там быстро и удобно можно отфильтровать и скопировать имена всех файлов в буфер обмена - а потом вставить в к лист.


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
Вот его встроить бы,

Можно и встроить:
[vba]
Код
Sub d()
Dim wb As Workbook
Dim r As Range, It, r1 As Range, c As Range
    
avFiles = Application.GetOpenFilename("Excel files(*.xls*),*.xls*", , "Âûáîð ôàéëîâ", , True)
If VarType(avFiles) = vbBoolean Then Exit Sub

For Each It In avFiles
Set wb = Workbooks.Open(It)
With wb
On Error GoTo errH
    With wb.Sheets(1)
        .Cells.Locked = True
        
        Set r = Intersect(.Range("C:C,E:E,G:G,I:I,K:K,M:M,O:O"), .UsedRange)
        For Each c In r
            If c.Text = "0,00" And c.Interior.Pattern = xlNone Then
            If r1 Is Nothing Then Set r1 = c Else Set r1 = Union(r1, c)
            End If
        Next
        r1.Locked = False
'        r1.Select
        .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:=123
    End With
    .Close True
End With
Next
MsgBox "Done"
Exit Sub
errH:
MsgBox Err.Number & vbCr & Err.Description
End Sub
[/vba]
Я для получения списка файлов чаще использую TotalCommander - там быстро и удобно можно отфильтровать и скопировать имена всех файлов в буфер обмена - а потом вставить в к лист.

Автор - SLAVICK
Дата добавления - 04.12.2017 в 10:00
Мурад Дата: Понедельник, 11.12.2017, 15:09 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 513
Репутация: 18 ±
Замечаний: 0% ±

Excel 2007
Воспользовался вначале нижним макросом, не получилось ничего.
Затем заменил код на первый вариант со списком файлов на листе. Вышло сообщение об ошибке.
 
Ответить
СообщениеВоспользовался вначале нижним макросом, не получилось ничего.
Затем заменил код на первый вариант со списком файлов на листе. Вышло сообщение об ошибке.

Автор - Мурад
Дата добавления - 11.12.2017 в 15:09
SLAVICK Дата: Понедельник, 11.12.2017, 17:53 | Сообщение № 11
Группа: Модераторы
Ранг: Старожил
Сообщений: 2290
Репутация: 766 ±
Замечаний: 0% ±

2019
не получилось ничего.

А от куда Вы знаете, что не получилось?
Выдало ошибку? У Вас там все выбранные файлы были с заполненными диапазонами?
Если не выходит - положите в архив пару файлов, с которыми не срабатывает.


Иногда все проще чем кажется с первого взгляда.
 
Ответить
Сообщение
не получилось ничего.

А от куда Вы знаете, что не получилось?
Выдало ошибку? У Вас там все выбранные файлы были с заполненными диапазонами?
Если не выходит - положите в архив пару файлов, с которыми не срабатывает.

Автор - SLAVICK
Дата добавления - 11.12.2017 в 17:53
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Защита от редактирования большого числа файлов (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!