列表框选择隐藏/取消隐藏对应列

时间:2017-10-23 15:53:11

标签: vba listbox

我在Column" A"中有动态行。在Sheet1上填充列表框选择表单。

IOException

现在在我的Sheet2上,我将这些数据转换为第B2行:

111
222
333
444
....

我想在列表框中选择任何项目,代码隐藏对应列。如果我在列表框中选择111和333,它会隐藏整个列" A"和" C"。 希望它有意义。确定按钮应该运行代码。

111 | 222 | 333 | 444 | ...

2 个答案:

答案 0 :(得分:0)

如果我理解正确,这就是你所需要的:

Private Sub ListBox1_Change()
  Dim sh1 As Worksheet
  Dim i As Integer, hdn as string
  Set sh1 = ActiveWorkbook.Sheets("Sheet2")
  hdn = "Hidden columns: "

  For i = 0 To Me.ListBox1.ListCount - 1
    If Me.ListBox1.Selected(i) = True Then
      sh1.Columns(i + 1).Hidden = True
      hdn = hdn & ListBox1.List(i, 0) & ", "
    Else
      sh1.Columns(i + 1).Hidden = False
    End If
  Next
  Sheet1.Cells(4, 4).Value = Left(hdn, Len(hdn) - 2)
End Sub

答案 1 :(得分:0)

我为你做了一个新的答案,因为编辑使另一个怪物变成了怪物。 代码现在包括查找列实际位置。 您需要添加一行来清除从D4开始的先前条目,因为如果前一个列表更长,则一些条目将保留在那里。如果找不到col,你还需要错误捕获。

Private Sub ListBox1_Change()
  Dim sh2 As Worksheet
  Dim i As Integer, hdn2 as string
  Dim hdn3 as Variant, col as long, header as Range
  Set sh2 = ActiveWorkbook.Sheets("Sheet2")
  Set header = sh2.Range("2:2")

  For i = 0 To Me.ListBox1.ListCount - 1
    col = Application.WorksheetFunction.Match(ListBox1.List(i, 0), header, 0)
    If Me.ListBox1.Selected(i) = True Then
      sh2.Columns(col).Hidden = True
      hdn2 = hdn2 & ListBox1.List(i, 0) & ","
    Else
      sh2.Columns(col).Hidden = False
    End If
  Next
  hdn3 = Split(Left(hnd2, Len(hdn2) - 1), ",")
  Sheet1.Range(Sheet1.Cells(4, 4), Sheet1.Cells(4 + UBound(hdn3), 4)).Value = Application.Transpose(hdn3)
End Sub