Страницы: 1
RSS
Имя и путь шаблона, на основе которого создан xls файл
 
Представим ситуацию, что есть файл-шаблон с расширением xlt. Через Explorer или команду Open можно открыть новый файл (xls). Существует ли способ узнать через VBA имя и полный путь шаблона, на основе которого создан данный новый файл?  
 
К примеру в MS Word это достигается легко:  
Menu -> Insert -> Field... -> Field name = Template (with or without 'Add path to filename')  
 
Если в новом файле можно было бы получить этот путь, то это дало бы пользователю возможность записывать какие-то общие изменения прямо в шаблон, впоследствии используя его для создания новых файлов. Например, какое-либо последнее значение счётчика...  
 
Приму с благодарностью любые советы  
 
Best Regards,  
Ivan M.
 
Посмотрите тут. Оно?  
http://excel-vba.ru/MyAddin_Get_File_Path.html
[*]<a href="mailto:info@ledrex\";>
 
x_X_x, спасибо. Это не совсем то, что мне нужно. Данная функция надстройки позволяет вернуть полный путь открытого файла или же произвольно выбранного файла. А мне нужно знать полный путь к ШАБЛОНУ-xlt, из которого создан открытый в данный момент ФАЙЛ-xls.  
 
Я объясню зачем мне это нужно - может подскажете другое решение. У меня есть универсальный щаблон-xlt, которым пользуются несколько разных пользователей. Они произвольно открывают файлы на основании шаблона и создают отчёты. Задача в том, чтобы каждый факт формирования отчёта был записан и передавался при следующем открытии файла из шаблона очередному пользователю.  
 
Простыми словами, пользователь из шаблона сделал отчёт с номером 20100117_88. Следующий пользователь откроет свой файл из этого же шаблона и макросом должен быть проинформирован, что последний номер отчёта был 20100117_88. Я полагал, что, зная путь к шаблону, можно было бы записывать эти номера обратно в сам шаблон событием закрытия независимого файла-xls.  
 
Может этот контроль можно осуществить по-иному. У меня были мысли (типа записывать это в текстовый файл в общей для всех папке и т.д.), но это всё не не кажется упростым и универсальным.  
 
Regards,  
Ivan M.
 
универсальногошаблона, как отдельного файла не существует на диске, но его можно создать: сохранить файл с именем книга.xlt в папке <systemroot>:\Program Files\Microsoft Office\OFFICE11\XLSTART  
 
потом пересохранять его макросом..
Живи и дай жить..
 
Re: Имя и путь шаблона, на основе которого создан xls файл    
xlt-файл шаблона - общий для нескольких пользователей. Он лежит в общей папке на сервере и доступен им всем. Из этого единого(!) шаблона пользователи формируют отдельные xls-файлы отчёты. Эти отчёты с сервером не связаны, они формируются и сохраняются произвольно на локальных дисках пользователей.  
Задача заключается в контроле таких сформированных и сохранённых отчётах. В частности их последовательной нумерации. Поэтому моя мысль была в том, чтобы при сохранении очередного xls-отчёта на локальной машине возвращать его номер в единый шаблон. Но для этого нужно определять имя и местонахождение данного шаблона на сервере  
 
Уточню, что такая задача не локальная, где пути можно раз и навсегда "жёстко" прописать. Здесь это не сработатет. Такой шаблон у нас универсален в разных филиалах с разным контингентом пользователей и IT-поддержки; там шаблон может лежать где угодно и перемещаться куда угодно  
 
Ivan M.
 
интересно, как же его пользователи находят? это шаблон..  
 
опишите тогда способ загрузки файла..
Живи и дай жить..
 
иксель автоматически загружает тот шаблон, который я вам описал, иначе должны быть какие-то действия по выбору нужного шаблона..
Живи и дай жить..
 
Пользователи находят его вручную (через Explorer или команду Open)на сервере в общей папке. Могут иметь у себя ярлык Рабочем Столе. Могут идти по ссылке из Outlook-сообщения о наличии шаблона.  
 
Пути нахождения стандартные... Однако, не исключено, что в определённый момент шаблон переместят в другое место на сервере. Пользователей уведомят об этом (исправят путь в ярлыке и т.д.). Но VBA-код шаблона при этом накто "трогать" не будет.  
---  
В первом сообщении этой темы я привёл конкретную аналогию в программе MS Word. Там в любом файле можно узнать имя и путь создавшего его шаблона, независимо от его местоположения. Наивно полагал, что подобная возможность имеется и в Excel  
 
