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

Вход

Регистрация

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

 

= Мир MS Excel/Мгновенный фильтр по нескольким листам - Мир MS Excel

  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_, DrMini  
Мгновенный фильтр по нескольким листам
Кузьмич Дата: Среда, 14.03.2018, 21:34 | Сообщение № 1
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 2 ±
Замечаний: 0% ±

Excel 2013
Всем доброго здравия!
Хотел создать такой вот интересный фильтр для удобства обработки данных. Дело в том, что в данном фильтре присутствует 2 макроса и по отдельности они оба работают, а вместе не дружат. Первый макрос закидывает данные по нужным ячейкам и листам, а второй должен фильтровать значения по введенным значениям. Первый макрос работает, а второй в паре с первым не хочет обрабатывать результат, но если на листах с фильтрацией вводить значения вручную, то работает, а это так не удобно, т.к листов более 10. Помогите исправить или допилить! Файл прилагается.
К сообщению приложен файл: 2962915.xlsm (21.6 Kb)


Ну, теперь вся утка наша...
 
Ответить
СообщениеВсем доброго здравия!
Хотел создать такой вот интересный фильтр для удобства обработки данных. Дело в том, что в данном фильтре присутствует 2 макроса и по отдельности они оба работают, а вместе не дружат. Первый макрос закидывает данные по нужным ячейкам и листам, а второй должен фильтровать значения по введенным значениям. Первый макрос работает, а второй в паре с первым не хочет обрабатывать результат, но если на листах с фильтрацией вводить значения вручную, то работает, а это так не удобно, т.к листов более 10. Помогите исправить или допилить! Файл прилагается.

Автор - Кузьмич
Дата добавления - 14.03.2018 в 21:34
Gustav Дата: Среда, 14.03.2018, 22:28 | Сообщение № 2
Группа: Админы
Ранг: Участник клуба
Сообщений: 2877
Репутация: 1217 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Странно то, что у Вас одна из событийных процедур Private Sub Worksheet_Change находится в общем модуле, а не в модуле конкретного листа. Из общего модуля она не сработает.


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеСтранно то, что у Вас одна из событийных процедур Private Sub Worksheet_Change находится в общем модуле, а не в модуле конкретного листа. Из общего модуля она не сработает.

Автор - Gustav
Дата добавления - 14.03.2018 в 22:28
Кузьмич Дата: Среда, 14.03.2018, 22:39 | Сообщение № 3
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 2 ±
Замечаний: 0% ±

Excel 2013
Странно то, что у Вас одна из событийных процедур Private Sub Worksheet_Change находится в общем модуле, а не в модуле конкретного листа. Из общего модуля она не сработает.

можно ли это вообще исправить? Я применял сначала на листы, тоже самое было, а после в модуль закинул, подумал что так сработает, но увы.


Ну, теперь вся утка наша...

Сообщение отредактировал Кузьмич - Среда, 14.03.2018, 22:43
 
Ответить
Сообщение
Странно то, что у Вас одна из событийных процедур Private Sub Worksheet_Change находится в общем модуле, а не в модуле конкретного листа. Из общего модуля она не сработает.

можно ли это вообще исправить? Я применял сначала на листы, тоже самое было, а после в модуль закинул, подумал что так сработает, но увы.

Автор - Кузьмич
Дата добавления - 14.03.2018 в 22:39
RAN Дата: Среда, 14.03.2018, 23:11 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Если вы в первом макросе явно отключаете обработку событий, сиречь запуск любого событийного макроса, то почему вы считаете, что второй (событийный) макрос должен сработать?


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеЕсли вы в первом макросе явно отключаете обработку событий, сиречь запуск любого событийного макроса, то почему вы считаете, что второй (событийный) макрос должен сработать?

Автор - RAN
Дата добавления - 14.03.2018 в 23:11
Кузьмич Дата: Среда, 14.03.2018, 23:23 | Сообщение № 5
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 2 ±
Замечаний: 0% ±

