Спасибо!
Ячейка не плавающая, просто их много и в разных местах листа.
С ходу получился такой код. Работает, но может можно оптимальнее?
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strTemp, strTemp1 As String, SearchValue As Variant, rngCurTmp, rngCurTmp1 As Range, shCurTemp As Worksheet
strTemp = Empty
If Target.Cells.Count > 1 Then Exit Sub
On Error Resume Next
strTemp = Target.Validation.Formula1
On Error GoTo 0
If IsEmpty(strTemp) Then
Exit Sub
Else
rngCurTmp = ActiveCell.Address
shCurTemp1 = ActiveCell.Worksheet.name
SearchValue = Target.Value
strTemp = Right(strTemp, Len(strTemp) - 1)
Application.Goto Reference:=[strTemp]
Selection.Find(What:=Target.Value, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
Application.EnableEvents = False
Target.Formula = "=" & ActiveCell.Worksheet.name & "!" & ActiveCell.Address
Application.EnableEvents = True
Sheets(shCurTemp1).Select
ActiveSheet.Range(rngCurTmp).Select
End If
End Sub
Добавление:
Метод Goto Reference выделяет указанный диапазон, что не очень удобно (корректно). Иной способ поиска строки и взятие ее адреса, насколько я понимаю - перебор строк диапазона списка?