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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2014, 19:20   #1
fun_kok
Пользователь
 
Регистрация: 19.02.2014
Сообщений: 15
По умолчанию Событие на изменения в создаваемом листе

Есть лист с кнопкой(Лист1), при нажатии на нее формируется новый лист(Лист2) с данными. Как сделать обработчик события на изменение созданного листа(Лист2)??? И можно ли вообще это сделать в VBA????
fun_kok вне форума Ответить с цитированием
Старый 24.02.2014, 19:21   #2
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Есть событие изменения листа книги
Код:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

End Sub
Вот его и используйте.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 24.02.2014, 20:39   #3
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Еще можно в модуле ЭтаКнига написать
Код:
Dim WithEvents mySh As Worksheet

Private Sub Workbook_NewSheet(ByVal Sh As Object)
  Set mySh = Sh     'связать mySh с создаваемым листом
End Sub

'пример обработчика события вновь создаваемого листа

Private Sub mySh_SelectionChange(ByVal Target As Range)
  MsgBox Target.Address(external:=True)
End Sub
Можно переменную с обработкой событий WithEvents определить в модуле класса, под каждый новый лист создавать экземпляр класса и управлять ими как угодно.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619
Казанский вне форума Ответить с цитированием
Старый 24.02.2014, 20:50   #4
fun_kok
Пользователь
 
Регистрация: 19.02.2014
Сообщений: 15
По умолчанию

Можно немного поподробней (только начинал изучать VBA).Как будет выглядеть обработчик, если нужно
Лист3!A1:D1 = Лист2!A1:D1, т.е. на созданном листе(Лист2), при изменении ячеек в диапазоне A1:D1 изменить содержимое ячеек на листе(Лист3) хотя бы тот же диапазон. Куда этот обработчик записывать, в модуль??? в книгу??? в Лист2 и Лист3 записать не получится, т.к. они создаются после запуска программы.
fun_kok вне форума Ответить с цитированием
Старый 25.02.2014, 01:50   #5
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Private Sub Workbook_SheetChange() находится в книге.
Если имена создаваемых листов заранее известны - прописывайте сразу в коде обработку имени изменяемого листа и соотв. реакцию.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 25.02.2014, 13:21   #6
Казанский
Старожил
 
Аватар для Казанский
 
Регистрация: 31.12.2010
Сообщений: 2,133
По умолчанию

Цитата:
Сообщение от fun_kok Посмотреть сообщение
Как будет выглядеть обработчик, если нужно Лист3!A1:D1 = Лист2!A1:D1
Для этого обработчик не нужен, достаточно вставить формулу в ячейки Лист3.
Если у Вас кнопка на Лист1 типа ActiveX, можете все написать в модуле Лист1, рядом с ее кодом:
Код:
Dim WithEvents sh2 As Worksheet, sh3 As Worksheet

Private Sub CommandButton1_Click()
  If sh2 Is Nothing Then
    Set sh2 = Worksheets.Add(after:=Sheets(Sheets.Count))
    Set sh3 = Worksheets.Add(after:=Sheets(Sheets.Count))
    sh3.Range("A1:D1").FormulaArray = Replace("=IF(~!A1:D1="""","""",~!A1:D1)", "~", sh2.Name)
  Else
    MsgBox "Листы уже созданы!", vbExclamation
  End If
End Sub

Private Sub sh2_SelectionChange(ByVal Target As Range)
  MsgBox Target.Address(external:=True), vbInformation, "Событие созданного листа"
End Sub
Заметьте, что в этом примере sh2 объявлено "с событиями", а sh3 - нет. Поэтому в выпадающем списке объектов с событиями (панель над окном кода) есть CommandButton1, sh2 и Worksheet, а sh3 нет.
Эта панель позволяет создавать заготовки обработчиков событий в два клика, что очень удобно.
exceleved@yandex.ru Яндекс.Деньги: 410011500007619

Последний раз редактировалось Казанский; 25.02.2014 в 13:26.
Казанский вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StringGrid — событие после изменения содержимого ячейки Alex11223 Общие вопросы Delphi 23 30.05.2014 15:24
событие на листе Nalex76 Microsoft Office Excel 10 28.01.2014 10:29
TrackBar - событие после изменения позиции DenProx Общие вопросы Delphi 10 17.04.2013 15:24
Событие изменения/перемещения окна приложения Excel tae1980 Microsoft Office Excel 4 04.01.2012 20:26
На какое событие повесить процедуру изменения насыщенности шрифта в ячейке? O_H Microsoft Office Excel 3 19.08.2010 20:06