Как указать, какой лист использовать с find / with - PullRequest
0 голосов
/ 05 февраля 2019

Я хочу найти в диапазоне A1-A99 на определенном листе (wsCaseinfo) слово «Обзор».Я получаю ошибку 1004 в строке «с».

Код является частью большего кода, использующего 3 разных листа в 2 разных файлах.Код циклически перебирает 100 файлов, поэтому будет полезно что-то эффективное.Большое спасибо за вашу помощь.

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

Ответы [ 5 ]

0 голосов
/ 05 февраля 2019

Найти в листе

Кратчайший

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

Метод поискаНапоминание

  • 1-й аргумент Что содержит данные для поиска и требуется .Все остальные аргументы являются необязательными.
  • Опуская второй аргумент, После , ваш поиск начинается с A2 и заканчивается A1, что часто предпочтительнее, так как у нас есть заголовки в первомстрока.Но чтобы начать поиск с A1 и завершить с A99, вам нужно установить для параметра After значение "A99".
  • 3-й, 4-й и 5-й аргументы LookIn , LookAt и SearchOrder , SAVED каждый раз, когда Find выполняется.
    • Установив параметр аргумента LookIn на xlValues, вы предотвращаете возможный поиск в формулах (или комментариях).
    • LookAt правильно установлен наxlPart для поиска значений параметра What (Overview) в ячейках, в которых он является лишь частью их, например, Product Overview или Overview of Parts.Или это?
    • SearchOrder можно смело опустить, так как мы ищем в диапазоне из одного столбца.
  • Шестой аргумент SearchDirection по по умолчанию xlNext используется в коде и поэтому может быть безопасно пропущен.
  • Седьмой аргумент MatchCase по по умолчанию False находит OverView или ovErView, что, вероятно, здесь не проблема.
0 голосов
/ 05 февраля 2019

Если вы используете 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 в соответствии с вашими потребностями.

0 голосов
/ 05 февраля 2019

Вам необходимо добавить 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
0 голосов
/ 05 февраля 2019

Вы можете попробовать:

РЕДАКТИРОВАННАЯ ВЕРСИЯ

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
0 голосов
/ 05 февраля 2019
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()
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...