Использование метода Find для отображения столбцов - PullRequest
0 голосов
/ 27 апреля 2020

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

Я запускаю al oop, чтобы выяснить, была ли выбрана конкретная запись, и используя значение выбранной записи. чтобы найти его в диапазоне и затем отобразить определенный столбец.

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: переменная объекта или переменная блока не задана.

I Я использую Debug.Print без запуска sel.Entirecolumn.Hidden, чтобы узнать индекс столбца, и он правильно показывает меня каждый раз. Но когда я запускаю его вместе с этой командной строкой, я снова получаю сообщение об ошибке.

Пожалуйста, дайте мне знать, что вызывает это и как я могу это исправить.

Спасибо.

РЕДАКТИРОВАТЬ: Это нормально работает для первого выбранного значения, и я могу показать этот столбец, но для последующих значений, он показывает ошибку.

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Этот код покажет все выбранные столбцы и скроет все остальные в указанном диапазоне. Пожалуйста, попробуйте.

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 идентичны (даже RowSource) элементам в ListBox1. Если отношения другого рода, код должен быть адаптирован к реальности в вашей рабочей таблице.

0 голосов
/ 27 апреля 2020

Старайтесь не скрывать столбцы, пока не выполните поиск:

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    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...