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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.09.2009, 14:00   #1
Freerider1972
Пользователь
 
Регистрация: 01.07.2007
Сообщений: 41
Вопрос Почему снимается защита с защищенных ячеек?

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

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

Что за фича такая? Помогите плиз!
Freerider1972 вне форума Ответить с цитированием
Старый 10.09.2009, 06:29   #2
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

А макросы защиту не снимают?
Давайте пример проблемного файла - разберемся.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 02.02.2010, 17:26   #3
Freerider1972
Пользователь
 
Регистрация: 01.07.2007
Сообщений: 41
По умолчанию

Цитата:
Сообщение от SAS888 Посмотреть сообщение
А макросы защиту не снимают?
Давайте пример проблемного файла - разберемся.
Макросы защиту не снимают, на компе стоит антивирус Dr.Web может он вскрывает файл?
Защита на рабочей книги не снимается при этом.

Вот код для создания чистого файла с рабочего:

Sub New_File()

Msg = "ВЫ УВЕРЕНЫ, ЧТО ХОТИТЕ ПЕРЕЙТИ НА НОВЫЙ МЕСЯЦ И СДЕЛАТЬ ЧИСТЫЙ ОТЧЕТ?"
ans = MsgBox(Msg, vbExclamation + vbYesNo + vbDefaultButton2)

If ans = vbYes Then

Application.EnableEvents = False 'отключаем обработку событий,
'а именно защиту листка ПРОДАЖА и ВОЗВРАТ
' <<ОБРАБОТКА ЛИСТА ВЫРУЧКА>>
' перенос данных по отчету ВЫРУЧКА
Sheets("ВЫРУЧКА").Select

' по 1-ой кассе
Range("AH23").Select
Selection.Copy

Range("D10").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

' по 2-ой кассе
Range("AH39").Select
Selection.Copy

Range("D26").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

' по 3-ей кассе
Range("AH55").Select
Selection.Copy

Range("D42").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

' по 4-ой кассе
Range("AH71").Select
Selection.Copy

Range("D58").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

' по 5-ой кассе
Range("AH87").Select
Selection.Copy

Range("D74").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

' <<ОБРАБОТКА ЛИСТА ВОЗВРАТ>>
' ОЧИСТКА ДАННЫХ
Sheets("ВОЗВРАТ").Select
Range("Возврат1,Возврат2,Возврат3,В озврат4,Возврат5").Select
Selection.ClearContents
Range("C6").Select

' <<ОБРАБОТКА ЛИСТА ПРОДАЖА>>
' перенос данных по отчету продажа и отчистка данных для нового отчета
Sheets("ПРОДАЖА").Select

' по 1-ой кассе
Range("AH27").Select
Application.CutCopyMode = False
Selection.Copy

Range("D14").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

' по 2-ой кассе
Range("AH44").Select
Application.CutCopyMode = False
Selection.Copy

Range("D31").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

' по 3-ей кассе
Range("AH61").Select
Application.CutCopyMode = False
Selection.Copy

Range("D48").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

' по 4-ой кассе
Range("AH78").Select
Application.CutCopyMode = False
Selection.Copy

Range("D65").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

' по 5-ой кассе
Range("AH95").Select
Application.CutCopyMode = False
Selection.Copy

Range("D82").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False


' ОЧИСТКА ДАННЫХ НА ЛИСТЕ ПРОДАЖА
' ДАТА, НОМЕР СУМКИ И ЗАКРЫТИЕ СМЕНЫ ПО 1 КАССЕ, ЗАКРЫТИЕ СМЕНЫ 2 КАССЕ,
' ЗАКРЫТИЕ СМЕНЫ ПО 3 КАССЕ, ЗАКРЫТИЕ СМЕНЫ 4 КАССЕ, 1 КАССА, 2 КАССА, 3 КАССА, 4 КАССА
Range("D8,Сумка,Смена1,Смена2,Смена 3,Смена4,Смена5,Продажа1,Продажа2,П родажа3,Продажа4,Продажа5").Select
Selection.ClearContents

Range("D8").Select

Application.Dialogs(xlDialogSaveAs) .Show ("<drive>:\<path>\<Впишите название файла!!!>")


Application.EnableEvents = True 'включаем обработку событий,
'а именно защиту листка ПРОДАЖА и ВОЗВРАТ

Else
ans = vbNo

MsgBox "Сделаем файл в другой раз!"
End If

' ActiveWorkbook.SaveAs Filename:= _
' "C:\" , FileFormat:=xlNormal, Password:="", WriteResPassword:="", _
' ReadOnlyRecommended:=False, CreateBackup:=False
End Sub
Freerider1972 вне форума Ответить с цитированием
Старый 02.02.2010, 17:35   #4
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Выделите ячейки-Правая кнопка мыши-Формат ячеек-вкладка Защита. Скорей всего снят флажок "Защищаемая ячейка".
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 03.02.2010, 06:17   #5
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Во-первых, кто и как устанавливает защиту листа (листов)? Если это делает пользователь (вручную), то и макрос не сможет изменять защищенные (см. замечание от The_Prist) ячейки. Если же защита устанавливается программно (макросом) с опцией UserInterfaceOnly:=True, то такая защита не сохраняется. Ее нужно повторять каждый раз при открытии книги.

