【问题标题】:Excel VBA Make Cell Active in a Specified RangeExcel VBA使单元格在指定范围内处于活动状态
【发布时间】:2018-06-27 15:50:27
【问题描述】:

当初始活动单元格 (-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 范围,如果有一个精确的零,则不执行任何操作,否则找到具有最小负数的单元格(这是上面的等式所做的)并选择该单元格。

【问题讨论】:

标签: vba excel


【解决方案1】:

我希望这是正确的原因:

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

【讨论】:

  • 达伦非常感谢。您提到的那条线的两次更改都没有产生任何影响。我之前玩过。
猜你喜欢
  • 1970-01-01
  • 2012-08-17
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 2015-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多