我遇到过我写的VBA宏的问题,其中的部分旨在找到范围内的最低值。这条线看起来像这样:
Min = Application.WorksheetFunction.Min(a0eqB)
Set MinCell = a0eqB.Find(Min, LookIn:=xlValues)
它返回Object variable or With block variable not set
错误。现在,我知道为什么会发生这种情况 - 有时Find
找到Nothing
,我学会了如何处理这种情况。虽然,当单元格中 dispayed 的值与Nothing
变量中的值不同时,它也会找到Min
。
例如,当Min = -11.2641373534338
时,单元格中的值为-11.264137
,然后发生错误。但是,如果我通过Excel UI按钮更改为该单元格显示的小数位数,直到它为-11.2641373534338
,一切正常。如果有帮助,单元格中的值实际上是公式计算结果。
我认为有两种方法可以解决这个问题:
Find
函数使用实际和未显示的数字,但我不知道如何做到这一点。我用谷歌搜索了几天但仍然没有成功。我真的很感谢你的帮助。
答案 0 :(得分:1)
至少有两个可能的问题:
例如:
Sub GetLowest()
Dim wf As WorksheetFunction
Set wf = Application.WorksheetFunction
Dim rng As Range, Lowest As Double, WhereIs As Range
Set rng = Range("A1:F9")
Lowest = wf.Min(rng)
Set WhereIs = rng.Find(What:=Lowest, After:=rng(1))
MsgBox WhereIs.Address
End Sub
运行时:
无论格式如何,
都能轻松找到 B2 。
答案 1 :(得分:0)
查看负数问题并将其与find函数一起使用;一种可能的解决方案是格式化您的搜索范围和数字,以找到相同的数字格式。 (根据@ Gary' s学生提供的代码)
代码如下。
如果您不想更改电子表格中的数字格式,那么进一步的黑客就是制作工作表的副本以格式化并找到地址,然后删除副本并使用原始地址表格,但这将涉及更多的编码...
Sub GetLowest()
Dim sFormat As String: sFormat = "0.000000000"
Dim wf As WorksheetFunction: Set wf = Application.WorksheetFunction
Dim rng As Range: Set rng = Range("MinRange")
rng.NumberFormat = sFormat
Dim Lowest As Double: Lowest = Format(wf.Min(rng), sFormat)
Dim WhereIs As Range: Set WhereIs = rng.Find(What:=Lowest)
MsgBox WhereIs.Address
End Sub