Я пытаюсь найти ячейку, содержащую текст.Я могу сделать это, если я выполню поиск в том же листе, где определен код.Но если я выполню поиск в другой таблице, поиск завершится неудачей.
ПРИМЕЧАНИЕ. Я ожидаю, что проблема заключается в том, что я не до конца понимаю, как обрабатывать обходы между различными таблицами / модулями / объектами.
В моей книге два листа.Первый называется «Альфа»:
Второй лист называется «Бета»:
А вот код, который я определил на листе 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.
Любые идеи будут высоко оценены.
Кстати ...Мой вопрос похож на вопрос, обсуждаемый в Поиск ячейки на другом листе .В этом случае код определяется в стандартном модуле.Разница в моем случае заключается в том, что мой код определен на конкретном листе.