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

Вход

Регистрация

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

 

= Мир MS Excel/Применение For Each... для перебора листов - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Применение For Each... для перебора листов (Макросы/Sub)
Применение For Each... для перебора листов
Yurbas Дата: Пятница, 31.05.2019, 11:07 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, Excel 2013
Приветствую уважаемое сообщество!

Что-то я сильно затупил, но не могу понять, где у меня ошибка вот в этом куске кода:

[vba]
Код
Dim sht As Worksheet
    
    ufTimerSelect.Show

For Each sht In ThisWorkbook.Sheets
    sht.Activate
    Range("A5:X5").Select
    Selection.AutoFilter
    ActiveWorkbook.Worksheets(sht).AutoFilter.Sort.SortFields.Clear
[/vba]

После запуска выскакивает окно с ошибкой:
Цитата
Run-time error '13':
Type mismatch


Пробовал и вот так эту строку записать:
[vba]
Код
sht.AutoFilter.Sort.SortFields.Clear
[/vba]
Всё равно ошибку выдаёт.
Что-то в орфографии VBA у меня хромает или где?

Вот полный текст VBA:
[vba]
Код
Sub Slaid()
Dim p As Integer
Dim m As String
Dim sht As Worksheet
Dim s As String
    
    ufTimerSelect.Show
Begin:

