使用 Find 方法取消隐藏列
Using Find method to Unhide columns
我正在尝试使用用户通过多选列表框输入的内容来取消隐藏列。
我正在 运行循环以查明是否已选择特定条目,并使用所选条目的值在范围内找到它,然后取消隐藏特定列。
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:未设置对象变量或块变量。
我在不使用 运行ning sel.Entirecolumn.Hidden 的情况下使用 Debug.Print 来查找列的索引,它每次都正确地显示给我。但是,当我 运行 它与该命令行一起使用时,我再次收到错误。
请告诉我是什么原因造成的,我该如何纠正。
谢谢。
编辑:这对于第一个选定值工作正常,我能够取消隐藏该列,但对于后续值,它显示错误。
在执行查找之前尽量不要隐藏列:
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)。如果是另一种关系,则需要根据工作表中的实际情况调整代码。
我正在尝试使用用户通过多选列表框输入的内容来取消隐藏列。
我正在 运行循环以查明是否已选择特定条目,并使用所选条目的值在范围内找到它,然后取消隐藏特定列。
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:未设置对象变量或块变量。
我在不使用 运行ning sel.Entirecolumn.Hidden 的情况下使用 Debug.Print 来查找列的索引,它每次都正确地显示给我。但是,当我 运行 它与该命令行一起使用时,我再次收到错误。
请告诉我是什么原因造成的,我该如何纠正。
谢谢。
编辑:这对于第一个选定值工作正常,我能够取消隐藏该列,但对于后续值,它显示错误。
在执行查找之前尽量不要隐藏列:
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)。如果是另一种关系,则需要根据工作表中的实际情况调整代码。