Функция Excel VBA для скрытия / отображения строк - PullRequest
0 голосов
/ 31 августа 2018

Я новичок в VBA / Macro. Мне нужна помощь, чтобы понять, как скрыть / показать строки в моем сценарии. Это мой стол:

См. Таблицу: введите описание изображения здесь

Я бы хотел сделать следующее:

1) Создайте функцию (или подраздел) с тремя аргументами:

  • FlagRange: flagRange или C1: C9
  • hideAction: True / False
  • Флаг: это одно из значений флага

Пример: Hide_Unhide (flagRange, True, "P")

2) Эта функция скрывает все строки, основанные на флаге, который передается в аргумент.

Любые предложения и образцы приветствуются.

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

Вы можете использовать следующее решение, чтобы скрыть / показать строки:

Function Hide_Unhide(flagRange As Range, hideAction As Boolean, Flag As String)
        For Each Row In flagRange.Rows
            If Row.Cells(3) = Flag Then
                Row.EntireRow.Hidden = hideAction
            End If
        Next Row
End Function
0 голосов
/ 31 августа 2018

Вот два варианта. Вторая подпрограмма будет быстрее, поскольку она будет скрывать все строки сразу, а также множество возможных итераций сокрытия строк. Чем больше количество строк будет скрыто, тем больше вы заметите экономии времени при использовании подхода Union

Option Explicit

Sub HideMe(FlagRange As Range, Flag As String)

FlagRange.EntireRow.Hidden = False
Dim FlagCell As Range

Application.ScreenUpdating = False
    For Each FlagCell In FlagRange
        FlagCell.EntireRow.Hidden = FlagCell = Flag 'Rows get hidden here
    Next FlagCell
Application.ScreenUpdating = True

End Sub

Option Explicit

Sub HideMeUnion(FlagRange As Range, Flag As String)

FlagRange.EntireRow.Hidden = False
Dim FlagCell As Range, HideMe As Range

For Each FlagCell In FlagRange
    If FlagCell = Flag Then
        If HideMe Is Nothing Then
            Set HideMe = FlagCell
        Else
            Set HideMe = Union(HideMe, FlagCell)
        End If
    End If
Next FlagCell

'rows gettin hidden here all at once
If Not HideMe Is Nothing Then HideMe.EntireRow.Hidden = True

End Sub
0 голосов
/ 31 августа 2018

Попробуйте это:

Private sub Hide_Unhide(FlagRange as Range, Hide as Boolean, FlagValue as String)
Dim c as Variant
    For Each c in FlagRange
           c.EntireRow.Hidden = False
    Next c
    For Each c in FlagRange
        If c.Value2 = FlagValue Then
           c.EntireRow.Hidden = Hide
        End IF
    Next c
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...