Использование выбранного значения списка для динамического скрытия/отображения столбцов

Я мог бы использовать некоторую помощь с формой списка с множественным выбором в excel, которая должна быть выполнена через VBA, значения форм - месяцы с января по июнь, как показано ниже.

  • ЯНВАРЬ
  • февраль
  • МАРТ
  • АПРЕЛЬ
  • МАЯ
  • ИЮНЬ

Например, если выбран Ян, я бы хотел, чтобы отображались столбцы от e до h. Если Ян не выбран, столбцы с e по h будут скрыты.

ЯНВАРЬ - (СТОЛБЦЫ E-H)
ФЕВ - (СТОЛБЦЫ I-M)
МАРТ - (СТОЛБЦЫ N-R)
АПРЕЛЬ - (СТОЛБЦЫ S-W)
МАЙ - (СТОЛБЦЫ X-AB)
ИЮНЬ - ( КОЛОННЫ AC-AG)


person user1422641    schedule 17.07.2012    source источник


Ответы (1)


Добро пожаловать в Stack Overflow. Иногда макрорекордер — ваш друг.

Я записал макрос, скрывающий столбцы от E до H. Вот записанный код:

Sub Macro1()
'
' Macro1 Macro
' Macro recorded 7/17/2012 by Jimmy Peña
'

'
    Columns("E:H").Select
    Selection.EntireColumn.Hidden = True
End Sub

Пара Select/Selection — явное указание на то, что я могу объединить эти две строки. Я сокращаю код следующим образом:

Columns("E:H").EntireColumn.Hidden = True

Поскольку свойство принимает значение True, я знаю, что могу скрыть столбцы, установив значение True, и отобразить столбцы, установив значение False.

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

Я добавил список в образец пользовательской формы. Этот код будет выборочно скрывать/показывать в зависимости от выбранного значения.

Private Sub ListBox1_Click()

  Dim selectedValue As String

  ' get selected value from listbox
  selectedValue = ListBox1.value

  Application.ScreenUpdating = False

  ' unhide any columns
  Cells.EntireColumn.Hidden = False

  Select Case selectedValue
  Case "JAN"
    Columns("E:H").EntireColumn.Hidden = True
  Case "FEB"
    Columns("I:M").EntireColumn.Hidden = True
  Case "MARCH"
    Columns("N:R").EntireColumn.Hidden = True
  Case "APRIL"
    Columns("S:W").EntireColumn.Hidden = True
  Case "MAY"
    Columns("X:AB").EntireColumn.Hidden = True
  Case "JUNE"
    Columns("AC:AG").EntireColumn.Hidden = True
  End Select

  Application.ScreenUpdating = True

End Sub
person JimmyPena    schedule 17.07.2012
comment
Использует ли ваше решение обычный элемент управления формой или элемент управления формы ActiveX? - person user1422641; 17.07.2012
comment
@user1422641 user1422641 Это список в пользовательской форме VBA, но его не нужно долго адаптировать для использования с любым другим типом элемента управления Listbox. - person JimmyPena; 17.07.2012