tldr: Избавьтесь от операции .Activate и просто используйте Application.GoTo.
Работает с
Application.Goto Reference:=prodProfilesSheet.Cells(r - 5, c), Scroll:=True
... потому что вы можете передать аргумент Reference методу Application.Goto в качестве фактического объекта диапазона или строки xlR1C1, а prodProfilesSheet.Cells(r - 5, c)
- объект диапазона. Чтобы передать ссылку на ячейку в виде строки, используйте
dim addr as string
addr = prodProfilesSheet.Cells(r - 5, c).Address(0, 0, ReferenceStyle:=xlR1C1, external:=true)
Application.Goto Reference:=addr, Scroll:=True
Вы не указали, что представляет Active , но я сильно подозреваю, что раньше это был ActiveCell, а Application.GoTo используется просто для помещения ячейки в верхний левый угол рабочего листа. окно после использования Range. Активируйте метод , чтобы сфокусировать Selection на этой ячейке. Поскольку Application.GoTo выполняет оба действия самостоятельно, операция .Activate является избыточной и может вызвать проблемы, если prodProfilesSheet не был активным рабочим листом.
Другими словами, Application.GoTo может перемещаться и активировать ячейку на текущем листе или другом листе, но .Activate может только фокусироваться на ячейке на текущем листе. Кроме того, для .Activate требуется Application.GoTo, чтобы перенести ячейку в верхний левый угол окна рабочего листа, а Application.GoTo по своей природе больше ничего не нужно, когда применяется аргумент Scroll: = True.