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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.05.2010, 11:51   #1
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию Работа с xla файлом 2.

В рабочей книге часть листов имеет кодое имя, через котрое к нему можно обращаться из VBA напрямую. При переносу кода в книгу xla столкнулся с тем не получается обраться к таким листам в активной книге подобным образом, удалось обратиться к листам только по имени. Например: в активной книге есть такой лист: Исх_ДанныеДоговора(Исх.данные договора)
В xla книге удалось к нему обраться через такую конструкцию:
Set Исх_ДанныеДоговора=ActiveWorkbook.W orksheets("Исх.данные договора")
Что не удобно, так как код перестанет работать если переименовать файл в Excel'е. Можно изменить строку так что бы обращаться к листу по кодовому имени?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 23.05.2010, 12:01   #2
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Здравствуйте.
Я вот так и не понял(честно, три раза прочитал пост) - Вы к листу какой книги не можете так обратиться, и главное - к листу какой книги ХОТИТЕ обратиться? Мелькает xla один раз, но Вы почему-то про активную больше говорите....

Если у Вас действительно xla(именно надстройка, а не тупо расширение xla), то и обращаться уже надо в коде по имени книги или ThisWorkbook(если код в самой надстройке).
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 23.05.2010, 12:27   #3
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от The_Prist Посмотреть сообщение
Здравствуйте.
Я вот так и не понял(честно, три раза прочитал пост) - Вы к листу какой книги не можете так обратиться, и главное - к листу какой книги ХОТИТЕ обратиться? Мелькает xla один раз, но Вы почему-то про активную больше говорите....
Если у Вас действительно xla(именно надстройка, а не тупо расширение xla), то и обращаться уже надо в коде по имени книги или ThisWorkbook(если код в самой надстройке).
Уже больше года колдую над созданием и отладкой небольшой проги для создания в excel'е нужных таблиц. Пока весь код и все данные находяться в одном файле, что не удобно, так как для каждого "объекта" создается свой файл. Со всеми вытекающими от сюда последствиями... Приступил к переносу части общих данных и всего кода в надстройку (xla). На даном этапе для удобства редактирования убрал "невидимость" у xla книге. Потом верну.
Вот и возникла необходимость в активной книге запускать код из надстройки, но работать с данными и листами активной книге. Не могу обратиться из кода в надстройке к листам активной книге.

Или я чего-то не монимаю?.. И при вызове из активной книги кода в надстройке нет необходимости специально прописывать обращение к активной книге?
С уважением, Алексей.

Последний раз редактировалось tae1980; 23.05.2010 в 12:35.
tae1980 вне форума Ответить с цитированием
Старый 23.05.2010, 13:10   #4
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Обращение по кодовому имени к листу возможно лишь к листам той книги, в которой расположен сам код. Так что Вам придется обращаться по имени или индексу. Как вариант, если Вы вызывать код планируете из активной книги через процедуру, то можно передавать имя листа в процедуру надстройки:
Код:
'Код в активной книге
Sub Transfer_Sh_Name()
Run "Addin.xla!Addin_Procedure", Исх_ДанныеДоговора.Name
End Sub
'Код в надстройке
Sub Addin_Procedure(ByVal sShName as string)
Set Исх_ДанныеДоговора=ActiveWorkbook.W orksheets(sShName)
End Sub
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 23.05.2010, 13:41   #5
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 842
По умолчанию

Цитата:
Сообщение от The_Prist Посмотреть сообщение
Обращение по кодовому имени к листу возможно лишь к листам той книги, в которой расположен сам код. Так что Вам придется обращаться по имени или индексу.
Как я понимаю, что пропытке засунуть код в dll (что планируется на следующем шаге) будет та же проблема... Остается запретить перименование ключевых страниц.
Цитата:
Сообщение от The_Prist Посмотреть сообщение
Как вариант, если Вы вызывать код планируете из активной книги через процедуру, то можно передавать имя листа в процедуру надстройки:
Код:
'Код в активной книге
Sub Transfer_Sh_Name()
Run "Addin.xla!Addin_Procedure", Исх_ДанныеДоговора.Name
End Sub
'Код в надстройке
Sub Addin_Procedure(ByVal sShName as string)
Set Исх_ДанныеДоговора=ActiveWorkbook.W orksheets(sShName)
End Sub
Имена страниц известны заранее. Всего 8 страниц к которым нужно обращаться по кодовым именам. Как вариант передавать сразу 8 имен...

Спасибо!
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с xla файлом tae1980 Microsoft Office Excel 0 21.05.2010 21:02
[C++] Работа с файлом AquaticSoul Общие вопросы C/C++ 3 29.04.2010 12:10
Работа с файлом.. dimorik Win Api 2 23.03.2010 21:26
Работа с файлом SVadiks Помощь студентам 3 08.12.2009 17:46
Работа с файлом Илюха... Помощь студентам 0 06.12.2009 20:42