Скрыть строки Код VBA ячеек, не содержащих слов из-за несоответствия массива - PullRequest
0 голосов
/ 09 июля 2020

В основном у меня есть код vba, который работает очень хорошо. Но когда я пытаюсь скопировать его на другую командную кнопку, просто меняя имя листа и дополнительное имя, он не работает, и появляется сообщение «Несоответствие типов». Это код VBA, который работает правильно.

    Sub hide_Rows_by_cell_value()
    Dim wb As Workbook, CompInfo As Worksheet, MufgClient As Worksheet
    Dim srcCl As Range, lr As Long, FltCol As Range, cl As Range, hideRng As Range
    Set wb = ThisWorkbook
    Set CompInfo = wb.Sheets("Company Information")
    Set MufgClient = wb.Sheets("MUFG Client")
    
    Set srcCl = CompInfo.Cells(18, 9)
    arr = Split(srcCl.Value, ",")
    
    lr = MufgClient.Range("AC" & MufgClient.Rows.Count).End(xlUp).Row
    Set FltCol = MufgClient.Range("AC3:AC" & lr) '2nd Row contains table headers
    
    For Each cl In FltCol
        chk = 0
        For i = 0 To UBound(arr)
        chk = chk + InStr(1, cl.Value, Trim(arr(i)), vbTextCompare)
        Next
        If chk = 0 Then
            If hideRng Is Nothing Then
            Set hideRng = cl
            Else
            Set hideRng = Union(hideRng, cl)
            End If
        End If
    Next
    
    hideRng.EntireRow.Hidden = True
    
    End Sub

А это код VBA, который говорит о несоответствии типов

  Sub hide_rows_by_cell_value2()
  Dim wb As Workbook, MUFGInfo As Worksheet, LendingFunding As Worksheet
  Dim srcCl As Range, lr As Long, FltCol As Range, cl As Range, hideRng As Range
  Set wb = ThisWorkbook
  Set MUFGInfo = wb.Sheets("MUFG Information")
  Set LendingFunding = wb.Sheets("Lending & Funding")

  Set srcCl = MUFGInfo.Cells(18, 9)
  arr = Split(srcCl.Value, ",")

  lr = LendingFunding.Range("AC" & LendingFunding.Rows.Count).End(xlUp).Row
  Set FltCol = LendingFunding.Range("AC3:AC" & lr) '2nd Row Contains table headers

  For Each cl In FltCol
    chk = 0
    For i = 0 To UBound(arr)
    chk = chk + InStr(1, cl.Value, Trim(arr(i)), vbTextCompare)
    Next
    If chk = 0 Then
        If hideRng Is Nothing Then
        Set hideRng = cl
        Else
        Set hideRng = Union(hideRng, cl)
        End If
    End If

  Next

  hideRng.EntireRow.Hidden = True

  End Sub

Несоответствие находится в

chk = chk + InStr(1, cl.Value, Trim(arr(i)), vbTextCompare)

Я уже проверил ячейку, и она все еще верна 18,9 (строка 18, столбец i). Я также делаю диапазон таким же, как и в первом коде vba, поскольку содержимое листа представляет собой скопированную пасту с предыдущего листа.

Любая помощь будет принята с благодарностью.

Заранее большое спасибо.

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Приведенный выше код работает, если данные в вашем листе не содержат # N / A, потому что ошибка находится в cl.Value, который равен Error = 2042. Замените все # N / A (s) только на 0.

1 голос
/ 09 июля 2020

Из комментариев кажется, что у вас есть ошибка в диапазоне, который вы проверяете (столбец «A C»)

Вы можете скрыть ошибки в цикле проверки, добавив завернутую проверку ошибок вокруг кода в l oop:

  For Each cl In FltCol
    If Not IsError(cl) Then
      chk = 0
      For i = 0 To UBound(arr)
        chk = chk + InStr(1, cl.Value, Trim(arr(i)), vbTextCompare)
      Next
      If chk = 0 Then
        If hideRng Is Nothing Then
          Set hideRng = cl
        Else
          Set hideRng = Union(hideRng, cl)
        End If
      End If
    End If

  Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...