隐藏不包含来自数组不匹配的单词的单元格的行VBA代码

时间:2020-07-09 06:51:25

标签: arrays excel vba show-hide autofilter

基本上,我有一个运行良好的vba代码。但是,当我尝试将其复制到另一个命令按钮,只是更改工作表名称和子名称时,它不起作用,并显示Type Mismatch。这是可以正常运行的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 个答案:

答案 0 :(得分:1)

从评论看来,您正在检查的范围内存在错误(列“ AC”)

您可以通过在循环中的代码周围添加一个错误检查来掩盖检查周期中的错误:

  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

答案 1 :(得分:1)

如果工作表中的数据不包含#N / A(因为错误在cl.Value中,即Error = 2042),则上面的代码将正常工作。仅用0替换所有#N / A。 >