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

Вход

Регистрация

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

 

= Мир MS Excel/Горизонтальный фильтр при помощи макроса - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Горизонтальный фильтр при помощи макроса (Макросы/Sub)
Горизонтальный фильтр при помощи макроса
crash173 Дата: Среда, 13.04.2022, 08:33 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

2007
Доброе утро! Прошу помочь с макросом. Есть макрос, который применялся для другой таблицы. Макрос выполнял действие по фильтрации столбцов (горизонтально). Как можно применить его для моей таблицы, чтобы тоже была вертикальная фильтрация? Свой файл "post111" без макроса прилагаю.

Отдельно макрос:
[vba]
Код
Option Explicit
Public isHide As Boolean
Sub ColumnHideShow()
Dim rng As Range
Dim i As Long, iRow As Long, iClm As Long
Dim strKnopka As String

If Cells.Count <> Cells.SpecialCells(xlCellTypeVisible).Count Then
isHide = True
Else: isHide = False
End If

'пропускаем ошибки
On Error Resume Next
'отключаем обновление и контроль событий
Application.ScreenUpdating = False
Application.EnableEvents = False

'снимаем текст в кнопке

'     ActiveSheet.Shapes("AutoShape 2").Select
'     strKnopka = Selection.Characters.Text
'     Range("A1").Activate

'отображаем все столбцы
If isHide = True Then
ActiveSheet.Range(Cells(, 1), Cells(1, Columns.Count)).EntireColumn.Hidden = False
strKnopka = "Скрыть столбцы"

'скрываем пустые столбцы в используемом диапазоне данных
Else: With ActiveSheet.UsedRange

iRow = .Row + .Rows.Count - 1
iClm = .Column + .Columns.Count - 1
.Range(Cells(1, 1), Cells(1, iClm)).EntireColumn.Hidden = False

For i = iClm To 1 Step -1

Set rng = Range(Cells(1, i), Cells(Rows.Count, i)).Find(What:="?*", LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False)

If rng Is Nothing Then .EntireColumn(i).Hidden = True

Next i

strKnopka = "Отобразить все"

End With

End If

'устанавливаем подпись кнопки
ActiveSheet.Shapes("AutoShape 2").Select
Selection.Characters.Text = strKnopka
Range("A1").Activate

Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

'--------------------------------
'Sub ShowAll()
'
'On Error Resume Next
'
'   Application.ScreenUpdating = False
'   Application.EnableEvents = False
'
'   Range("B3").ClearContents
'
'Range(Cells(7, 6), Cells(7, Columns.Count)).EntireColumn.Hidden = False
'
'  Application.EnableEvents = True
'  Application.ScreenUpdating = True
'
'End Sub
[/vba]
К сообщению приложен файл: post111.xlsx (19.4 Kb)


Сообщение отредактировал Serge_007 - Среда, 13.04.2022, 09:06
 
Ответить
СообщениеДоброе утро! Прошу помочь с макросом. Есть макрос, который применялся для другой таблицы. Макрос выполнял действие по фильтрации столбцов (горизонтально). Как можно применить его для моей таблицы, чтобы тоже была вертикальная фильтрация? Свой файл "post111" без макроса прилагаю.

Отдельно макрос:
[vba]
Код
Option Explicit
Public isHide As Boolean
Sub ColumnHideShow()
Dim rng As Range
Dim i As Long, iRow As Long, iClm As Long
Dim strKnopka As String

If Cells.Count <> Cells.SpecialCells(xlCellTypeVisible).Count Then
isHide = True
Else: isHide = False
End If

'пропускаем ошибки
On Error Resume Next
'отключаем обновление и контроль событий
Application.ScreenUpdating = False
Application.EnableEvents = False

'снимаем текст в кнопке

'     ActiveSheet.Shapes("AutoShape 2").Select
'     strKnopka = Selection.Characters.Text
'     Range("A1").Activate

'отображаем все столбцы
If isHide = True Then
ActiveSheet.Range(Cells(, 1), Cells(1, Columns.Count)).EntireColumn.Hidden = False
strKnopka = "Скрыть столбцы"

'скрываем пустые столбцы в используемом диапазоне данных
Else: With ActiveSheet.UsedRange

iRow = .Row + .Rows.Count - 1
iClm = .Column + .Columns.Count - 1
.Range(Cells(1, 1), Cells(1, iClm)).EntireColumn.Hidden = False

For i = iClm To 1 Step -1

Set rng = Range(Cells(1, i), Cells(Rows.Count, i)).Find(What:="?*", LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False)

If rng Is Nothing Then .EntireColumn(i).Hidden = True

Next i

strKnopka = "Отобразить все"

End With

End If

'устанавливаем подпись кнопки
ActiveSheet.Shapes("AutoShape 2").Select
Selection.Characters.Text = strKnopka
Range("A1").Activate

Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

'--------------------------------
'Sub ShowAll()
'
'On Error Resume Next
'
'   Application.ScreenUpdating = False
'   Application.EnableEvents = False
'
'   Range("B3").ClearContents
'
'Range(Cells(7, 6), Cells(7, Columns.Count)).EntireColumn.Hidden = False
'
'  Application.EnableEvents = True
'  Application.ScreenUpdating = True
'
'End Sub
[/vba]

Автор - crash173
Дата добавления - 13.04.2022 в 08:33
crash173 Дата: Среда, 13.04.2022, 08:33 | Сообщение № 2
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

2007
исходник "post000" с макросом
К сообщению приложен файл: post_000.xls (50.0 Kb)
 
Ответить
Сообщениеисходник "post000" с макросом

Автор - crash173
Дата добавления - 13.04.2022 в 08:33
crash173 Дата: Среда, 13.04.2022, 08:34 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 16
Репутация: 0 ±
Замечаний: 0% ±

2007
исходник без макроса "post001"
К сообщению приложен файл: post_001.xlsx (13.5 Kb)
 
Ответить
Сообщениеисходник без макроса "post001"

Автор - crash173
Дата добавления - 13.04.2022 в 08:34
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Горизонтальный фильтр при помощи макроса (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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