基本上,我有一个运行良好的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代码相同,因为工作表内容是来自上一个工作表的复制粘贴
任何帮助将不胜感激。
非常感谢您。
答案 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。 >