Range.Find方法给出的结果不一致

时间:2019-07-17 17:17:48

标签: excel vba find

我已经开发了一个例程,该例程循环遍历工作簿/工作表,在列中找到最大值,将相应单元格的值写入主工作簿,然后重复。在此例程中,有一行代码使用Range.Find方法设置最大值在列中的位置。我遇到了一些表返回错误的问题,这些问题暂时只通过在主工作簿中的“ BreakVoltCell”单元格中写入“ Error”来处理。错误看似随机发生,有时会在工作簿中处理一张纸,而在下一个工作纸上却失败,但是每次运行都使用同一张纸,因此我相信是有原因的。代码如下:

'Get breakdown voltage
Dim rngSlope As Range
Set rngSlope = CurrentFile.Sheets(SheetName).Range("E2:E" & _ 
Sheets(SheetName).Cells.SpecialCells(xlCellTypeLastCell).Row)

Dim BreakVoltSlope As Double
BreakVoltSlope = WorksheetFunction.Max(rngSlope)

Dim BreakVoltLoc As Range
Set BreakVoltLoc = rngSlope.Find(BreakVoltSlope, Sheets(SheetName).Range("E2"), _ 
xlFormulas, xlPart, xlByRows, xlNext, False, False, False)

Dim BreakVolt As Double
BreakVolt = BreakVoltLoc.Offset(0, -3).Value
BreakVoltCell.Value = BreakVolt
Set BreakVoltCell = BreakVoltCell.Offset(1, 0)

通过基本调试,并使用了一些行号规范和错误行输出,我已经确认是find方法无法返回范围。我在几个论坛上读过,为该方法指定所有参数可以缓解这种情况,因为许多参数可以在运行时更改,并在下一个循环中以更改后的状态重新使用。但是,尝试了该错误之后,错误仍然存​​在,同时更改了这些参数,我还觉得奇怪的是,对xlValues不能使用xlFormulas作为LookIn参数可以工作(所有工作表都返回了错误,而不仅仅是返回了一些错误)。为了进一步调试,我在错误处理程序中放置了一个断点,并使用即时窗口测试了持有最大值“ BreakVoltSlope”的变量与测试范围中我知道最大值为最大值的单元之间的逻辑等效性。 BreakVoltSlope和单元格公式之间的测试返回FALSE,而BreakVoltSlope和单元格值之间的测试返回TRUE,这立即引起了问题,因为正如我之前提到的在LookIn参数中使用xlValues失败。更令人困惑的是,此后,我在工作正常的工作表之后进行了相同的测试,发现公式比较再次返回FALSE,值比较返回TRUE!

我觉得我必须从根本上误解Find方法的工作原理,逻辑比较不仅表明我的代码在将xlFormulas用作搜索区域时不应该工作,而且还建议在使用xlFormulas作为搜索区域时它应该工作没有。相反,使用xlFormulas时,它适用于> 90%的图纸,但不是全部。如果有人对这种不一致的根源有深刻的了解,我很好奇!如果我可以提供更多详细信息,请告诉我。

0 个答案:

没有答案