Arrays 从数组不匹配中隐藏不包含字的单元格的VBA代码行

Arrays 从数组不匹配中隐藏不包含字的单元格的VBA代码行,arrays,excel,vba,show-hide,autofilter,Arrays,Excel,Vba,Show Hide,Autofilter,基本上,我有一个运行非常好的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 Ran

基本上,我有一个运行非常好的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代码的范围相同,因为图纸内容是上一张图纸的复制粘贴

任何帮助都将不胜感激


提前非常感谢。

从评论中可以看出,您正在检查的范围内似乎有一个错误(“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

从评论中可以看出,您正在检查的范围内似乎有一个错误(列“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

如果工作表中的数据不包含#N/A,则上述代码有效,因为错误在cl.值中,即错误=2042。将所有N/A仅替换为0。

如果工作表中的数据不包含N/A,则上述代码有效,因为错误在cl.值中,即错误=2042。将所有不适用项仅替换为0。

完全正确,因此您的问题是
cl.Value
-这是不匹配错误的根源!它无法将错误与字符串值“Logistics”进行比较,因此您需要找出范围
LendingFunding.range(“AC3:AC”&lr)
中的哪个位置,而不是实际值。由于
LendingFunding.range(“AC3:AC”&lr)
您的代码正在范围“AC3”中循环到“AC”的最后一行-某个地方有一个错误,而不是一个值。@jamheadart我已经知道答案了。这是因为谷歌的错误2042与“N/A”有关。我在贷款和融资表中的数据仍然包含一些“N/A”。我用0替换了所有的N/A,它可以正常工作。谢谢你这么多果酱,没有你也做不到:)干得好!我发布了一个答案,这意味着您可以忽略专栏中的错误,但我认为实际上消除这些错误要容易得多。玩得开心@杰姆哈特没有你们我什么都不是。我只是一个在一家公司使用Macro Excel进行项目的孩子:D再次非常感谢。是的,确实如此,因此您的问题是
cl.Value
-这是不匹配错误的根源!它无法将错误与字符串值“Logistics”进行比较,因此您需要找出范围
LendingFunding.range(“AC3:AC”&lr)
中的哪个位置,而不是实际值。由于
LendingFunding.range(“AC3:AC”&lr)
您的代码正在范围“AC3”中循环到“AC”的最后一行-某个地方有一个错误,而不是一个值。@jamheadart我已经知道答案了。这是因为谷歌的错误2042与“N/A”有关。我在贷款和融资表中的数据仍然包含一些“N/A”。我用0替换了所有的N/A,它可以正常工作。谢谢你这么多果酱,没有你也做不到:)干得好!我发布了一个答案,这意味着您可以忽略专栏中的错误,但我认为实际上消除这些错误要容易得多。玩得开心@杰姆哈特没有你们我什么都不是。我只是一个在一家公司用Macro Excel进行项目的孩子:D再次非常感谢。