Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/19: Рейтинг темы: голосов - 19, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 26.07.2012
Сообщений: 20
1

Сделать так, чтобы при закрытии книги удалялась кнопка

06.08.2012, 14:16. Показов 3891. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!

Вопрос, наверное, простой, но я с ним промучалась уже два дня. Как программно удалять кнопку при закрытии книги? Workbook_Close, Workbook_Deactivate, AutoClouse почему-то не работают.

Суть: макрос написан так, что при открытии книги создается кнопка, при нажатии которой выполняется основная программа (физически поставить постоянную кнопку нельзя, так как пишу программу, которую потом включат в большой блок и попросили сделать так,чтобы всё происходило именно программно).

При первом открытии книги всё было нормально. При последующих открытиях каждый раз создаются кнопки, причем что логично, название они уже имеют не CommandButton1 (на которую повешено выполнение программы), а CommandButton2, 3 и т.д. Естественно, новые кнопки не срабатывают и чтобы запустить программу приходится удалять все лишние и добираться до CommandButton1.

Как можно программно сделать так,чтобы при закрытии книги эта кнопка удалялась? Тогда при открытии она снова будет появляться, срабатывать и потом опять удаляться. И так столько раз, сколько необходимо. Отдельно макрос на удаление кнопок с листа есть, и он рабочий:
Visual Basic
1
2
3
4
5
Sub Udalenie ()
For Each x In ThisWorkbook.Worksheets("База").OLEObjects
  If x.progID = "Forms.CommandButton.1" Then x.Delete
Next
End Sub
или проще:
Visual Basic
1
2
3
Sub RRR()
Worksheets("Лист1").Shapes("CommandButton1").Delete
End Sub
Но вот повесить его на закрытие книги не получается.

Помогите, пожалуйста.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.08.2012, 14:16
Ответы с готовыми решениями:

Сделать так чтобы, в форме с помощью кнопки command_button удалялась запись из listbox
Нужно сделать так чтобы, в форме с помощью кнопки command_button удалялась запись из listbox. Т. е...

Как сделать чтобы переменная создавалась 1 раз, а при закрытии программы не удалялась
Я делаю форму входа с паролем, но при этом у меня возникла проблема. public static string key;...

Как при активации чекбокса сделать так, чтобы текстареа удалялась?
Нужен простой пример с функцией яваскрипт. Существует текстареа и чекбокс Как при активации...

Как сделать так, чтобы при закрытии клиента закрывался и сервер?
Допустим есть две программы... Одна из них сервер вторая клиент... Первая программа(сервер)...

6
15145 / 6418 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
06.08.2012, 14:56 2
А Вам удалось выполнить хоть какие-нибудь действия при закрытии книги? Хотя бы MsgBox?
Процедуры называются по другому:
Visual Basic
1
2
[Private] Sub auto_close() 'в обычном модуле
[Private] Sub Workbook_BeforeClose(Cancel As Boolean) 'в модуле книги
1
0 / 0 / 0
Регистрация: 26.07.2012
Сообщений: 20
06.08.2012, 15:12  [ТС] 3
Большое Вам спасибо за быстрый и полезный ответ!!!

В модуле заработал auto_close. В книге почему-то BeforeClose(Cancel As Boolean) не хочет. И еще минус - всё работает, только если на выскакивающий при закрытии книги вопрос "Сохранить изменения?" отвечать "Да". Если выбираешь "нет" - опять новая лишняя кнопка, старая не удаляется.
0
0 / 0 / 0
Регистрация: 06.08.2012
Сообщений: 35
06.08.2012, 15:27 4
Цитата Сообщение от RSM20065 Посмотреть сообщение
И еще минус - всё работает, только если на выскакивающий при закрытии книги вопрос "Сохранить изменения?" отвечать "Да". Если выбираешь "нет" - опять новая лишняя кнопка, старая не удаляется.
Ведь это логично, да? ))

Чтобы сохранял без вопросов при закрытии:

Visual Basic
1
2
3
4
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ActiveWorkbook.Save
    Excel.Application.Quit
End Sub
0
0 / 0 / 0
Регистрация: 26.07.2012
Сообщений: 20
07.08.2012, 08:05  [ТС] 5
Да, всё очень логично)) И крутилась я вокруг этих команд всё это время, и так и сяк пробовала, а потом глаз замылился и всё, ступор))) Спасибо!!
0
1702 / 189 / 19
Регистрация: 20.11.2011
Сообщений: 281
07.08.2012, 09:15 6
При открытии неплохо бы проверять наличие кнопки. И удалять, или не создавать новую. Тогда не понадобится принудительного сохранения, которое само по себе иногда очень вредно. Накосячил в файле - закрыл без сохранения. А так молча сохранит со всеми косяками.
1
0 / 0 / 0
Регистрация: 26.07.2012
Сообщений: 20
15.08.2012, 10:30  [ТС] 7
Кстати kuklp оказался прав. Просто запихнула удаление кнопки в открытие книги. Открывается - удаляет старые и следом создает новые кнопки. Всё работает и от автосохранения ушла.
0
15.08.2012, 10:30
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.08.2012, 10:30
Помогаю со студенческими работами здесь

Сделать так, чтобы при закрытии Form3, закрывалась и форма Form2
Есть 3 формы Из Form1 по кнопке вызывается Form2, из Form2 опять же по кнопке вызывается Form3....

Как сделать так чтобы при закрытии окна сохранялся текстовый файл
]Здраствуйте, я решил создать свой текстовый редактор. Создал меню и написал код чтобы выводило...

Можно ли сделать так, чтобы в bat-файле при ручном закрытии программы происходило действие?
Всем привет у меня вопрос можно ли сделать что бы в bat файле при ручном закрытии программы...

Как сделать так чтобы при выделении текста в memo включилась кнопка
Привет всем: помогите пожалуйста как сделать так чтобы при выделении текста в memo включилась...

Как мне сделать так, чтобы данный текстовый файл был открыт один раз при запуске программы и закрыт при закрытии программы?
Привет! Возник следующий вопрос. Программа состоит из основного окна Form1 и нескольких Unit. По...

Как сделать так чтобы при открытии формы, автоматически нажалась кнопка на форме?
Всем привет. Народ, подскажите, как сделать так чтобы при открытии формы, автоматически...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru