Скрыть строки на другом листе на основе группы ячеек, а затем распечатать - PullRequest
0 голосов
/ 15 января 2019

У меня есть 2 рабочих листа "Main" и "CheckList".

В рабочем листе «Основное» есть выборки в ячейках B14: B29 и E14: E21 (я имею в виду выборку, чтобы при активации этих ячеек они автоматически заполнялись знаком X). У меня также есть кнопка на странице с надписью «Печать»

Страница "Контрольный список" представляет собой контрольный список.

Я хочу, чтобы при нажатии кнопки с надписью «Печать» - отфильтровать / скрыть строки в «CheckList» в зависимости от того, какие поля выбраны на «основной» таблице - распечатайте «Контрольный список» на принтере по умолчанию.

Например, если Main B14 имеет X (могу ли я сделать его там, где он не чувствителен к регистру?), Строки 6-10 будут скрыты, если B15 имеет X, то строки 106-116 будут скрыты. Это будет разный набор строк для каждого X в диапазонах, которые я упомянул.

Мне также было любопытно, можно ли это сделать с помощью групп, чтобы кому-то было легче приходить за мной и добавлять элементы в контрольный список без изменения кода.

1 Ответ

0 голосов
/ 15 января 2019

Вот ваш пример: либо скрыть строки, либо сгруппировать их и показать уровень строки 1.

Если вы дадите имя (по формулам | Менеджеру имен) каждой соответствующей области в вашем контрольном списке, вы можете обменять Range("6:10") на Range("RowsToBeHiddenByB14"). Если кто-то позже добавит несколько строк в именованном диапазоне в контрольный список, код все еще работает - в противном случае он должен адаптировать диапазон этого имени в диспетчере имен Excel.

Private Sub HideOrGroupSomeRows()
    Dim MainSheet As Worksheet
    Dim CheckSheet As Worksheet

    Set MainSheet = ActiveWorkbook.Sheets("Main")
    Set CheckSheet = ActiveWorkbook.Sheets("CheckList")

    ' Either just hide the rows:
    CheckSheet.Range("6:10").EntireRow.Hidden = _
        StrComp(MainSheet.Range("B14").Value, "x", vbTextCompare) = 0
    CheckSheet.Range("106:116").EntireRow.Hidden = _
        StrComp(MainSheet.Range("B15").Value, "x", vbTextCompare) = 0

    ' Or group them and show rowlevel 1:
    CheckSheet.UsedRange.ClearOutline
    With CheckSheet.Outline
        .AutomaticStyles = False
        .SummaryRow = xlAbove
        .SummaryColumn = xlLeft
    End With
    If StrComp(MainSheet.Range("B14").Value, "x", vbTextCompare) = 0 Then _
        CheckSheet.Range("6:10").EntireRow.Group
    If StrComp(MainSheet.Range("B15").Value, "x", vbTextCompare) = 0 Then _
        CheckSheet.Range("106:116").EntireRow.Group
    CheckSheet.Outline.ShowLevels RowLevels:=1

    Set MainSheet = Nothing
    Set CheckSheet = Nothing
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...