![Копирование ссылок на листы и ячейки](https://rvso.com/image/1692549/%D0%9A%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5%20%D1%81%D1%81%D1%8B%D0%BB%D0%BE%D0%BA%20%D0%BD%D0%B0%20%D0%BB%D0%B8%D1%81%D1%82%D1%8B%20%D0%B8%20%D1%8F%D1%87%D0%B5%D0%B9%D0%BA%D0%B8.png)
Допустим, у меня есть «Лист А» и «Лист Б» в одной и той же рабочей книге.
Лист B имеет ячейку, которая ссылается на лист «A», т.е. ='Лист A'!Q20
Я хочу скопировать лист B и создать «Лист C» в той же рабочей книге, и я хочу, чтобы ссылка на ячейку (='Лист A'!Q20) на листе C теперь ссылалась на лист B, т. е. ='Лист B'!Q20.
Когда я копирую лист B и создаю лист C, ссылка на ячейку по-прежнему ='Лист A'!Q20
Я видел решения похожих проблем, но не при копировании листов в пределах одной книги.
ТИА
решение1
решение2
Вы также можете определить простую пользовательскую функцию, которая возвращает имя рабочего листа, позиция которого перемещена ofs
из текущего рабочего листа.
Function sh(ofs As Long) As String
Dim cw As Long
cw = Application.Caller.Parent.Index
sh = Worksheets(cw + ofs).Name
End Function
Имя предыдущего листа будет sh(-1)
, следующего — sh(1)
.
Теперь вы можете ссылаться на ячейку Q20
на предыдущем листе с помощью формулы:
=INDIRECT("'"&sh(-1)&"'!Q20")
или
=INDIRECT(ADDRESS(20,17,,,sh(-1)))