Страницы: 1
RSS
Не разрываются связи с другими книгами
 
Всем доброго времени суток.
Есть книга где на каждом листе есть проверка данных и включен автофильтр, нужно отключить проверку данных так как из-за этого не разрываются связи с другими книгами.
Через запись макросов записал макрос снятия автофильтра, и снятия защиты проверки данных.
Как видоизменить макрос что бы он прошел по остальным листам книги сам?
Вот макрос.
Код
Sub Макрос1()
    Selection.AutoFilter
    Cells.Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
        :=xlBetween
        .IgnoreBlank = True
        .InCellDropdown = True
        .ShowInput = True
        .ShowError = True
    End With
End Sub

За ранее благодарен за помощь.
 
С помощью цикла
Код
For Each .......Next
Код
Dim sht as Worksheet
For Each sht In WorkSheets
     With sht
        .....код.....
   End With   
Next sht
ВАЖНО:
Не забудьте ссылки расставить для конструкции With ...End With
Изменено: Nordheim - 28.09.2017 13:27:24
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, Спасибо. Но чет я не понял как нужно правильно сделать, никак не работает код.
Знаний маловато.
Изменено: Николай - 28.09.2017 15:28:42
 
Попробуйте так
Код
Sub DelValidation()
Dim Sh As Worksheet
For Each Sh In Worksheets
    With Sh
        .ShowAllData
        .UsedRange.Validation.Delete
    End With
Next
End Sub
Согласие есть продукт при полном непротивлении сторон
 
Sanja,
не работает падает с ошибкой.
Вот файл для примера там два листа с проверками по данным.
 
Ошибка возникает потому, что на листе не установлен фильтр, т.е. отображены все данные.
Вам нужно СБРОСИТЬ фильтры или вообще их удалить?
Код
Sub DelValidation()
Dim Sh As Worksheet
On Error Resume Next
For Each Sh In Worksheets
    With Sh
        .ShowAllData
        .UsedRange.Validation.Delete
    End With
Next
End Sub
Изменено: Sanja - 28.09.2017 16:44:18
Согласие есть продукт при полном непротивлении сторон
 
Код
Dim Sh As Worksheet
For Each Sh In Worksheets
    With Sh
        For Each lobj In .ListObjects
            lobj.AutoFilter.ShowAllData
        Next
        .UsedRange.Validation.Delete
    End With
Next
 
Sanja,  Работает.
но связи с файлами не разрываются.
Только если выполнить.
Код
Sub Макрос1()
      Cells.Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator _
        :=xlBetween
        .IgnoreBlank = True
        .InCellDropdown = True
        .ShowInput = True
        .ShowError = True
    End With
End Sub

Тогда после сохранения файла и его закрытия открытия внешние связи отпадают.
В принципе не с того я начал, нужно разорвать внешние связи с другими файлами, а разорвать их не получается потому что есть проверка данных.
Изменено: Николай - 28.09.2017 18:39:54
 
Equio,
А ваш даже запустить не смог. Его нельзя выбрать среди макросов. А если дать название то выскакивает ошибка.
Запустился отработал, но связи все равно не разрываются.
Изменено: Николай - 28.09.2017 18:46:50
 
Вопрос а возможно сделать такой макрос.
Пришел на первую страницу книги выполнил макрос 2
Перешел на следующую снова выполнил макрос 2 и т.д. по всей книге?
Что-то у меня не получилось.

Код
Sub DelValidation()
Dim Sh As Worksheet
On Error Resume Next
For Each Sh In Worksheets
    With Sh
        Call Macro2
    End With
Next
End Sub
 
А правила можно соблюдать? Тема о чем?
 
vikttur,
Тема о том как выполнив макрос, командой в макросе перейти на следующую страницу книги и выполнить макрос снова и т.д.
Возможно название темы не совсем корректно, и его следует уточнить, просто я не знаю как.
 
Нет, название темы говорит о том, что нужна была помощь по переходу надругой лист. Все! Вы сами так назвали!

Название темы должно отражать суть задачи. Предложите новое. Модераторы заменят.
 
Код
Sub ww()
    For Each nm In ThisWorkbook.Names
        nm.Delete
    Next
End Sub

Мешает не проверка данных, а имена, которые она использует.

NewName "не разрываются связи с другими книгами"
Изменено: RAN - 28.09.2017 20:36:37
 
В итоге вот как подсказали на параллельном форуме.
Код
Sub Test()
 
  For i = 1 To Worksheets.Count
    Sheets(i).Select
    Call Макрос1
  Next
End Sub

Макрос идет по листам книги и выполняет макрос1, в котором у меня все необходимые исправления для каждого листа, сто пудово не правильно с точки зрения этики кода, но мне так понятней и самостоятельно могу вносить изменения.
Изменено: Николай - 30.09.2017 18:00:27
 
Цитата
RAN написал:
Мешает не проверка данных, а имена, которые она использует.
Спасибо. Ваш код "отвязывает" листы.
Страницы: 1
Наверх