Excel 2013
Если вы в первом макросе явно отключаете обработку событий, сиречь запуск любого событийного макроса, то почему вы считаете, что второй (событийный) макрос должен сработать?

Их возможно подружить?


Ну, теперь вся утка наша...
 
Ответить
Сообщение
Если вы в первом макросе явно отключаете обработку событий, сиречь запуск любого событийного макроса, то почему вы считаете, что второй (событийный) макрос должен сработать?

Их возможно подружить?

Автор - Кузьмич
Дата добавления - 14.03.2018 в 23:23
Gustav Дата: Среда, 14.03.2018, 23:44 | Сообщение № 6
Группа: Админы
Ранг: Участник клуба
Сообщений: 2877
Репутация: 1217 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Что-то такое нарисовалось для первого листа:

К сообщению приложен файл: MultiSheetFilte.xlsm (26.5 Kb)


МОИ: Ник, Tip box: 41001663842605
 
Ответить
СообщениеЧто-то такое нарисовалось для первого листа:


Автор - Gustav
Дата добавления - 14.03.2018 в 23:44
RAN Дата: Среда, 14.03.2018, 23:44 | Сообщение № 7
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A2:F3")) Is Nothing Then
    With Application
        MCalc = .Calculation
        .Calculation = xlCalculationManual
        .EnableEvents = False
         On Error Resume Next
        For Each cell In Intersect(Target, Range("A2:F3"))
            For Each Sheet In Worksheets
                If Not Sheet.Name = ActiveSheet.Name Then _
                Sheet.Range(cell.Address) = cell
        Sheet.ShowAllData
        Sheet.Range("A5").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Sheet.Range("A1").CurrentRegion
           Next
        Next
        .Calculation = MCalc
        .EnableEvents = True
    End With
    End If
End Sub
[/vba]


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("A2:F3")) Is Nothing Then
    With Application
        MCalc = .Calculation
        .Calculation = xlCalculationManual
        .EnableEvents = False
         On Error Resume Next
        For Each cell In Intersect(Target, Range("A2:F3"))
            For Each Sheet In Worksheets
                If Not Sheet.Name = ActiveSheet.Name Then _
                Sheet.Range(cell.Address) = cell
        Sheet.ShowAllData
        Sheet.Range("A5").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Sheet.Range("A1").CurrentRegion
           Next
        Next
        .Calculation = MCalc
        .EnableEvents = True
    End With
    End If
End Sub
[/vba]

Автор - RAN
Дата добавления - 14.03.2018 в 23:44
RAN Дата: Среда, 14.03.2018, 23:54 | Сообщение № 8
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Цитата Gustav, 14.03.2018 в 23:44 ()

Цитата RAN, 14.03.2018 в 23:44 ()

:D


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Цитата Gustav, 14.03.2018 в 23:44 ()

Цитата RAN, 14.03.2018 в 23:44 ()

:D

Автор - RAN
Дата добавления - 14.03.2018 в 23:54
Кузьмич Дата: Четверг, 15.03.2018, 07:08 | Сообщение № 9
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 2 ±
Замечаний: 0% ±

Excel 2013
Что-то такое нарисовалось для первого листа:

Первый лист нужен только для ввода данных, а фильтровать должны все оставшиеся листы.


Ну, теперь вся утка наша...
 
Ответить
Сообщение
Что-то такое нарисовалось для первого листа:

Первый лист нужен только для ввода данных, а фильтровать должны все оставшиеся листы.

Автор - Кузьмич
Дата добавления - 15.03.2018 в 07:08
Кузьмич Дата: Четверг, 15.03.2018, 19:13 | Сообщение № 10
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 2 ±
Замечаний: 0% ±

Excel 2013
Решил обойти проблему методом копирования диапазона с Лист1 например на Лист2, но выдает ошибку 400.

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:F3")) Is Nothing Then
On Error Resume Next
ActiveSheet.ShowAllData
Range("A5").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("A1").CurrentRegion
End If
End Sub
Sub dabl()
Range(Range("Лист1 A2:F3").Value).Copy Range(Range("Лист2 A2:F3").Value)
End Sub
[/vba]

