Здесь происходит несколько вещей:
ActiveSheet
является свойством Excel.Application
, а не Workbook
. Поэтому используйте OXL.ActiveSheet
- Слово не знает
ActiveCell
, поэтому используйте OXL.ActiveCell
- Даже тогда
After
должна быть ячейкой в диапазоне поиска - Слово не знает именованных констант для
Find
. Поэтому используйте там значения.
Итак, измените на
OXL.ActiveSheet.Range("E:E").Find(What:=OXL.ActiveSheet.Range("A1").Value, After:=OXL.Range("E1"), LookIn:=-4123, LookAt:=2, SearchOrder:=1, SearchDirection:=1, MatchCase:=False, SearchFormat:=False).Activate
После всего этого рассмотрите
- Вы должны объявить все ваши переменные
- Вы должны указать полный путь к книге, а не полагаться на расположение по умолчанию
- Как узнать, какой лист будет активным при открытии книги? Укажите тот, который вы хотите
- Откуда вы знаете, что
Find
найдет результат? Допустим, что он не работает - Вы должны получить ссылку на найденную ячейку, а не
Activate
ее - Рассматривать код с ранней связью, а не с поздней связью. Есть веские причины для использования.
GetObject(, "Excel.Application")
предполагает, что экземпляр Excel работает. Что если нет? Ваш код должен обрабатывать этот случай
Что-то вроде
Sub Demo()
Dim oXL As Object ' Excel.Application
Dim oWB As Object ' Excel.Workbook
Dim oWB2 as Object ' Excel.Workbook
Dim oSH As Object ' Excel.Worksheet
Dim oSearchRange As Object ' Excel.Range
Dim oRng As Object ' Excel.Range
Set oXL = GetObject(, "Excel.Application")
Set oWB = oXL.Workbooks.Open("C:\Full\Path\To\All Defaults.xls")
Set oWB2 = oXL.Workbooks.Open("C:\Full\Path\To\1.xlsx")
Set oSH = oWB.Worksheets("SpecifySheet")
Set oSearchRange = oSH.Range("E:E")
Set oRng = oSearchRange.Find( _
What:=oSH.Range("A1").Value, _
After:=oSearchRange.Cells(1, 1), _
LookIn:=-4123, _
LookAt:=2, _
SearchOrder:=1, _
SearchDirection:=1, _
MatchCase:=False, _
SearchFormat:=False)
If Not oRng Is Nothing Then
oRng.Activate
End If
End Sub