在VBA中在指定的Excel工作表上查找单元格而不激活工作表

时间:2015-06-19 22:03:31

标签: excel vba excel-vba

我正在尝试在工作表“此工作表”上找到公式为“CAL JUMP INTENS”的单元格。以下代码有效。

worksheets("this worksheet").activate
Set target = Cells.Find(What:="CAL JUMP INTENS", After:=ActiveCell, _ LookIn:=xlFormulas, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True, SearchFormat:=False)

但是,我不想激活工作表“这个工作表”。有没有办法做到这一点?我需要将此单元格限定为此工作表“此工作表”而不是整个工作簿。

2 个答案:

答案 0 :(得分:3)

使用范围和工作表对象限定Set<Map.Entry<K, V>>方法:

Find()

在VBA中极其罕见,您需要Set target = Sheets("this worksheet").Cells.Find(What:="CAL JUMP INTENS", After:=ActiveCell, _ LookIn:=xlFormulas, _ LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=True, SearchFormat:=False) Activate任何事情。

答案 1 :(得分:2)

虽然SO提供了您的问题的答案,但这只是一个额外的信息 不要选择它作为答案。 :)

  1. 使用条款

    With Worksheets("SheetName")
        .Cells.Find(What:="CAL JUMP INTENS", _
                    After:=.Range("A1"), _ ' notice that this is referenced to your sheet
                    LookIn:=xlFormulas, _
                    LookAt:=xlWhole, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlNext, _
                    MatchCase:=True, _
                    SearchFormat:=False)
    End With
    
  2. 了解默认值
    如果您知道参数的默认值并且这是您需要的,那么也可能不明确它。您包含的上述参数都是默认值(LookAt除外),所以不如省略它们?当我说默认时,重启(第一次)时它是Excel设置。

    With Worksheets("SheetName")
        .Cells.Find(What:="CAL JUMP INTENS", _
                    After:=.Range("A1"), _
                    LookAt:=xlWhole)
    End With
    

    或者在您的情况下,您确实无需提供After参数(因为您正在搜索整个工作表)。所以,

    Worksheets("SheetName").Cells.Find("CAL JUMP INTENS", , , xlWhole)
    

    工作得很好。

  3. 重要:
    正如所指出的那样,LookInLookAtSearchOrder的查找方法的默认属性是HERE中指出的最后一次使用的设置。

      

    “了解每次使用Find方法时都会保存LookIn,LookAt和SearchOrder设置非常重要。因此,每次使用Find方法时都应该明确指定这些设置。如果你不要,你冒着使用你不知道的设置使用查找方法的风险。“