我试图通过多选列表框使用用户的输入来取消隐藏列。
我正在运行一个循环来查找是否有一个特定的条目被选中,并使用所选条目的值在一个范围内找到它,然后取消隐藏特定的列。
Private Sub CommandButton1_Click()
Dim sel As Range
Dim TagDump As Range
Dim strng As String
Dim lRow As Long
ThisWorkbook.Sheets("Tag Dump").Range("A:AQ").EntireColumn.Hidden = True
Set TagDump = ThisWorkbook.Sheets("Tag Dump").Range("A1:AR1")
With Me.ListBox1
For lRow = 0 To .ListCount - 1
If .Selected(lRow) Then
strng = .List(lRow, 0)
With TagDump
Set sel = .Find(What:=strng, after:=.Cells(1, 1))
Debug.Print sel.Column
sel.EntireColumn.Hidden = False
End With
End If
Next lRow
End With
End Sub
然而,当我运行它时,我得到错误91:对象变量或与块变量未设置。
我使用Debug.Print而不运行sel.Entirecolumn.Hidden来查找列的索引,每次都能正确地显示出来。但是,当我把它和该命令行一起运行时,我又得到了这个错误。
请让我知道是什么原因导致的,我如何纠正它。
谢谢你。
EDIT:对于第一个选定的值,这工作很好,我能够取消隐藏该列,但对于后续的值,它显示错误。
尝试不隐藏列,直到你已经执行了查找的 。
Private Sub CommandButton1_Click()
Dim sel As Range, rngVis As Range
Dim TagDump As Range
Dim strng As String
Dim lRow As Long, ws As Worksheet
Set ws = ThisWorkbook.Sheets("Tag Dump")
Set TagDump = ws.Range("A1:AR1")
With Me.ListBox1
For lRow = 0 To .ListCount - 1
If .Selected(lRow) Then
strng = .List(lRow, 0)
With TagDump
Set sel = .Find(What:=strng, after:=.Cells(1, 1))
If not sel is nothing then
Debug.Print strng, sel.Column
BuildRange rngVis, sel
End If
End With
End If
Next lRow
End With
ws.Range("A:AQ").EntireColumn.Hidden = True
If Not rngVis is nothing then rngVis.entirecolumn.hidden = false 'unhide matches
End Sub
Sub BuildRange(rngTot as Range, rngAdd As Range)
If rngTot is nothing then
Set rngTot = rngAdd
Else
Set rngTot = application.Union(rngTot, rngAdd)
End If
End Sub
这段代码将显示所有选中的列,并隐藏指定范围内的所有其他列。请尝试一下。
Private Sub CommandButton1_Click()
' 013
Dim Ws As Worksheet
Dim VisClm As String
Dim TagDump As Range
Dim C As Long
Set Ws = ThisWorkbook.Worksheets("Tag Dump")
Set TagDump = Ws.Range("A1:AR1")
With Me.ListBox1
For C = 0 To .ListCount - 1
If .Selected(C) Then VisClm = VisClm & .List(C, 0) & "|"
Next C
End With
Application.ScreenUpdating = False
With TagDump
For C = 1 To .Columns.Count
Ws.Columns(.Columns(C).Column).EntireColumn.Hidden _
= (InStr(1, VisClm, .Cells(1, C).Value, vbTextCompare) = 0)
Next C
End With
Application.ScreenUpdating = True
End Sub
我建立这段代码的前提是,TagDump范围内的标题与ListBox1中的项目相同(甚至是RowSource)。如果关系是另一种,则需要根据你工作表中的实际情况调整代码。