UDF получения 2 последних символов с имени листа [РЕШЕНО]

Автор Aleksandr H., 23 сентября 2014, 23:34

0 Пользователи и 1 гость просматривают эту тему.

Hasim

Цитата: JohnSUN от 24 сентября 2014, 13:52Не будет решения в общем виде.
А вот это не так.
В данном случае есть решение в общем виде, пригодное для всех подобных функций.
Поскольку это общие типичные ошибки.


JohnSUN

Цитата: Hasim от 24 сентября 2014, 15:00Когда я просил
И действительно - когда? Не помню
Цитата: Hasim от 24 сентября 2014, 15:32
В данном случае есть решение в общем виде, пригодное для всех подобных функций.
Поскольку это общие типичные ошибки.
Да я же не спорю, я же сказал - уступаю... Дерзайте!
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Цитата: JohnSUN от 24 сентября 2014, 15:06Дерзайте!
Сам дерзай!

Вот что я вам скажу:
1. Если моя функция из #5 находится в библиотеке документа, то всё работает: сначала загружается первый лист, а потом выполняется функция.
2. Если моя функция из #5 находится в библиотеке "Standard" в "Мои макросы", то работает если формула не на первом листе. Если на первом, то пишет: нет контролёра.
JohnSUN, твоя функция ведёт себя так же. Aleksandr H. хочет работать с .xls.

JohnSUN

Цитата: rami от 24 сентября 2014, 16:58
Цитата: JohnSUN от 24 сентября 2014, 15:06Дерзайте!
Сам дерзай!
Не поверишь! Постоянно этим занимаюсь  :beer:
Цитата: rami от 24 сентября 2014, 16:58
Вот что я вам скажу:
1. Если моя функция из #5 находится в библиотеке документа, то всё работает:
Извини, но это не совсем так. В смысле, не всё работает.
Попробуй такую штуку: ставим вызов функции в A1 нескольких листов, на произвольном листе жмем Ctrl+Shift+F9 - "жёсткий пересчёт" или "безусловное новое вычисление". Всё хорошо, на текущем листе отобразились нужные символы. Переключаемся на соседний лист. И что?.. В момент вычисления функции .CurrentController.ActiveSheet указывал не на этот лист, а значит и буквы видим "чужие". Повторный пересчет, конечно, даст правильный результат. Но он опять будет одинаковым для всех упоминаний формулы на всех листах.
Цитата: rami от 24 сентября 2014, 16:58сначала загружается первый лист, а потом выполняется функция.
2. Если моя функция из #5 находится в библиотеке "Standard" в "Мои макросы", то работает если формула не на первом листе. Если на первом, то пишет: нет контролёра.
Его действительно в этот момент нет - первые вычисления выполняются ещё до его создания.
Цитата: rami от 24 сентября 2014, 16:58
JohnSUN, твоя функция ведёт себя так же.
Которая из них?
Цитата: rami от 24 сентября 2014, 16:58Aleksandr H. хочет работать с .xls.
И это не проблема. Формула, которую я дал в #9, будет работать и в Calc, и в Excel. Только выглядеть будет как
=ПРАВСИМВ(ЯЧЕЙКА("FILENAME";A1);2+ЦЕЛОЕ(СЛЧИС()))
или
=ПРАВСИМВ(ЯЧЕЙКА("FILENAME";A1);2)
Владислав Орлов aka JohnSUN
Благодарить-не зазорно.
Подарить благо создателям офиса, нашему ресурсу, мне

rami

Каюсь, "безусловное новое вычисление" я не учёл :(, я им практически не пользуюсь. В этом случае надо передать в параметр SHEET().
Цитата: JohnSUN от 24 сентября 2014, 16:30Которая из них?
Та которая в * Error при загрузке.ods , если её перенести в библиотеку "Standard" в "Мои макросы", то возникает проблема первого листа. Кажется разработчики поставили телегу впереди лошади ;D, буду это учитывать.
Вообще не вижу смысла писать пользовательскую функцию, если можно пользоваться "родными" формулами.

Aleksandr H.

JohnSUN , выручаешь как всегда. Код
=RIGHT(CELL("FILENAME";A1);2)
делает то что нужно, без изобретания велосипеда.
Остальным также огромное спасибо за подсказки