Хотел скопировать вводимые значения с Лист1 на Лист2


Ну, теперь вся утка наша...

Сообщение отредактировал Кузьмич - Четверг, 15.03.2018, 19:17
 
Ответить
СообщениеРешил обойти проблему методом копирования диапазона с Лист1 например на Лист2, но выдает ошибку 400.

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:F3")) Is Nothing Then
On Error Resume Next
ActiveSheet.ShowAllData
Range("A5").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("A1").CurrentRegion
End If
End Sub
Sub dabl()
Range(Range("Лист1 A2:F3").Value).Copy Range(Range("Лист2 A2:F3").Value)
End Sub
[/vba]

Хотел скопировать вводимые значения с Лист1 на Лист2

Автор - Кузьмич
Дата добавления - 15.03.2018 в 19:13
RAN Дата: Четверг, 15.03.2018, 19:42 | Сообщение № 11
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Если вам не нравится предложенное готовое решение, то так и напишите.
Цитата Кузьмич, 15.03.2018 в 19:13, в сообщении № 10 ()
Решил обойти проблему

тоже вариант.


Быть или не быть, вот в чем загвоздка!
 
Ответить
СообщениеЕсли вам не нравится предложенное готовое решение, то так и напишите.
Цитата Кузьмич, 15.03.2018 в 19:13, в сообщении № 10 ()
Решил обойти проблему

тоже вариант.

Автор - RAN
Дата добавления - 15.03.2018 в 19:42
Кузьмич Дата: Четверг, 15.03.2018, 19:43 | Сообщение № 12
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 2 ±
Замечаний: 0% ±

Excel 2013
тоже вариант.

так ошибку выдает 400


Ну, теперь вся утка наша...
 
Ответить
Сообщение
тоже вариант.

так ошибку выдает 400

Автор - Кузьмич
Дата добавления - 15.03.2018 в 19:43
RAN Дата: Четверг, 15.03.2018, 19:49 | Сообщение № 13
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Цитата Кузьмич, 15.03.2018 в 19:43, в сообщении № 12 ()
так ошибку выдает 400

так устраните её в вашем "Решил обойти проблему"!


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Цитата Кузьмич, 15.03.2018 в 19:43, в сообщении № 12 ()
так ошибку выдает 400

так устраните её в вашем "Решил обойти проблему"!

Автор - RAN
Дата добавления - 15.03.2018 в 19:49
Кузьмич Дата: Четверг, 15.03.2018, 20:10 | Сообщение № 14
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 2 ±
Замечаний: 0% ±

Excel 2013
так устраните её

Тут дело в том что этот обход требует кнопку на выполнение, а мне автоматика нужна.
[vba]
Код
Sub dabl()
Range(Range("Лист1 A2:F3").Value).Copy Range(Range("Лист2 A2:F3").Value)
End Sub
[/vba]

Каким образом подружить это чудо на одном листе с выше указанным копированием?

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:F3")) Is Nothing Then
On Error Resume Next
ActiveSheet.ShowAllData
Range("A5").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("A1").CurrentRegion
End If
End Sub
[/vba]


Ну, теперь вся утка наша...
 
Ответить
Сообщение
так устраните её

Тут дело в том что этот обход требует кнопку на выполнение, а мне автоматика нужна.
[vba]
Код
Sub dabl()
Range(Range("Лист1 A2:F3").Value).Copy Range(Range("Лист2 A2:F3").Value)
End Sub
[/vba]

Каким образом подружить это чудо на одном листе с выше указанным копированием?

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("A2:F3")) Is Nothing Then
On Error Resume Next
ActiveSheet.ShowAllData
Range("A5").CurrentRegion.AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("A1").CurrentRegion
End If
End Sub
[/vba]

