tolikt » 29 окт 2005, 13:16
В модуль VBA своей книги (или книги Personal.xls) вставить код:
Function ИмяЛиста(ByRef MyRange As Range) As String
Application.Volatile
ИмяЛиста = MyRange.Parent.Name
End Function
и в нужной ячейке (напр., А1) вставить формулу:
=ИмяЛиста(A1)
или
=PERSONAL.XLS!ИмяЛиста(A1)
Плюсы такого способа:
- работает в несохранённой книге
- сама формула выглядит короче (обычно имя листа нужно не просто само по себе, а в составе сложной формулы; и нагромождение лишних функций может только лишний раз запутать)
- работает более корректно, т. к. если формула =ПСТР(ЯЧЕЙКА("filename";A1);НАЙТИ("]";ЯЧЕЙКА("filename";A1))+1;32) ссылается на книгу, которая находится в папке с экзотическим названием типа "My]Folder", то имя листа отобразится неверно.
Минусы (при переносе книги на другой компьютер):
- если функция в модуле VBA самой книги, то при открытии книги появляется предупреждение о наличии макросов, и пользователь, который не в курсе дела, может отказаться от выполнения макросов и в ячейке появляется ошибка #ИМЯ?
- если функция в модуле VBA книги Personal.xls, то при переносе книги на другой компьтер, где в его Personal.xls нет данной функции, появляется ошибка #ИМЯ? (как вариант - в другом Personal.xls функция ИмяЛиста() есть, но она совсем другая :-), тогда и результат будет не тот, что ожидался)
В модуль VBA своей книги (или книги Personal.xls) вставить код:
Function ИмяЛиста(ByRef MyRange As Range) As String
Application.Volatile
ИмяЛиста = MyRange.Parent.Name
End Function
и в нужной ячейке (напр., А1) вставить формулу:
=ИмяЛиста(A1)
или
=PERSONAL.XLS!ИмяЛиста(A1)
Плюсы такого способа:
- работает в несохранённой книге
- сама формула выглядит короче (обычно имя листа нужно не просто само по себе, а в составе сложной формулы; и нагромождение лишних функций может только лишний раз запутать)
- работает более корректно, т. к. если формула =ПСТР(ЯЧЕЙКА("filename";A1);НАЙТИ("]";ЯЧЕЙКА("filename";A1))+1;32) ссылается на книгу, которая находится в папке с экзотическим названием типа "My]Folder", то имя листа отобразится неверно.
Минусы (при переносе книги на другой компьютер):
- если функция в модуле VBA самой книги, то при открытии книги появляется предупреждение о наличии макросов, и пользователь, который не в курсе дела, может отказаться от выполнения макросов и в ячейке появляется ошибка #ИМЯ?
- если функция в модуле VBA книги Personal.xls, то при переносе книги на другой компьтер, где в его Personal.xls нет данной функции, появляется ошибка #ИМЯ? (как вариант - в другом Personal.xls функция ИмяЛиста() есть, но она совсем другая :-), тогда и результат будет не тот, что ожидался)