【发布时间】:2017-01-16 14:52:53
【问题描述】:
我已经阅读了几个小时的相关主题,但似乎找不到解决方案。非常感谢您的帮助,谢谢。
我试图找到一个范围内的最大值,然后找到它在哪一行。 这段代码适用于我的前 600 多行数字,然后崩溃并给我运行时错误 91。它似乎总是在同一个地方崩溃,与我所做的无关。
Dim rSearchRange As Range
Dim dMaxToFind As Double
Dim rSolutionrange As Range
Set rSearchRange = Sheets("MySheet").Range(Cells(672, 1), Cells(681, 1))
With Application.WorksheetFunction
dMaxToFind = .Max(rSearchRange)
End With
'This bit here returns "nothing" even though i found the max value in this range
Set rSolutionrange = rSearchRange _
.Find(What:=dMaxToFind, _
LookIn:=xlFormulas, LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, MatchCase:=False)
查看我的数据,这些行中的格式似乎发生了变化?
Row 670 - 0.000458587
Row 671 - 0.000458587
Row 672 - 9.80465E-05
Row 673 - 9.80465E-05
编辑:
dMaxToFind 返回 9.80465352566588E-05
单元格公式返回 0.0000980465352566588
Range(Cells(672, 1), Cells(681, 1) 之间的单元格中的值相同
似乎 vba 无法理解这两个是相同的?
谢谢,
标记
【问题讨论】:
-
试试
... LookIn:=xlValues... -
如果搜索条件不匹配,
.Find将返回Nothing。当您稍后使用rSolutionRange对象变量并假设它设置为有效引用时,错误 91 被引发(不是“返回”)(Nothing不是有效的对象引用) - 您需要在使用之前检查If rSolutionRange Is Nothing。 -
如果
Sheets("MySheet")不是活动工作表,Sheets("MySheet").Range(Cells(672, 1), Cells(681, 1))也会爆炸,因为Cells(xxx, yyy)调用隐含地引用ActiveSheet,所以你也需要限定这些调用;使用With Worksheets("MySheet"),然后在With块内执行Set rSearchRange = .Range(.Cells(672, 1), .Cells(681,1))(注意点)。 -
谢谢大家,还是没有运气。
-
user3598756 - 似乎没有改变结果 Mat's Mug - 我尝试了各种方法来调用范围的行或直接使用行而不使用范围。该范围不返回任何内容,因此该行返回错误 91。我也合并了工作表(“MySheet”),但没有运气
标签: vba excel find runtime-error max