Модераторы: mihanik
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Worksheet sub для программно созданного листа 
V
    Опции темы
НеуФазендник
Дата 11.2.2012, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 9.5.2006

Репутация: нет
Всего: 2



Добрый день.
Программа работает с рядом рабочих листов в книге. Их количество определяется потребностью пользователя и от сеанса к сеансу различно. 
Листы наделены программной реакцией на действия пользователя.
В данный момент в книге предопределенное кол-во скрытых листов и вручную внесенны обработчики на каждый из них, подобно приведенному:
Private Sub Worksheet_Change(ByVal target As Range)
Call hi(target)
End Sub
Листы скрыты. При потребности в очередном по очереди раскрываются автоматически.
Вариант исчерпал себя. Ограничивает возможности программы.
Решено динамически создавать новые листы вместо того, чтобы держать их в книге в виде скрытых заготовок. В каждый новый программно созданный лист  нужно закладывать один и тот же код, наподобие приведенного выше. Но как это делать программно???


Это сообщение отредактировал(а) НеуФазендник - 11.2.2012, 15:18
PM MAIL   Вверх
Akina
Дата 11.2.2012, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 26
Всего: 454



Цитата(НеуФазендник @  11.2.2012,  15:51 Найти цитируемый пост)
как это делать программно???

Самое простое - делать копию скрытого листа-шаблона, без данных, но с кодом.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
НеуФазендник
Дата 11.2.2012, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 9.5.2006

Репутация: нет
Всего: 2



Цитата(Akina @  11.2.2012,  22:02 Найти цитируемый пост)
Самое простое - делать копию скрытого листа-шаблона, без данных, но с кодом. 

Да, держу в голове этот вариант.
Не самый изящный.
Но, скорее всего, единственный возможный.
Спасибо.

Это сообщение отредактировал(а) НеуФазендник - 11.2.2012, 22:22
PM MAIL   Вверх
LOPUH
Дата 12.2.2012, 06:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Растение
*


Профиль
Группа: Участник
Сообщений: 245
Регистрация: 15.2.2008
Где: Красноярск

Репутация: 3
Всего: 4



Нет не единственно возможный..  Есть вариант с программым добавлением кода. Честно говоря сам никогда не тестил.  В вашем случае, как я понял, лучше всего обрабатывать событие создания нового листа.
Код

Private Sub Workbook_NewSheet (ByVal Sh As Object)
'добавление обработчика событий
Code = "Private Sub Worksheet_Change(ByVal target As Range)" & vbCrLf
Code = Code & " Call hi(target)" & vbCrLf
Code=  Code & "End Sub"

With ActiveWorkbook.VBProject.VBComponents(Sh.Name).CodeModule
      NextLine=.CountOfLines+1
      .InsertLines NextLine, Code
End With
      
End Sub

 Зараннее извиняюсь за возможные синтаксические ошибки, офиса под рукой нет, но идею постарался донести
PM MAIL   Вверх
Дмит
Дата 13.2.2012, 10:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 117
Регистрация: 21.4.2006
Где: г.Волгоград

Репутация: 8
Всего: 9



Если использовать
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
в модуле книги, то событие Change можно отследить на всех листах, включая будущие.

PM MAIL WWW   Вверх
НеуФазендник
Дата 25.2.2012, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 108
Регистрация: 9.5.2006

Репутация: нет
Всего: 2



LOPUH
Дмит
Оба предложеные варианта подойдут и интересны. Не знал о них. Возьму на вооружение. Спасибо.
Все же уже пошел первым путем, предложеным Akina.   Работает. Переделывать пока нет смысла. Так  что успехом в применении новых знаний поделюсь быть может в другой раз  smile 
Еще раз спасибо!!!

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Программирование, связанное с MS Office"
mihanik staruha

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами



  • Несанкционированная реклама на форуме запрещена
  • Пожалуйста, давайте своим темам осмысленный, информативный заголовок. Вопль "Помогите!" таковым не является.
  • Чем полнее и яснее Вы изложите проблему, тем быстрее мы её решим.
  • Оставляйте свои записи в "Книге отзывов о работе администрации"
  • А вот тут лежит FAQ нашего подраздела


Если Вам понравилась атмосфера форума, заходите к нам чаще!
С уважением mihanik и staruha.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Программирование, связанное с MS Office | Следующая тема »


 




[ Время генерации скрипта: 0.0796 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.