Страницы: 1
RSS
Нужна помощь: Создание функции в excel-2007, аналогичной функции =ЛИСТ() в более современных версиях
 
Добрый день!

На работе удаляют Excel (импортозамещение...). Сейчас ещё установлен 2013 офис, но когда снесут (а снесут очень скоро) будет возможность пользоваться 2007 офисом. И сейчас у меня есть файлы, которые имеют функции, которых нет в 2007 офисе.
Одна из самых нужных на данный момент - это функция ЛИСТ, она просто возвращает номер листа, в котором эта формула прописана.

Собственно, задача: надо сделать так, что бы в 2007 экселе работала функция ЛИСТ из старших офисов.

Сам я вижу решение этой задачи так: надо создать в экселе 2007 пользовательскую функцию ЛИСТ, по написанию такую же, как в старших версиях, проиндексировать (тут я могу в терминах путаться) её, чтобы 2007й эксель её воспринимал как свою обычную функцию.
Пока нашел следующее: получить номер листа можно таким кодом:     ActiveCell.FormulaR1C1 = ActiveSheet.Index, соответственно я попробовал создать функцию с таким кодом:

Function SHEET(s)
s = ActiveSheet.Index
End Function

Но оно, естественно, не работает, да ещё и формула при написании выглядит как =PERSONAL.XLSB!SHEET(), а не =sheet(), как должна... может я изначально заблуждаюсь с направлением решения.
Так что прошу вашей помощи!

P.S. представленная выше задача - это  минимум, если кто то знает как системно решить вопрос со всеми функциями работы в 2007 офисом с функциями старших - пишите, может задача не новая и есть какие нибудь готовые решения в виде расширений...  
// вопрос гуглил, поиск по форуму также не сильно помог, вроде понимаю что вроде не сложно, но я в VBA совсем новичок
 
Цитата
Serge_Excel написал:
системно решить вопрос
может быть так
https://www.planetaexcel.ru/plex/
 
удивительны 2 аспекта
Цитата
Serge_Excel написал:
На работе удаляют Excel (импортозамещение...). Сейчас ещё установлен 2013 офис, но когда снесут (а снесут очень скоро) будет возможность пользоваться 2007 офисом.
странное какое импортозамещение.
Цитата
Serge_Excel написал:
Одна из самых нужных на данный момент - это функция ЛИСТ,
где и для чего она так активно используется?
По вопросам из тем форума, личку не читаю.
 
Цитата
Serge_Excel написал:
выглядит как =PERSONAL.XLSB!SHEET(), а не =sheet(),
- чтоб выглядела без указания на книгу - кладите код  в надстройку.
И код должен быть другим.
Например
Код
Function list(r)
Application.Volatile
list = r.Parent.Index
End Function

или без аргумента

Function List()
Application.Volatile
List = Application.Caller.Parent.Index
End Function

Название конечно можете изменить, я на 365 имею уже Лист()
Изменено: Hugo - 14.11.2024 14:46:31
 
Цитата
БМВ,
Цитата
написал:
странное какое импортозамещение.
Нам ставят российский аналог. Он с виду похож на эксель, но вот оптимизация у него хреновая, с большими файлами не справляется, на сетевых ресурсах глючит, выгрузки из нашего рабочего ПО не читает... в общем проблем много.
Цитата
написал:
где и для чего она так активно используется?
По работе приходится создавать акты, каждый на отдельной странице. Ну соответственно я делаю одну, оформляю, дальше копирую эту страницу нужное кол-во раз (с помощью расширения ёxcel), и информация на них автоматически заполняется в зависимости от номера листа, т.к. при копировании листов это единственная переменная, которую не надо менять вручную.

 
Hugo, спасибо! Код рабочий, буду дальше приспосабливать, по надстройкам информации много есть, думаю разберусь!  
 
Цитата
Serge_Excel написал:
По работе приходится создавать акты, каждый на отдельной странице.
П.С. Никогда не понимал для чего ОДНОВРЕМЕННО иметь в книге несколько одинаковых актов...Что Вы с ними делаете?
Раз уж макросы планируете использовать, присмотритесь к этой статье
Заполнение бланков данными из таблицы
Согласие есть продукт при полном непротивлении сторон
 
Sanja, пока не будете иметь с этим дело именно в работе (вот прям именно в работе, а не просто в плоскости решения какой то задачи в экселе, как вы сейчас воспринимаете), сложно понять :) . Но попытаюсь объяснить, если интересно:
В этих актах часовой профиль потребления ЭЭ, на каждое присоединения свой акт, их может быть сотни. Я считаю в этих актах мощность по специальной методике, если есть подозрение на искажение данных, я захожу в этот акт и визуально его оцениваю (на какие часы приходятся пиковые нагрузки, какие там цифры и т.п.) и только при необходимости я выбранный акт могу куда то отправить. В общем нужно визуально наглядное представление...

Поэтому способ, изложенный в статейке, на которую вы ссылку дали, мне не подходит, т.к. мне не надо их печатать, мне нужно при необходимости визуально проанализировать эти акты.

Да и в целом эксель очень разносторонний, одну задачу можно решить разными способами в силу своих компетенций в экселе. Если я нашел по какой-то задаче способ и он работает, я уже в него не лезу)  
 
Цитата
Serge_Excel написал:
изложенный в статейке
зачем так уничижительно то? Не подходит - ну и ладно. Да и напрямую, прямо из статьи, конечно не взлетит на Вашей задаче. А анализировать данные - это основная задача самого Excel и он с этим справиться не хуже Вашего визуально метода. Ну, собственно, дело как всегда, хозяйское, я просто предложил рассмотреть другие варианты решения Вашей задачи
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Serge_Excel написал:
Нам ставят российский аналог.
тут странного нет, а вот то что остается 2007 - это странно. А боль импортозамещения я знаю не хуже.
Цитата
Serge_Excel написал:
при копировании листов это единственная переменная, которую не надо менять вручную.
Это не номер, а порядковый номер , который может изменится при перемещении листа между собратьями.

Назовите Лист (1), Aкт (1), при компировании будет (2) (3).... а это обрабатывается не сложно встроенными
=--RIGHT(SUBSTITUTE(SUBSTITUTE(CELL("filename";A1);")";);"(";"   ");3)
По вопросам из тем форума, личку не читаю.
 
Цитата
написал:
зачем так уничижительно то?
Ни в коем случае не хотел принижать значимость этой статьи. А новые способы решения конечно же полезно изучать!  
 
Цитата
написал:
а вот то что остается 2007 - это странно
Скажем так, официально её нет...  ;)  
 
Off
Цитата
Serge_Excel написал:
Скажем так,
скажем следом ОС тоже заменят и запуск приложений подобных не сработает даже через имулятор. Но это вопрос совершенно другой.
А вот касаемо UDF планируемой к использованию, нужно осторожно подходить.  Она или должна быть волотильной. Иначе не пересчитает при изменениях.
По вопросам из тем форума, личку не читаю.
 
БМВ, да, это следующий шаг :cry:  Но это будет несколько позже, так что решаем проблемы по мере их поступления. Потом вроде накатят линукс и эмулятор винды (бред полный), и уже потооом, когда нибуууудь совсем винду снесут.
А что, в эмуляторе винды могут не открываться портабл версии приложений?  
Страницы: 1
Читают тему
Наверх