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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.07.2010, 17:54   #11
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от cskcsk Посмотреть сообщение
PS: Э-нет, поспешил радоваться. А какая книга тогда будет активной? Данные то обрабатываемые все равно на таблицах исходной книги.
Мне кажется Вам надо всерьез заняться изучением VBA. С книжкой, с Гуглом.
Если Вы изначально строили свои коды под работу с надстройкой, то при переносе проблем с выполнением процедур в активной книге быть не должно. Надстройка скрыта, данные обрабатываются на активной книге.

Но в Вашем случае, я полагаю, Вы в кодах обращаетесь к ThisWorkbook, что означает обращение к книге, в которой расположен код, не зависимо от того, какая книга активная.
Вам необходимо все Ваши коды привести к виду, где обращение всегда идет к активной книге, кроме случаев обращения к "служебным" листам надстройки.

Кнопки вызова процедур надстройки должны быть не в отдельной книге на листах, а именно на отдельной панели. Вы сами их создаете при каждом запуске надстройки. Подробнее читайте в Гугле. Это долгая история.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 01.07.2010, 20:10   #12
cskcsk
Пользователь
 
Регистрация: 17.01.2010
Сообщений: 13
По умолчанию

Не спорю. Я действительно относительно недавно стал работать с VBA. Для меня Excel - вспомогательный инструмент для преобразования исходной информации для других программируемых систем (ПЛК разных производителей).
По ThisWorkbook я к книге не обращаюсь, т.к. одновременно имею дело с одной. Я работаю с именами страниц след. образом (все книги содержат одинаковый по именам набор страниц, но с разными данными в их таблицах):
По нажатию кнопки на странице попадаю в обработчик, откуда передаю управление в модуль, работающий с данной страницей. А там поступаю так
SheetName = ActiveSheet.name
Set Worksheet = Worksheets(SheetName),
после чего выполняю требуемую обработку данных на странице с записью резудьтата на нее же. Если работаю с двумя и более страницами, создаю соответствующие ссылки на них.
PS:
Изначально я с надстройками не работал и не планировал и даже ничего не знал о них. Применение Excel в указанном выше плане мне было даже навязано. Но в тот момент почти все выполнялось в строке формул (СЦЕПИТЬ, НАЙТИ и.т.д.). Сложность в этом случае быстро достигает предела восприятия. Поэтому я и принялся "читать книги, Гугл". Сперва вся обработка была перенесена на кодовые листы страниц. Быстро стали набираться "общие места", которые были вытеснены в модули, а затем появилось желание работать с любой книгой на "физически" одном наборе модулей. С этого и начинается мой пост.
PPS: Ну вот, заработало. Правда уже дома под Excel2000, а не на работе под Excel2007. Еще предстоит помучиться. Но сразу возникает вопрос: а можно держать файл надстройки вместе с файлами рабочих книг в одной директории и регистрировать его автоматически, напр. при открытии одной из книг, работающей с ней? (что бы переносить с компа на комп под разными версиями Excel)

Последний раз редактировалось cskcsk; 01.07.2010 в 20:56.
cskcsk вне форума Ответить с цитированием
Старый 02.07.2010, 09:59   #13
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от cskcsk Посмотреть сообщение
SheetName = ActiveSheet.name
Set Worksheet = Worksheets(SheetName)
Это можно заменить одной строкой и минус одна переменная. Только не надо давать переменным зарезервированные имена - типа Вашего Worksheet - может отсюда и ошибки в выполнении кода(в том числе неработа в разных версиях Excel)?
Код:
Dim wsSh as Worksheet
Set wsSh = ActiveSheet
Цитата:
Сообщение от cskcsk Посмотреть сообщение
а можно держать файл надстройки вместе с файлами рабочих книг в одной директории и регистрировать его автоматически, напр. при открытии одной из книг, работающей с ней? (что бы переносить с компа на комп под разными версиями Excel)
Может я не совсем понял, но подключив надстройку один раз, она будет запускаться с любым файлом Excel. На каждом компьютере можно создать копию этой надстройки и подключить её.
Если же Вы хотите непосредственно с флешки запускать, то проще будет создать вспомогательную надстройку, которая будет проверять имя открываемой книги, сверять её с шаблоном и определять - надо ли искать флешку и запускать основную надстройку с неё.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 02.07.2010, 10:44   #14
cskcsk
Пользователь
 
Регистрация: 17.01.2010
Сообщений: 13
По умолчанию

Все уже заработало без каких-либо изменений, в т.ч. worksheet и прочее.
Так как на работе - 2007 с его долбаным риббоном, то, вероятно, тыкал не туда. Дома на 2000 разобрался за 15 минут, после чего и на 2007 подхватило.
Спасибо за участие.

Последний раз редактировалось cskcsk; 02.07.2010 в 10:49.
cskcsk вне форума Ответить с цитированием
Старый 02.07.2010, 11:07   #15
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от cskcsk Посмотреть сообщение
Все уже заработало без каких-либо изменений, в т.ч. worksheet и прочее.
Я все же посоветовал бы заменить данное имя переменной на не зарезервированное. Это как минимум неправильно и нестабильная работа приложения гарантирована.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 02.07.2010, 11:35   #16
cskcsk
Пользователь
 
Регистрация: 17.01.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от The_Prist Посмотреть сообщение
Я все же посоветовал бы заменить данное имя переменной на не зарезервированное. Это как минимум неправильно и нестабильная работа приложения гарантирована.
Хорошо, займусь на выходных.
cskcsk вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Общие функции и процедуры Sensizu Общие вопросы Delphi 6 17.06.2010 21:42
общие папки Aleksandr Свободное общение 1 05.10.2009 14:29
Общие вопросы по C# smartboy Общие вопросы .NET 1 17.07.2009 21:14
Общие вопросы по mysql pushok PHP 1 14.01.2008 22:57
Администрирование\управление компьютером\Общие папки\Общие ресурсы\прекратить общий доступ lm_strj Безопасность, Шифрование 2 13.10.2007 21:28