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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.03.2009, 22:38   #1
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию Как выполнить действие при закрытии Книги?

Как в макросе, удалить, результаты выбора ComboBox1 перед закрытием рабочей книги?
Наверное как -то так?
Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
With Лист12.ComboBox1
         .Clear
    End With
End Sub

Последний раз редактировалось valerij; 12.03.2009 в 00:11.
valerij вне форума Ответить с цитированием
Старый 12.03.2009, 05:26   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Если он заполнялся программно - то да, именно так:
Код:
Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    Лист12.ComboBox1.Clear
End Sub
Если же у комбобокса заполнено свойство RowSource (или ListSource, не помню уже, какое именно), то есть он заполняется сам на основании данных из определённого диапазона ячеек, тогда немного сложнее.
EducatedFool вне форума Ответить с цитированием
Старый 12.03.2009, 12:39   #3
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Если он заполнялся программно.
Да программно, но не пойму, почему, так, надо делать при закрытии(так все работает), а если при открытии книги(так не работает)?
Код:
Private Sub Workbook_Open()
Лист12.ComboBox1.Clear
With Лист12.ComboBox1
         For iDAY% = 1 To 31
             .AddItem iDAY%
         Next
         .ListIndex = 0
End With
End Sub
valerij вне форума Ответить с цитированием
Старый 12.03.2009, 12:47   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
а если при открытии книги(так не работает)?
А что не работает-то?
В чём проявляется неработоспособность?
У меня всё работает...
EducatedFool вне форума Ответить с цитированием
Старый 12.03.2009, 13:19   #5
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
А что не работает-то?
При открытии листа ВЕС, сначала я должен выбрать значение в ComboBox1, а потом в ComboBox2 иначе в ComboBox2 нет ничего.
Допустим я выбрал 1 -10, просмотрел и при закрытии книги сохранить, ОК.
Еще раз открываем, стоит как сохранил, 1 -10, а мне теперь надо 1 -11, а в ComboBox2 пусто и пока я не передерну ComboBox1 -ComboBox2....
Вложения
Тип файла: rar 1.rar (86.4 Кб, 18 просмотров)
valerij вне форума Ответить с цитированием
Старый 12.03.2009, 14:17   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В макросе Workbook_Open
после строки Лист18.ComboBox1.Clear
поставь строку Лист18.ComboBox2.Clear
Тогда и второй комбобокс будет очищаться.

Цитата:
стоит как сохранил, 1 -10, а мне теперь надо 1 -11
Не совсем понял, что требуется.
Первый комбобокс ведь сбрасыватся вроде бы...

Вообще, ты умудряешься формулировать задачи так, что очень сложно понять, что и как должно работать.
EducatedFool вне форума Ответить с цитированием
Старый 12.03.2009, 14:31   #7
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Вообще, ты умудряешься формулировать задачи так, что очень сложно понять, что и как должно работать.
Самое простое, выбери в ComboBox-сах даты: 1 и 5 и ты увидишь, что в ComboBox2 пусто и надо передернуть сначала в ComboBox1 поставить 2, затем там же 1 и только тогда в ComboBox2, появится выбор.

А если при закрытии книги, как выше, применить макрос, то все ОК, отсюда и возник вопрос, почему при закрытии очистка, а не при открытии!!

Последний раз редактировалось valerij; 12.03.2009 в 14:34.
valerij вне форума Ответить с цитированием
Старый 12.03.2009, 14:40   #8
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В макросе Workbook_Open
вместо строки .ListIndex = 0
поставь строки
.ListIndex = -1
.Value = 1
EducatedFool вне форума Ответить с цитированием
Старый 12.03.2009, 15:07   #9
valerij
Старожил
 
Аватар для valerij
 
Регистрация: 12.05.2007
Сообщений: 2,339
По умолчанию

Цитата:
.ListIndex = -1
.Value = 1
Теперь, все ОК!
Тока поясни, зачем ListIndex = -1, если тут же значение ставится 1(Value = 1)
valerij вне форума Ответить с цитированием
Старый 12.03.2009, 15:31   #10
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
зачем ListIndex = -1, если тут же значение ставится 1(Value = 1)
Чтобы сработал макрос ComboBox1_change

Если оставить ListIndex = 0 и записывать в комбобокс единицу, то макрос не будет срабатывать, если на момент сохранения файла в этом комбобоксе уже была единица.

Проще, конечно, было бы вместо этих строк просто запустить макрос ComboBox1_change, но в этом случае тебе надо было бы убрать ключевое слово private из заголовка макроса.
EducatedFool вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выполнить действие один раз. IVANSour Общие вопросы Delphi 5 02.02.2009 22:01
выполнить действие. IVANSour Общие вопросы Delphi 6 01.02.2009 22:53
Выполнить действие один раз. IVANSour Общие вопросы Delphi 11 01.02.2009 14:17
При закрытии книги, удаляются листы Romuald Microsoft Office Excel 3 20.01.2009 21:34