如何指定要与find / with一起使用的工作表

时间:2019-02-05 14:51:18

标签: excel vba

我想在某个表(wsCaseinfo)中的范围A1-A99中搜索“概述”一词。我在“ with”行上收到1004错误。

该代码是使用2个不同文件中的3个不同工作表的较大代码的一部分。代码循环遍历100个文件,因此可以体会到一些有效的知识。非常感谢您的帮助。

With wsCaseinfo.Range(Cells(1, 1), Cells(99, 1))
    Set cellx = .Find(what:="Overview", LookAt:=xlPart)
End With

5 个答案:

答案 0 :(得分:6)

您需要在Cells()后面加上父表:

With wsCaseinfo.Range(wsCaseinfo.Cells(1, 1), wsCaseinfo.Cells(99, 1))

否则,Cells()将引用活动工作表,而不是与Range()相同的工作表。

您也可以将With嵌套在前一个With

With wsCaseinfo
    With .Range(.Cells(1, 1), .Cells(99, 1))
        Set cellx = .Find(what:="Overview", LookAt:=xlPart)
    End With
End With

答案 1 :(得分:1)

With Sheets("wsCaseinfo").Range(Sheets("wsCaseinfo").Cells(1, 1), Sheets("wsCaseinfo").Cells(99, 1))
    Set cellx = .Find(What:="Overview", LookAt:=xlPart)
End With

三种引用图纸的四种方式:

  1. 名称(如上)

  2. 索引(例如Sheets(4)

  3. 代号(例如Sheet4

  4. 使用变量,例如

    Dim MySheet As Worksheet
    Set MySheet = ThisWorkbook.Worksheets("Sheet4")
    

    然后使用

    MySheet.Cells()
    

答案 2 :(得分:0)

您可以尝试:

编辑版本

Option Explicit

Sub test()

    Dim rngToSearch As Range
    Dim Result As Range

    Set rngToSearch = wsCaseinfo.Range("A1:A99")

    Set Result = rngToSearch.Find(What:="Overview", LookIn:=xlValues, LookAt:=xlWhole)

    If Not Result Is Nothing Then
        MsgBox "The word ""Overview"" appears in:" _
            & vbNewLine & "Row " & Result.Row _
            & vbNewLine & "Column " & Result.Column _
            & vbNewLine & "Address " & Result.Address
    Else
        MsgBox "The word ""Overview"" does not exist in range " & rngToSearch.Address & "."
    End If

End Sub

答案 3 :(得分:0)

如果您使用Cells(),则必须符合条件。相反:

Sub luxation()
    Dim cellx As Range, wsCaseinfo As Worksheet
    Set wsCaseinfo = Sheets("Sheet1")

    With wsCaseinfo.Range("A1:A99")
        Set cellx = .Find(what:="Overview", LookAt:=xlPart)
        MsgBox cellx.Address
    End With
End Sub

enter image description here

更改Set语句以适合您的需求。

答案 4 :(得分:0)

在工作表中查找

最短

With wsCaseInfo
    Set cellx = .Range("A1:A99").Find("Overview", , xlValues, xlPart)
End With

With wsCaseInfo

    Set cellx = .Range("A1:A99").Find("Overview", , xlValues, xlPart)

    If Not cellx Is Nothing Then
        Debug.Print cellx.Address
      Else
        Debug.Print "Cell range not found."
    End If

End With

Sub FindInWorksheet()

    Const cSheet As String = "Sheet1"

    Dim wsCaseInfo As Worksheet
    Dim cellx As Range

    Set wsCaseInfo = ActiveWorkbook.Worksheets(cSheet)

    With wsCaseInfo
        ' Full
        'Set cellx = .Range("A1:A99").Find("Overview", .Range("A99"), _
                xlValues, xlPart, xlByColumns, xlNext, False)
        ' Preferable
        'Set cellx = .Range("A1:A99").Find("Overview", , _
                xlValues, xlPart, xlByColumns)
        ' Minimal
        Set cellx = .Range("A1:A99").Find("Overview", , xlValues, xlPart)

        If Not cellx Is Nothing Then
            Debug.Print cellx.Address
          Else
            Debug.Print "Cell range not found."
        End If

    End With

End Sub

查找方法提醒

  • 第一个参数 What 包含要搜索的数据,并且必填。所有其他参数都是可选的。
  • 省略第二个参数之后,您的搜索将从 A2并以A1结尾,这通常是可取的,因为我们有 第一行中的标题。但是要从A1开始搜索并结束 如果使用A99,则必须将 After 参数设置为"A99"
  • 第3,第4和第5个参数 LookIn LookAt 和 每次执行Find时, SearchOrder 保存
    • 通过将 LookIn 参数的参数设置为xlValues,您可以避免 搜索公式(或注释)。
    • LookAt 已正确设置为xlPart,以在仅属于其中一部分的单元格中找到 What 参数(Overview)的值他们例如将找到Product OverviewOverview of Parts。是吗?
    • 可以安全地省略
    • SearchOrder ,因为我们在单列范围内进行搜索。
  • 第6个参数 SearchDirection ,默认为 xlNext,其中 在代码中使用,因此可以安全地省略。
  • 第7个参数 MatchCase ,默认为 False来查找OverViewovErView,此处可能没有问题。