我正在制作一个'仪表板'在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
知道它可能是什么吗?
答案 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