使用选定的列表框值动态隐藏/显示列

时间:2012-07-17 13:58:27

标签: excel vba listbox controls userform

我可以在excel中使用多选列表框形式的帮助,必须通过VBA完成,表格的值是jan-june的月份,如下所示。

  • JAN
  • FEB
  • MARCH
  • APRIL
  • MAY
  • JUNE

如果选择Jan,我想要列,e到h显示。 如果未选择Jan,则隐藏列e到h。

JAN - (COLUMNS E-H)
FEB - (COLUMNS I-M)
3月 - (COLUMNS N-R)
4月 - (COLUMNS S-W)
MAY - (COLUMNS X-AB)
6月 - (COLUMNS AC-AG)

1 个答案:

答案 0 :(得分: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

选择/选择对清楚地表明我可以连接这两行。我缩短了这样的代码:

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