Excel VBA使单元格在指定范围内处于活动状态

时间:2018-06-27 15:50:27

标签: excel vba excel-vba

当初始活动单元格(-15.0)中的值也是指定范围内的值时,我不确定下面的代码为什么会给出“未找到”消息。

Sub Test()
Dim c As Double
Dim srchRng As Range
With ActiveWorkbook.ActiveSheet
    c = ActiveCell.Select
    Set srchRng = .Range("V17:V37").Find(what:=c)
    If srchRng Is Nothing Then
        MsgBox "Not found"
    End If
End With
End Sub

请注意,有时在指定范围内存在0值。如果是这样,我不需要做任何事情,但是如果0不存在,那么我首先需要找到最小的负值(我在工作表=MAX(IF(V17:V37<=0,V17:V37),MIN(V17:V37))中单独使用,这成为我的初始活动单元格值[例如-15.0 ]在指定范围内查找),然后将此最小负值设置为零(通过在此单元格中使用目标搜索功能)

因此,此宏最终将包含一个If语句或有条件的lookup

任何反馈表示赞赏。

我进行了建议的更改,但下面的修订代码仍返回“未找到”。 单元格V38的值为-15.0,但是此数字确实出现在范围V17:V37中。 这个简单的宏应导致该单元格处于与所选c值相对应的范围内。任何进一步的帮助表示赞赏。

Dim c As Double
Dim srchRng As Range
With ThisWorkbook.Sheets("Reel_Pack")
c = Range("V38")
Set srchRng = .Range("V17:V37").Find(what:=c)
If srchRng Is Nothing Then
    MsgBox "Not found"
End If
End With
End Sub

我发现以下代码可以完成上述操作。

    Dim c As Double
    c = ThisWorkbook.Sheets("Sheet1").Range("V58").Value
    Dim cel As Range
    For Each cel In ThisWorkbook.Sheets("Sheet1").Range("V17:V57")
        With cel
            If .Value = c Then
                .Select
            End If
        End With
    Next cel
    End Sub

但是有人可以建议如何通过在此宏中实际合并我在单元格V58中拥有的方程式来改善此问题吗?如前所述,等式为=MAX(IF(V17:V37<=0,V17:V37),MIN(V17:V37))

因此宏将查找范围V17:V37,如果存在精确的零,则“不执行任何操作”,否则找到负数最小的单元格(这是上面的方程式所做的),然后选择该单元格。

1 个答案:

答案 0 :(得分:0)

我希望这是正确的原因:

c = ActiveCell.Select返回的值-1等于VBA中的TRUE

所以,我认为,该行在询问问题c = ActiveCell is Selected?,该问题返回布尔TRUE / FALSE转换为等于-1的双精度值。

c = ActiveCell返回ActiveCell的默认属性Value

因此该行应读为c = ActiveCellc = ActiveCell.Value而不是c = ActiveCell.Select

修改:
现在不太确定我的理由-c= Range("A1").Select选择单元格A1并仍返回-1。
我想这就是为什么您应该避免像瘟疫那样Select,除非您想实际选择一个单元格而不只是引用它。阅读How to avoid using Select in Excel VBA