VBA Excel:由于字符太多导致运行时错误13类型不匹配

时间:2016-08-16 16:35:43

标签: excel-vba vba excel

我正在制作一个'仪表板'在excel中,用户可以选择商品然后按下运行按钮,然后代码打印出与该商品相关联的所有供应商。 (多个商品和供应商名称列在同一工作簿的其他选项卡上,代码遍历所有选项卡以收集正确的供应商名称)

编辑:问题是由于供应商名称超过255个字符。

调试器特别关注此代码:

If Application.Evaluate("COUNTIF(" & myDataRng.Address & "," & cell.Address & ")") > 1 Then
    cell.Offset(0, 0).Font.Color = vbRed
End If

此代码是下面较大集的一部分。该代码突出显示在不同选项卡中所选类别下列出的所有供应商名称(因此它们将被多次打印出来,我想突出显示重复的值)。

'##### Find duplicates in commodity column and highlight them ######

Dim myDataRng As Range
Dim cell As Range

Set myDataRng = Range("E10:E" & Cells(Rows.Count, "E").End(xlUp).Row)

For Each cell In myDataRng
    cell.Offset(0, 0).Font.Color = vbBlack


    If Application.Evaluate("COUNTIF(" & myDataRng.Address & "," & cell.Address & ")") > 1 Then
        cell.Offset(0, 0).Font.Color = vbRed
    End If
Next cell

知道它可能是什么吗?

2 个答案:

答案 0 :(得分:1)

错误并不是很明显。我对代码做了一些调整,但这应该可以让你看到被评估的内容。通常情况下,您从未使用正确格式输入的公式中获得此错误,但它在我的结束时起作用。

我删除了Offset(0,0),因为它目前是多余的,没有应用偏移,以及将vbBlack格式放在Else块中以提高性能/清晰度。

但是,查看Debug.Print语句对于理解代码何时无法运行至关重要。我唯一的另一个想法是,你可能想要澄清这个Countif正在完成的工作表。

<强>更新

我修改了我的答案,使用SumProduct而不是CountIf来解决255个字符是CountIf限制的问题。

Public Sub TestSub()
    Dim myDataRng       As Range
    Dim cell            As Range
    Dim EvalStr         As String

    Set myDataRng = Range("E10:E" & Cells(Rows.Count, "E").End(xlUp).Row)

    For Each cell In myDataRng
        EvalStr = "SumProduct((" & myDataRng.Address & "=" & cell.Address & ")+0)"
        If Application.Evaluate(EvalStr) > 1 Then
            cell.Font.Color = vbRed
        Else
            cell.Font.Color = vbBlack
        End If
    Next cell
End Sub

答案 1 :(得分:0)

更改行:

If Application.Evaluate("COUNTIF(" & myDataRng.Address & "," & cell.Address & ")") > 1 Then

使用:

 If Application.Evaluate("COUNTIF(" & myDataRng.Address & "," & cell.Address & " > 1 )") Then