Автор - Кузьмич
Дата добавления - 15.03.2018 в 20:10
Gustav Дата: Четверг, 15.03.2018, 20:26 | Сообщение № 15
Группа: Админы
Ранг: Участник клуба
Сообщений: 2877
Репутация: 1217 ±
Замечаний: ±

начинал с Excel 4.0, видел 2.1
Цитата Кузьмич, 15.03.2018 в 20:10, в сообщении № 14 ()
Range(Range("Лист1 A2:F3").Value).Copy Range(Range("Лист2 A2:F3").Value)

Это примерно вот так надо:
[vba]
Код
Worksheets("Лист1").Range("A2:F3").Copy Worksheets("Лист2").Range("A2:F3")
[/vba]
Или покороче вот так:
[vba]
Код
Range("Лист1!A2:F3").Copy Range("Лист2!A2:F3")
[/vba]

[p.s.]Ну и, может, я опять чего-то не понимаю, но у меня для Лист1 сложилось вот так (на базе процедуры от RAN):[/p.s.]

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) 'для листа Лист1

    Dim sheet As Worksheet
    Dim rng As Range
    
    Set rng = Me.Range("A2:F3")
    
    If Intersect(Target, rng) Is Nothing Then Exit Sub
    
    With Application
        MCalc = .Calculation
        .Calculation = xlCalculationManual
        For Each sheet In Worksheets
            If sheet.Name <> Me.Name Then
                rng.Copy sheet.Range(rng.Address)
            End If
        Next
        .Calculation = MCalc
    End With
End Sub
[/vba]
!!! При условии, что у всех остальных листов остаются активными собственные обработчики Worksheet_Change, которые обеспечивают фильтрацию на своих листах.
К сообщению приложен файл: MultiSheetFilt2.xlsm (26.1 Kb)


МОИ: Ник, Tip box: 41001663842605

Сообщение отредактировал Gustav - Четверг, 15.03.2018, 21:25
 
Ответить
Сообщение
Цитата Кузьмич, 15.03.2018 в 20:10, в сообщении № 14 ()
Range(Range("Лист1 A2:F3").Value).Copy Range(Range("Лист2 A2:F3").Value)

Это примерно вот так надо:
[vba]
Код
Worksheets("Лист1").Range("A2:F3").Copy Worksheets("Лист2").Range("A2:F3")
[/vba]
Или покороче вот так:
[vba]
Код
Range("Лист1!A2:F3").Copy Range("Лист2!A2:F3")
[/vba]

[p.s.]Ну и, может, я опять чего-то не понимаю, но у меня для Лист1 сложилось вот так (на базе процедуры от RAN):[/p.s.]

[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range) 'для листа Лист1

    Dim sheet As Worksheet
    Dim rng As Range
    
    Set rng = Me.Range("A2:F3")
    
    If Intersect(Target, rng) Is Nothing Then Exit Sub
    
    With Application
        MCalc = .Calculation
        .Calculation = xlCalculationManual
        For Each sheet In Worksheets
            If sheet.Name <> Me.Name Then
                rng.Copy sheet.Range(rng.Address)
            End If
        Next
        .Calculation = MCalc
    End With
End Sub
[/vba]
!!! При условии, что у всех остальных листов остаются активными собственные обработчики Worksheet_Change, которые обеспечивают фильтрацию на своих листах.

Автор - Gustav
Дата добавления - 15.03.2018 в 20:26
Кузьмич Дата: Пятница, 16.03.2018, 06:39 | Сообщение № 16
Группа: Пользователи
Ранг: Участник
Сообщений: 77
Репутация: 2 ±
Замечаний: 0% ±

Excel 2013
Gustav, это именно то чего я хотел добиться. Благодарствую от души!


Ну, теперь вся утка наша...

Сообщение отредактировал Кузьмич - Пятница, 16.03.2018, 06:40
 
Ответить
СообщениеGustav, это именно то чего я хотел добиться. Благодарствую от души!

Автор - Кузьмич
Дата добавления - 16.03.2018 в 06:39
  • Страница 1 из 1
  • 1
Поиск:

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