Код VBA, чтобы скрыть количество фиксированных дискретных строк на нескольких листах - PullRequest
2 голосов
/ 05 января 2012

Я для решения части макроса, который я пишу, который будет скрывать определенные (фиксированные позиции) строки на нескольких разных листах. В настоящее время у меня есть:

Sheets(Sheet1).Range("5:20").EntireRow.Hidden = True

Чтобы скрыть строки 5-20 в Sheet1. Я также хотел бы скрыть (ради аргумента) строку 6, строку 21 и строки 35-38 на листе 2 - я мог бы сделать это, повторив вышеупомянутую строку кода еще 3 раза; но я уверен, что есть лучший способ сделать это, просто как учебное упражнение.

Любая помощь высоко ценится:)

Chris

Ответы [ 3 ]

5 голосов
/ 05 января 2012

Укажите Union некоторых диапазонов следующим образом

With Sheet1
    Union(.Range("1:5"), .Rows(7), .Range("A10"), .Cells(12, 1)).EntireRow.Hidden = True
End With
4 голосов
/ 05 января 2012

Вот попытка:

Sub hideMultiple()
    Dim r As Range
    Set r = Union(Range("A1"), Range("A3"))
    r.EntireRow.Hidden = True
End Sub

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

2 голосов
/ 05 января 2012

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

Я загружаю массив со строкой параметров, относящихся к моей текущей проблеме, и кодирую простой цикл для их реализации.Посмотрите объявления sub и функции и прочитайте раздел ParamArrays, чтобы узнать об этом подходе.

Option Explicit
Sub HideColumns()

  Dim InxPL As Integer
  Dim ParamCrnt As String
  Dim ParamList() As Variant
  Dim SheetNameCrnt As String

  ParamList = Array("Sheet1", 1, "5:6", "Sheet2", 9, "27:35")

  SheetNameCrnt = ""

  For InxPL = LBound(ParamList) To UBound(ParamList)
    ParamCrnt = ParamList(InxPL)
    If InStr(ParamCrnt, ":") <> 0 Then
      ' Row range
      Sheets(SheetNameCrnt).Range(ParamCrnt).EntireRow.Hidden = True
    ElseIf IsNumeric(ParamCrnt) Then
      ' Single Row
      Sheets(SheetNameCrnt).Range(ParamCrnt & ":" & _
                                          ParamCrnt).EntireRow.Hidden = True
    Else
      ' Assume Sheet name
      SheetNameCrnt = ParamCrnt
    End If
  Next

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