Поиск текста на одном листе из кода на другом листе - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь найти ячейку, содержащую текст.Я могу сделать это, если я выполню поиск в том же листе, где определен код.Но если я выполню поиск в другой таблице, поиск завершится неудачей.

ПРИМЕЧАНИЕ. Я ожидаю, что проблема заключается в том, что я не до конца понимаю, как обрабатывать обходы между различными таблицами / модулями / объектами.

В моей книге два листа.Первый называется «Альфа»: IMG1

Второй лист называется «Бета»: IMG2

А вот код, который я определил на листе Alpha .

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim Country As String
Dim Element As String
Dim BetaWorksheet As Worksheet
Dim MyRange As Range

    ' A friendly message to let us know that we've entered BeforeDoubleClick
    MsgBox ("You double clicked: " & Selection.Value)

    ' The following code works as expected.
    Country = "Bosnia and Herzegovina"
    MsgBox ("That's nice, but let's find Bosnia and Herzegovina" & ".")
    FindSomething (Country)
    MsgBox ("Notice that " & Country & " is selected in the 'Alpha' worksheet.")

    ' The next lines of code do not work as expected.
    Element = "Californium"
    MsgBox ("Now let's look for the element " & Element & " in the 'Beta' worksheet.")
    MsgBox ("We start by selecting cell A1 in the 'Beta' worksheet.")
    Set BetaWorksheet = ThisWorkbook.Worksheets("Beta")
    BetaWorksheet.Activate
    Set MyRange = BetaWorksheet.Range("A1")
    MyRange.Select
    MsgBox ("Now that we've selected A1, let's find " & Element & ".")
    FindSomething (Element)
End Sub

Private Sub FindSomething(TheThing As String)
Dim FindResult As Range

    MsgBox ("Current worksheet: " & ActiveSheet.Name)
    MsgBox ("Searching for: " & TheThing)

    Set FindResult = Cells.Find(What:=TheThing, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=True, SearchFormat:=False)

    If (FindResult Is Nothing) Then
        MsgBox ("Found nothing")
    Else
        FindResult.Activate
    End If
End Sub

Чтобы использовать этот пример воспроизведения проблемы, перейдите в книгу Alpha и дважды щелкните страну.Это просто запускает мой код.

Первая часть примера кода пытается найти (и успешно) жестко закодированную страну (т. Е. Боснию и Герцеговину).

Вторая частьПример кода пытается найти (но не может) жестко запрограммированный элемент (например, Californium).Мне кажется, что проблема в том, что метод Cells.Find все еще ищет в рабочем листе Alpha вместо рабочего листа Beta.

Любые идеи будут высоко оценены.

Кстати ...Мой вопрос похож на вопрос, обсуждаемый в Поиск ячейки на другом листе .В этом случае код определяется в стандартном модуле.Разница в моем случае заключается в том, что мой код определен на конкретном листе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...