Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2011, 21:16   #1
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию Personal.xls как использовать ?

MS Office Excel 2007
создал Personal.xlsb. закинул туда макросы самые часто используемые.
файл загружается (жаль путь к нему изменить похоже нельзя), макросы видны. вот беда только - макросы взаимосвязаны (т.е вызывают другие макросы или функции из того же модуля).
только вот функции и макросы расположенные в personal.xls запустить так просто не выходит.
например в Personal.xlsb есть Module word_func2007
в нем функция
Public Function open_wordN
однако запустить call open_wordN нельзя - не видна функция. что делать ? я то надеялся Personal.xls как фреймворк использовать...

...
разделом случайно промахнулся (( перенесите в Excel

Последний раз редактировалось bdfy; 25.02.2011 в 21:21.
bdfy вне форума Ответить с цитированием
Старый 25.02.2011, 22:22   #2
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Никаких проблем.
Вызывайте через Application.Run
Код:
Dim res as Variant
res  = Application.Run("Personal.xlsb!openwordN", Arg1)
Путь к файлу персональных макросов возвращает код
Код:
Application.StartupPath
Этот путь разный в XP и в Vista/7
Ничто не мешает: поместить свою функцию в книгу с любым именем и находящуюся по любому доступному пути,
открыть книгу своим макросом при начале исполнения приложения, вызывать из этой книги функции и подпрограммы,
явно указывая источник.

Альтернатива: Воспользуйтесь ранним связыванием. Поместите ваш код в рабочую книгу и установите ссылку на неё в Tools Reference
Если предположить, что MyPrj - имя вашего VBA проекта, cослаться на функцию можно будет как MyPrj.openwordN
Разумеется, это можно сделать и с PERSONAL.XLSB. Не забудьте только изменить имя VBA проекта.
Наконец, можно работать с кодом в VBA надстройке ...

Последний раз редактировалось Aent; 25.02.2011 в 23:49.
Aent вне форума Ответить с цитированием
Старый 25.02.2011, 23:59   #3
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию

Код:
Вызывайте через Application.Run
это перелопачивать весь код. умаюсь. я упростить себе жизнь хотел а не наоборот.
Цитата:
Если предположить, что MyPrj - имя вашего VBA проекта, cослаться на функцию можно будет как MyPrj.openwordN
тоже самое ((
а сделать так чтобы функции/макросы вели себя аккурат так же как если бы они были в активной книге нельзя ?
Цитата:
Наконец, можно работать с кодом в VBA надстройке ...
а это как ?
bdfy вне форума Ответить с цитированием
Старый 26.02.2011, 00:40   #4
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Цитата:
Сообщение от bdfy
это перелопачивать весь код. умаюсь.
Максимум что возможно - включить в ваш проект модуль с кодом посредником
типа :
Код:
....
Public Function openwordN() as variant
   openwordN = Application.Run("Personal.xlsb!openwordN")
end Function
Такой код можно сгенерировать автоматически.
При использовании библиотеки функций в нескольких проектах это даст профит в
том, что править код нужно будет только в одном месте ...
Так что либо Application.Run, либо раннее связывание.
Хотя конечно, можно и модуль с кодом скопировать в свой проект ...

Последний раз редактировалось Aent; 26.02.2011 в 00:43.
Aent вне форума Ответить с цитированием
Старый 26.02.2011, 03:49   #5
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию

Цитата:
Хотя конечно, можно и модуль с кодом скопировать в свой проект ...
вот этим я и занимаюсь уже года эдак два. я думаю понятно к чему это приводиться - тьма различных версий одного и того же в принципе кода. где последняя версия не вспомнить. я серьезно думал что Personal.xls будет мне полезен, а оказывается это черте что с невнятным функционалом
bdfy вне форума Ответить с цитированием
Старый 26.02.2011, 04:56   #6
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Функционал вполне внятный. Просто каждая технология имеет свои особенности и ограничения. Я в больших проектах в которых макрокод используется с несколькими
рабочими книгами применяю ранее связывание. Сам код помещаю в XLAM надстройку.
Любая технология требует определённой дисциплины программирования.Если же нужна полноценная VCS - переходите с VBA на VSTO.
Кстати, если имя вашей функции уникально, то при использовании раннего связывания квалификатор проекта (модуля) можно не писать.
Т.е вместо MyPrj.openwordN можно писать просто openwordN

Последний раз редактировалось Aent; 26.02.2011 в 12:57.
Aent вне форума Ответить с цитированием
Старый 26.02.2011, 13:44   #7
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию

Цитата:
Кстати, если имя вашей функции уникально, то при использовании раннего связывания квалификатор проекта (модуля) можно не писать.
Т.е вместо MyPrj.openwordN можно писать просто openwordN
так мне же это и надо собственно ура! - получилось ))
Цитата:
Я в больших проектах в которых макрокод используется с несколькими
рабочими книгами применяю ранее связывание. Сам код помещаю в XLAM надстройку.
а ключевые слова для поиска хорошего чтива по теме ? или может пример даже есть ?
Цитата:
Если же нужна полноценная VCS - переходите с VBA на VSTO.
опять же раскиньте аббривеатуру пжлст

у меня большинство проектов есть связка Excel (расчеты)/Word (отчет формирует там)/Visio (для схем и диаграмм которые ексель не может построить). все на VBA запускается из Excel, иногда Visio (если все вокруг графики вертиться). Вот давно сижу думаю как организовать все это лучше, чтобы одинаковый код в различных проектах не повторялся. для Excel похоже вот оно решение работает.
bdfy вне форума Ответить с цитированием
Старый 26.02.2011, 15:20   #8
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

VSTO это Visual Studio Tools for Office - средство программирования
приложений MS OFFICE в среде MS Visual Studio. Работает и с VS 2008 и с 2010.
Программирование ведётся не на VBA а на .NET языках. Например, на С# или VB.NET.
В проектах доступна расширенная событийная модель офиса + все инструментальные средства VS и сопутствующих утилит.
Но всё сильно завязано на версию. VSTO разных версий и для офиса 2003 и для 2010 отличаются сильно.
Начните знакомство со статьи: http://msdn.microsoft.com/ru-ru/magazine/cc163373.aspx
(Обратите внимание на раздел "Развертывание решений VSTO")
Заметка на Хабре:
http://habrahabr.ru/blogs/net/54880/
Хорошая статья про создание VSTO ADD-IN для Excel 2007:
http://www.clear-lines.com/blog/post...tallation.aspx
Достаточно внятная книга на английском
http://ilikebooks.ru/16451-vivek-tha...fice-2007.html
Про использование с PowerPoint и VISIO:
http://msdn.microsoft.com/ru-ru/magazine/cc163471.aspx
http://blogs.msdn.com/b/chcast/archi...o-2005-se.aspx
Что касается Word, то только используя событийную модель VSTO можно в полной
мере воспользоваться новыми элементами управления содержимым.
http://msdn.microsoft.com/ru-ru/magazine/cc163403.aspx
http://archive.msdn.microsoft.com/generateinvoicesvsto
Ну у разумеется, нельзя пройти мимо:
http://msdn.microsoft.com/en-us/vsto/default

Последний раз редактировалось Aent; 26.02.2011 в 15:49.
Aent вне форума Ответить с цитированием
Старый 26.02.2011, 19:19   #9
bdfy
Форумчанин
 
Регистрация: 12.11.2009
Сообщений: 258
По умолчанию

отличная подборка... пойду глядеть.
Цитата:
Но всё сильно завязано на версию. VSTO разных версий и для офиса 2003 и для 2010 отличаются сильно.
а если сосредоточиться на 2007 (как наиболее стабильной и безглючной по моему опыту) какая версия будет наиболее адекватной ?
bdfy вне форума Ответить с цитированием
Старый 26.02.2011, 22:05   #10
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Там в каждой версии свои маленькие радости
Я бы сейчас ориентировался на VS2010 + Office 2010
Aent вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Personal.xls чудеса на виражах 1134 Microsoft Office Excel 6 20.07.2010 09:35
personal.xls ruavia3 Microsoft Office Excel 7 07.04.2010 13:30
Разорвана связь с "PERSONAL.XLS" JhonNik153 Microsoft Office Excel 2 13.05.2009 17:29
как копировать файлы Kaspersky Anti-Virus Personal\5.0\Bases\*.* Podlec Безопасность, Шифрование 3 16.11.2007 11:37
как присвоить значение ячейки R1C1 из 1.xls, допустим какой-нибудь любой ячейке из 2.xls ? diabloskrk Microsoft Office Excel 3 08.10.2007 12:27