Arrays 从数组不匹配中隐藏不包含字的单元格的VBA代码行
基本上,我有一个运行非常好的vba代码。但是,当我尝试将其复制到另一个命令按钮时,仅更改工作表名称和子名称,它不起作用,并且显示类型不匹配。这是正确运行的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
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再次非常感谢。