For Each sht In ThisWorkbook.Sheets
    Debug.Print sht.Name
    sht.Activate
    Range("A5:X5").Select
    Selection.AutoFilter
    ActiveWorkbook.Worksheets(sht.Name).AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(sht.Name).AutoFilter.Sort.SortFields.Add Key:=Range("X5"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortTextAsNumbers
        
    With sht.AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    Application.Wait Time:=Now + TimeValue("0:00:05")
Next sht

GoTo Begin

End Sub
[/vba]

А выполнять он должен совсем простую задачу:
вывести на экран Лист1 на экран, сортируя при этом столбец X по убыванию;
после паузы вывести на экран Лист2 с аналогичными действиями;
и так далее со всеми листами книги, сколько бы их ни было;
после последнего выведенного листа снова выводится Лист1.
Всё это продолжается до нажатия на любом листе кнопки "Стоп" (ещё не сделана).
Что там будет выполняться в листах — это позже будет сделано.

Добавил файл.
К сообщению приложен файл: -_1.xlsm (33.2 Kb)


Где начало того конца, которым кончается начало?

Сообщение отредактировал Yurbas - Пятница, 31.05.2019, 12:14
 
Ответить
СообщениеПриветствую уважаемое сообщество!

Что-то я сильно затупил, но не могу понять, где у меня ошибка вот в этом куске кода:

[vba]
Код
Dim sht As Worksheet
    
    ufTimerSelect.Show

For Each sht In ThisWorkbook.Sheets
    sht.Activate
    Range("A5:X5").Select
    Selection.AutoFilter
    ActiveWorkbook.Worksheets(sht).AutoFilter.Sort.SortFields.Clear
[/vba]

После запуска выскакивает окно с ошибкой:
Цитата
Run-time error '13':
Type mismatch


Пробовал и вот так эту строку записать:
[vba]
Код
sht.AutoFilter.Sort.SortFields.Clear
[/vba]
Всё равно ошибку выдаёт.
Что-то в орфографии VBA у меня хромает или где?

Вот полный текст VBA:
[vba]
Код
Sub Slaid()
Dim p As Integer
Dim m As String
Dim sht As Worksheet
Dim s As String
    
    ufTimerSelect.Show
Begin:

For Each sht In ThisWorkbook.Sheets
    Debug.Print sht.Name
    sht.Activate
    Range("A5:X5").Select
    Selection.AutoFilter
    ActiveWorkbook.Worksheets(sht.Name).AutoFilter.Sort.SortFields.Clear
    ActiveWorkbook.Worksheets(sht.Name).AutoFilter.Sort.SortFields.Add Key:=Range("X5"), _
        SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortTextAsNumbers
        
    With sht.AutoFilter.Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
    Application.Wait Time:=Now + TimeValue("0:00:05")
Next sht

GoTo Begin

End Sub
[/vba]

А выполнять он должен совсем простую задачу:
вывести на экран Лист1 на экран, сортируя при этом столбец X по убыванию;
после паузы вывести на экран Лист2 с аналогичными действиями;
и так далее со всеми листами книги, сколько бы их ни было;
после последнего выведенного листа снова выводится Лист1.
Всё это продолжается до нажатия на любом листе кнопки "Стоп" (ещё не сделана).
Что там будет выполняться в листах — это позже будет сделано.

Добавил файл.

Автор - Yurbas
Дата добавления - 31.05.2019 в 11:07
_Boroda_ Дата: Пятница, 31.05.2019, 11:58 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
В приложенном файле и коде не закрыт For


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеВ приложенном файле и коде не закрыт For

Автор - _Boroda_
Дата добавления - 31.05.2019 в 11:58
Yurbas Дата: Пятница, 31.05.2019, 12:09 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, Excel 2013
Да, да, уже увидел. Исправил в коде, а вот и файл поправленный:
К сообщению приложен файл: 5023734.xlsm (34.1 Kb)


Где начало того конца, которым кончается начало?
 
Ответить
СообщениеДа, да, уже увидел. Исправил в коде, а вот и файл поправленный:

Автор - Yurbas
Дата добавления - 31.05.2019 в 12:09
_Boroda_ Дата: Пятница, 31.05.2019, 12:35 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Так нужно?
[vba]
Код
Sub Slaid()
Dim sht As Worksheet
    ufTimerSelect.Show
Begin:
For Each sht In ThisWorkbook.Sheets
    With sht
        Debug.Print .Name
        .Activate
        If .AutoFilterMode Then
            .Cells.AutoFilter
        End If
        .Range("A5:X5").AutoFilter
        With .AutoFilter.Sort
            .SortFields.Clear
            .SortFields.Add Key:=sht.Range("X5"), _
                SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortTextAsNumbers
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
    Application.Wait Time:=Now + TimeValue("0:00:05")
Next sht
GoTo Begin
End Sub
[/vba]

AutoFilter ставит и убирает автофильтр. Если его нет, то ставит, если он уже есть, то убирает. У Вас фильтр на листе был, Вы его убрали и пытаетесь с ним работать. А его нет, Вы только что его убрали


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеТак нужно?
[vba]
Код
Sub Slaid()
Dim sht As Worksheet
    ufTimerSelect.Show
Begin:
For Each sht In ThisWorkbook.Sheets
    With sht
        Debug.Print .Name
        .Activate
        If .AutoFilterMode Then
            .Cells.AutoFilter
        End If
        .Range("A5:X5").AutoFilter
        With .AutoFilter.Sort
            .SortFields.Clear
            .SortFields.Add Key:=sht.Range("X5"), _
                SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortTextAsNumbers
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End With
    Application.Wait Time:=Now + TimeValue("0:00:05")
Next sht
GoTo Begin
End Sub
[/vba]

AutoFilter ставит и убирает автофильтр. Если его нет, то ставит, если он уже есть, то убирает. У Вас фильтр на листе был, Вы его убрали и пытаетесь с ним работать. А его нет, Вы только что его убрали

Автор - _Boroda_
Дата добавления - 31.05.2019 в 12:35
Yurbas Дата: Пятница, 31.05.2019, 12:56 | Сообщение № 5
Группа: Пользователи
Ранг: Новичок
Сообщений: 44
Репутация: 3 ±
Замечаний: 0% ±

Excel 2010, Excel 2013
Запустил, работает! Сейчас буду разбираться.

Кто бы сомневался в том, что Boroda всё исправит и растолкует? Только не Я! :D
Великое СПАСИБО!

hands


Где начало того конца, которым кончается начало?
 
Ответить
СообщениеЗапустил, работает! Сейчас буду разбираться.

Кто бы сомневался в том, что Boroda всё исправит и растолкует? Только не Я! :D
Великое СПАСИБО!

hands

Автор - Yurbas
Дата добавления - 31.05.2019 в 12:56
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Применение For Each... для перебора листов (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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