Ivan M.
 
после ручного выбора шаблона его директория должна стать текущей,путь к которой определяется функцией curdir()
Живи и дай жить..
 
а имя книги, соответственно, будет и именем шаблона, только с расширением xlt
Живи и дай жить..
 
можно в шаблон включить макрос, записывающий путь открываемого шаблона в ячейку листа..
Живи и дай жить..
 
Цитата: "... пользователь из шаблона сделал отчёт с номером 20100117_88. Следующий пользователь откроет свой файл из этого же шаблона и макросом должен быть проинформирован, что последний номер отчёта был 20100117_88...."  
Ситуация: один пользователь открыл, увидел этот номер - создаёт/редактирует документ. Ещё не закончил. ДРУГОЙ пользователь в ЭТО время открыл - увидел номер. Тот самый...
 
Попробовал с CurDir(). Это путь к текущей директории. Сработало если бы пользователи всегда шли к шаблону через File -> Open. Но если шаблон поперемещать и открыть его через его ярлык или MS Explorer, то текущая директория для MS Excel(записанная в ячейку, с подходом согласен) не поможет.  
 
Интересно, что в целом Excel "помнит" каждый факт открытия файла из шаблона - он добавляет внутренний счётчик xls-файлов в конец его имени. То есть где-то в "глубинных" свойствах файла мог бы быть и путь к шаблону...  
 
Ivan M.
 
To: Юрий  
 
Согласен. Это слабое место и может произойти такая накладка. Но в целом по моей конкретной задаче такие отчёты должны формироваться 1, максимум 2 раза в месяц. После определённого закрытия периода. В принципе даже, надеюсь, одним ответственным пользователем.  
 
Такой контроль нужен для уведомления и контроля даже одному пользователю, что последний номер был таким-то. А там, уже решать ему/ей. На 100% от "человеческого фактора" не защитишься...  
 
Ivan M.
 
В таком случае зачем все эти сложности с путями, с шаблонами? Храним в самом документе имя/номер последнего отчёта. При открытии файла макрос может сообщить этот номер. Можно постоянно иметь его перед глазами. Предусмотреть макрос на закрытие книги, который сохранит новый номер. Или задумка более глобальная и я всё упрощаю?
 
Да, задумка действительно глобальнее. Нужно всё-же иметь шаблон, который будет иметь все настройки дизайна, открывать пустые файлы, иметь связь с другой базой через MS Query и т.д. Тем более, что этот шаблон для пользователей разного уровня из разных филиалов (и даже стран)  
 
Спасибо всем за помощь в поиске решения. Думаю, что дискуссию можно оканчивать и спокойно жить и работать дальше :)  
 
Best Regards,  
Ivan M.
 
Как-нибудь решили эту проблему? Столкнулся с тем же самым. В 2007 Excel такой проблемы нет, но у заказчика стоит 2003.
 
Подниму тему...  
 
Облазил весь интернет (в т.ч. англоязычные форумы) в поисках решения этой проблемы - увы, нигде даже никаких намёков на способы решения.  
 
Странно, что было задано столько наводящих вопросов, - хотя, на мой взгляд, топикстартер достаточно ясно описал задачу.  
 
Тем не менее, повторюсь, что хотелось бы получить.  
 
Итак, есть у нас ГДЕ-ТО НА КОМПЕ некий XLT-файл - шаблон Excel, содержащий макросы.  
Пользователь выполняет в Проводнике двойной щелчок на этом XLT - и в Excel создаётся файл на основании этого шаблона.  
(до этого Excel не запущен, никаких надстроек с макросами перехвата событий приложения нет и быть не может)  
 
 
Надо где-то в свойствах созданного файла откопать путь к шаблону, на основании которого он был создан.  
Версия Excel - 2007 (если это критично)  
 
Макрос определения пути будет запускаться из того самого файла, который был создан по шаблону.  
 
 
Я вижу 2 способа решения - но оба мне очень не нравятся:  
 
1) средствами WinAPI попытаться выдрать из системы (или откуда-нибудь из журнала файловой системы) список последних запускавшихся файлов, и анализировать его  
 
2) Зная имя файла XLT (создаваемый XLS наследует его), прошерстить макросом все диски и все папки в поисках XLT с аналогичным именем  
 
 
Что посоветуете?
Страницы: 1
Читают тему
Наверх