Подозреваю, что вопрос наивен и не знаю элементарного (поиск не помог). Но как самым простым образом обратиться по CodeName к листу книги, не являющейся ThisWorkbook? Наподобие, как для ThisWorkbook это можно сделать коротко, при обращении к ячейке A1 так: ASheet1.[A1]
Конструкции типа ABook1.ASheet1.[A1] не работают, а каждый раз проверять через If sh.CodeName = "ASheet1" Then sh.[A1] .. - громоздко.
Grr, пишет ошибку ".. out of range..". Вряд ли возможно, что в коллекции Sheets перечисляются и name и codename - ведь они могут совпасть по написанию, коллизия-с.
Только перебирая циклом листы книги, можно получить лист по CodeName (напишите отдельную функцию, всего 4 строки кода)
Вариант с VBProject я не рассматриваю, так как не на всех компах будет работать (он требует включения галочки доступа к объектной модели, да и проект VBA файла не должен быть запаролен) А функция простейшая, отработает моментально
Код
Function SheetByCodename(ByRef WB As Workbook, ByVal Codename$) As Worksheet
On Error Resume Next: Dim sh As Worksheet
For Each sh In WB.Worksheets
If sh.Codename = Codename$ Then Set SheetByCodename = sh: Exit Function
Next sh
End Function
Sub ПримерИспользования()
Dim sh As Worksheet
Set sh = SheetByCodename(ActiveWorkbook, "myname")
End Sub
vladjuha написал: Наподобие, как для ThisWorkbook это можно сделать коротко, при обращении к ячейке A1 так: ASheet1.[A1]
Если известно CodeName листа в книге с кодом, например, кодовое имя ASheet1, то ответ, вообще-то, есть в приведенной цитате: нужно так и записать: ASheet1.[A1] = 123 . CodeName листа в VBE (Alt-F11) в Object Browser (F2) отображается на объекте листа в круглых скобах после имени листа. Что поменять CodeName нужно на объекте листа нажать F4 - откроется окно Properties, и записать кодовое имя в поле (Name), которое вверху и в круглых скобках.