Что-то я сильно затупил, но не могу понять, где у меня ошибка вот в этом куске кода:
[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. Всё это продолжается до нажатия на любом листе кнопки "Стоп" (ещё не сделана). Что там будет выполняться в листах — это позже будет сделано.
Добавил файл.
Приветствую уважаемое сообщество!
Что-то я сильно затупил, но не могу понять, где у меня ошибка вот в этом куске кода:
[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. Всё это продолжается до нажатия на любом листе кнопки "Стоп" (ещё не сделана). Что там будет выполняться в листах — это позже будет сделано.
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 ставит и убирает автофильтр. Если его нет, то ставит, если он уже есть, то убирает. У Вас фильтр на листе был, Вы его убрали и пытаетесь с ним работать. А его нет, Вы только что его убрали
Так нужно? [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_