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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.11.2010, 16:53   #1
NoLL
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 24
Восклицание Защита листа и макросы

Перед созданием темы я: Восползовался гуглом(нашел полезные советы в том числе и этот форум), восползовался поиском форума(нашел похожие темы), прочитал похожие темы(но к сожадению не они не то, что я нарыл до этого)

Ситуация следующая: Есть макрос работающий на ура. Но нада защитить лист. Как только защита ставится, даже если все ячейки на листе не защищены. Макрос отказывается работать. Как мне вставить код снимающий защиту в существующий макрос. Вставляю код так как нету возможности сбросить файлик(если я что-то неясно обяснил спросите я постараюсь уточнить, я ведь толко учусь вернее решил учится как только столкнулся с сей проблемой которую нада решить в короткие сроки):

Код:
Function chen(valll As String, num As Integer) As String
  'On Error GoTo hhh


  x = 0
  xx = 0
  For i = 200 To 1400
    If valll = Cells(i, 26).Value Then
       x = i
       b = i + 1
       While Cells(b, 26).Value = "" And Cells(b, 27).Value <> "" And (b < 1400)
           b = b + 1
       Wend
       xx = b
       
    End If
  Next

  xx = xx - 1

  With Cells(num, 6).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:="=$AA$" & x & ":$AA$" & xx
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With
    
    chen = valll
End Function
Где chen индивидуальна формула.
Эксель 2003

Последний раз редактировалось NoLL; 11.11.2010 в 17:17.
NoLL вне форума Ответить с цитированием
Старый 11.11.2010, 17:25   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Код:
Function chen(valll As String, num As Integer) As String
    ActiveSheet.Unprotect    ' снимаем защиту (временно)
    For i = 200 To 1400
        If valll = Cells(i, 26).Value Then
            x = i
            b = i + 1
            While Cells(b, 26).Value = "" And Cells(b, 27).Value <> "" And (b < 1400)
                b = b + 1
            Wend
            xx = b
        End If
    Next
    xx = xx - 1
    With Cells(num, 6).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
             xlBetween, Formula1:="=$AA$" & x & ":$AA$" & xx
        .IgnoreBlank = True: .InCellDropdown = True
        .ShowInput = True: .ShowError = True
    End With
    chen = valll
    ActiveSheet.Protect    ' ставим защиту обратно
End Function

Если защита листа - с паролем, меняем
ActiveSheet.Unprotect на ActiveSheet.Unprotect "пароль"
и
ActiveSheet.protect на ActiveSheet.protect "пароль"
EducatedFool вне форума Ответить с цитированием
Старый 11.11.2010, 17:47   #3
NoLL
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 24
По умолчанию

Попрробывал. Всеравно после установки защиты листа - макрос не работает. Кстати, весма благодарен за упрощения кода. Работает он отлично. Но всеравно отказывается при установке защиты листа.

Возможно вам нужны какие либо данные. По мере возможности постараюсь вам их предоставить.
NoLL вне форума Ответить с цитированием
Старый 11.11.2010, 18:09   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Всеравно после установки защиты листа - макрос не работает
Ищите ошибку в другом (не в защите листа)

Строка ActiveSheet.Unprotect полностью снимает защиту листа на время выполнения макроса.
так что из-за этого проблем быть не должно.

Выкладывайте файл - посмотрим, что можно сделать.

Цитата:
Кстати, весма благодарен за упрощения кода
Это не упрощение кода.
Просто убрал лишние строки.
Если его упростить - он будет работать в 100 раз быстрее.
Только без файла упростить сложно (непонятно, что делает код)
EducatedFool вне форума Ответить с цитированием
Старый 11.11.2010, 18:45   #5
NoLL
Пользователь
 
Регистрация: 11.11.2010
Сообщений: 24
По умолчанию

К сожалению выложить немогу, файл строгой отчетности и убраны все технические возможности его выложить. В виду болшой, просто огромной количества информации, заменить автоматы на пылесосы, тоже не выйдет.
Могу попытатся обьяснить, хотя понимаю, что этого будет недостаточно.
есть 2 списка на листе. При выборе значения в первом из них макрос активирует формулу(chen), которая подбирает набор данных относително первого во 2-м.
формула: =chen(A13;СТРОКА(A13)) Где ячейка A13 это данные в 1-м списке.

А13
Список1
Пылесос

B13
Список2
Красный
Синий
И тд.

К13-местоположение формулы.
пылесос



После установки защиты в ячейке к13 выдается ошибка #ЗНАЧ! а в ячейке В13 исчезает вообще список, остается последняя запись как значение.

Собственно и все.
NoLL вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
защита листа clown86 Microsoft Office Excel 12 26.11.2010 15:21
Защита листа Alekcey Microsoft Office Excel 3 10.11.2010 06:06
Защита листа и макросы Sensy Microsoft Office Excel 3 15.12.2009 05:28
Защита листа Mrs2 Microsoft Office Excel 2 05.11.2009 05:19
Защита листа! Marsik Microsoft Office Excel 2 27.03.2008 18:19