Во-вторых, в Ваших комментариях к коду, читаем:
Цитата:
'отключаем обработку событий,
'а именно защиту листка ПРОДАЖА и ВОЗВРАТ
Это к строке Application.EnableEvents = False, которая запрещает обработку всех событий. Если у Вас нет макросов, запускаемых по какому-либо событию, то и отключать их (а затем включать) совсем ни к чему. К защите листа эта команда никакого отношения не имеет.

И, наконец. На сколько я понимаю, Ваш макрос создан с помощью макрорекордера. Это нормально. Только после этого необходимо его (код) "почистить", т.е. убрать все лишнее и оптимизировать. К тому же, Вам, наверное, не удалось "прикрутить" к коду процедуру сохранения файла. После такой "чистки", с исправлением фрагмента сохранения, код будет выглядеть примерно так:
Код:
Sub New_File()
    Msg = "ВЫ УВЕРЕНЫ, ЧТО ХОТИТЕ ПЕРЕЙТИ НА НОВЫЙ МЕСЯЦ И СДЕЛАТЬ ЧИСТЫЙ ОТЧЕТ?"
    If MsgBox(Msg, vbExclamation + vbYesNo + vbDefaultButton2) = vbNo Then Exit Sub
    Application.EnableEvents = False: Application.ScreenUpdating = False
    With Sheets("ВЫРУЧКА")
        .[D10] = .[AH23] ' по 1-ой кассе
        .[D26] = .[AH39] ' по 2-ой кассе
        .[D42] = .[AH55] ' по 3-ей кассе
        .[D58] = .[AH71] ' по 4-ой кассе
        .[D74] = .[AH87] ' по 5-ой кассе
    End With
    Sheets("ВОЗВРАТ").Range("Возврат1,Возврат2,Возврат3,В озврат4,Возврат5").ClearContents
    With Sheets("ПРОДАЖА")
        .[D14] = .[AH27] ' по 1-ой кассе
        .[D31] = .[AH44] ' по 2-ой кассе
        .[D48] = .[AH61] ' по 3-ей кассе
        .[D65] = .[AH78] ' по 4-ой кассе
        .[D82] = .[AH95] ' по 5-ой кассе
        .Range("D8,Сумка,Смена1,Смена2,Смена 3,Смена4,Смена5,Продажа1,Продажа2,П родажа3,Продажа4,Продажа5").ClearContents
    End With
    With Application.FileDialog(msoFileDialogSaveAs)
        .Title = "Сохранение": .Show
        If .SelectedItems.Count = 0 Then Exit Sub
        ActiveWorkbook.SaveAs Filename:=.SelectedItems(1)
    End With
    Application.EnableEvents = True: Application.ScreenUpdating = True
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 04.02.2010, 22:47   #6
Freerider1972
Пользователь
 
Регистрация: 01.07.2007
Сообщений: 41
По умолчанию

SAS888
Спасибо большое за ответ, не ожидал такой раскрытый ответ.
Защиту ставлю макросом на все листы сразу.
Я включаю обработку событий для того, чтобы пользователь не мог сохранить файл через меню, сохранить как.
И еще вроде бы я поставил защиту от копирования ячеек. Это для блондинок...
Да, я пишу макрорекордером, потом лишнее убираю. Но я смотрю можно еще больше лишнего убрать.
С сохранение тоже нет проблем, я сделал это так, чтобы создать новый чистый отчет, а это сохранить.
Не подскажите литературу для новичка, чтобы более углубленно изучить VB?
Freerider1972 вне форума Ответить с цитированием
Старый 05.02.2010, 04:49   #7
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Цитата:
Не подскажите литературу для новичка, чтобы более углубленно изучить VB?
Во-первых, не путайте VB (как "чистый" язык) и VBA для конкретных приложений.

Во-вторых, лучшая книга, это Дж.Уокенбах "Профессиональное программирование на VBA Excel 2002 (2003)".

В-третьих, воспользуйтесь поиском (расширенным поиском) по этому вопросу. В данном топике не однократно выкладывались ссылки на полезную литературу и сайты.
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
макрос - подсчитать для каждой строки кол-во ячеек с «+», кол-во ячеек с «-» Vadim_abs Microsoft Office Excel 36 14.07.2009 12:08
Защита ячеек Levchik Microsoft Office Excel 1 02.02.2009 08:15
Защита ячеек от вырезания и копирования Freerider1972 Microsoft Office Excel 1 23.12.2008 20:57
Протокол защищенных электронных транзакций Set Nathan Помощь студентам 3 27.01.2007 16:08