Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
29.03.2024, 03:41:51

Войти
Интересные и полезные статьи по работе с Excel и VBA можно найти в разделе ХИТРОСТИ
33 233 Сообщений в 5 454 Тем от 6 750 Пользователей
Последний пользователь: Alex1210
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Как создать функцию, возвращающую имя листа?
Страниц: [1]   Вниз
Печать
Автор Тема: Как создать функцию, возвращающую имя листа?  (Прочитано 9552 раз)
0 Пользователей и 1 Гость смотрят эту тему.
vadimn
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля E-mail
« : 29.12.2013, 15:51:09 »

В колонтитулах Excel есть возможность вставить в заголовок книги имя книги, имя листа, дату сохранения и т.д. Можно ли создать функции, которые возвращали бы эти данные. Тогда не только в колонтитулах листа можно было бы ими манипулировать. Иногда очень удобно называть имена файлов и листов определенным образом и использовать эти имена в заголовках таблиц. После, копируя файл с другим именем, получаешь автоматически измененный заголовок.
Так, если имеется лист (или файл) с названием "2013" ("2013.exe"), то можно было бы сделать в какой нибудь ячейке такой текст:
= "По итогам " & имя_листа() & "года."
= "Расчет количества деталей на " & имя_файла & "год."
= "Прогноз потребности количества деталей на " & имя_файла + 1 & "год."
Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #1 : 29.12.2013, 16:46:54 »

Имя листа:
=ПСТР(ЯЧЕЙКА("filename";A1);ПОИСК("]";ЯЧЕЙКА("filename";A1))+1;300)

примерно так же и имя книги можно:
=ПСТР(ЯЧЕЙКА("filename";A1);ПОИСК("[";ЯЧЕЙКА("filename";A1))+1;ПОИСК("]";ЯЧЕЙКА("filename";A1))-ПОИСК("[";ЯЧЕЙКА("filename";A1))-1)

Дату сохранения только через VBA - поищите по FileDateTime. Что означает "и т.д." плохо понятно, но вероятно тоже через VBA.
Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
vadimn
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля E-mail
« Ответ #2 : 29.12.2013, 17:47:50 »

Спасибо! Я и не знал, что это можно без VBA. "и т.д" - это другие свойства документа, например, дата печати.
А я пытался написать код или функцию, возвращающую эти значения, но постоянно промахивался и выходили сообщения с ошибками.
О! Наконец-то получилось как я хотел! Название листа "2013". В модуле пишу такую функцию:
Код: (vb)
Function строка_итогов()
Dim лист As String
лист = Range("A1").Parent.Name
строка_итогов = "По итогам " & лист & " года"
End Function

Затем в ячейку вставляю:
=строка_итогов()
... и получается "По итогам 2013 года"
« Последнее редактирование: 29.12.2013, 19:59:42 от vikttur » Записан
vadimn
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля E-mail
« Ответ #3 : 29.12.2013, 18:04:56 »

Рано я обрадовался. Если в книге несколько листов, то функция возвращает не имя текущего листа, а имя первого листа. Как же указать, что лист текущий?
Записан
vadimn
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля E-mail
« Ответ #4 : 29.12.2013, 18:12:02 »

Нашел, надо вот так писать:
лист = ActiveSheet.Name
Я, наверное, много пишу не подумав, но, может быть кому-то пригодится.
« Последнее редактирование: 29.12.2013, 18:14:19 от vadimn » Записан
Дмитрий Щербаков(The_Prist)
Администратор
Ветеран
*****

Репутация: +485/-0
Офлайн Офлайн

Сообщений: 5 828



Просмотр профиля WWW
« Ответ #5 : 29.12.2013, 18:23:50 »

Правильнее писать так:
Код: (vb)

Function строка_итогов()
строка_итогов = "По итогам " & Application.Caller.Parent.Name & " года"
End Function


И используйте теги VBA Code для оформления кодов.

А скажите, где в Excel Вы видели свойство, отражающее дату печати? Мне просто интересно. Текущая дата - да, а вот дата печати...
« Последнее редактирование: 29.12.2013, 18:26:09 от The_Prist » Записан

Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Пункты приёма Спасибов:    -41001332272872  -R298726502453
vadimn
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля E-mail
« Ответ #6 : 29.12.2013, 19:07:02 »

Дата печати - это в Word-е есть, я подумал, что и в Excel-е тоже. Не подскажите, как использовать теги VBA, нигде не нашел...
Записан
vadimn
Новичок
*

Репутация: +0/-0
Офлайн Офлайн

Сообщений: 22


Просмотр профиля E-mail
« Ответ #7 : 29.12.2013, 19:12:22 »

Нашел. Если использовать кнопку "ответить", а не "Быстрый ответ", то появится много дополнительных возможностей, в том числе и теги VBA Code
Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru